DICOM文件的读取显示和本地JPG格式的存储

来源:互联网 发布:php nginx 一键安装包 编辑:程序博客网 时间:2024/06/16 09:03

最近项目要求解析dicom格式的影像文件,并将解析的图像本地保存jpg格式,将这几天查询的资料和个人实现代码共享给大家。

开发环境 win10 + vtk7.0 + itk4.11 + qt5.5 + vs2010

框架编译工具 cmake3.10.0

关于框架的编译以下链接可供参考:

VTK 编译参考:  http://qimo601.iteye.com/blog/1553222 http://blog.csdn.net/wanhongluli/article/details/77852843

ITK编译参考: https://wenku.baidu.com/view/99cfdb2559eef8c75fbfb3e3.html

在此默认已经配置好环境

//设置输入类型typedef itk::Image<unsigned short,2> ImageType;typedef itk::ImageFileReader<ImageType> ReaderType;ReaderType::Pointer reader = ReaderType::New();//设置输出类型typedef unsigned char OutputPixelType;const unsigned int OutputDimension = 2;typedef itk::Image<OutputPixelType,OutputDimension> OutputImageType;//获取DICOM文件读取对象typedef itk::GDCMImageIO ImageIOType;ImageIOType::Pointer gdcmImageIO = ImageIOType::New();//ITK图像数据向VTK图像数据转换对象typedef itk::ImageToVTKImageFilter<ImageType> FilterType;FilterType::Pointer connector = FilterType::New();//获得DICOM文件名并读取DICOM文件char* fileName = "1.dcm";reader->SetFileName(fileName);reader->SetImageIO(gdcmImageIO);reader->Update();//像素灰度值反转ImageType::Pointer image = reader->GetOutput();ImageType::SizeType size = image->GetLargestPossibleRegion().GetSize();ImageType::IndexType index;for(int x = 0; x <size[0];x++)for(int y = 0;y < size[1];y++){index[0] = x;index[1] = y;ImageType::PixelType value = image->GetPixel(index);unsigned short test = 4096 - value; image->SetPixel(index,test);}image->Update();//设置窗位和窗宽typedef itk::IntensityWindowingImageFilter <ImageType, ImageType> IntensityWindowingImageFilterType;IntensityWindowingImageFilterType::Pointer intensityFilter=IntensityWindowingImageFilterType::New();intensityFilter->SetInput(image);intensityFilter->SetWindowMinimum(0);intensityFilter->SetWindowMaximum(4096);intensityFilter->SetOutputMinimum(0);intensityFilter->SetOutputMaximum(255);intensityFilter->Update();//dcm转JPGtypedef itk::CastImageFilter<ImageType,OutputImageType> ImageCastType;  ImageCastType::Pointer imageCast = ImageCastType::New();  imageCast->SetInput(intensityFilter->GetOutput()); //将JPG格式的图像存储在本地typedef itk::ImageFileWriter<OutputImageType> Writer1Type;  Writer1Type::Pointer writer1 = Writer1Type::New();  typedef itk::JPEGImageIO jpgType;  jpgType::Pointer jpgIO = jpgType::New();  writer1->SetImageIO(jpgIO);  writer1->SetFileName("tran.jpg");  writer1->SetInput(imageCast->GetOutput());  writer1->Update();//ITK到VTK转化connector->SetInput(image);connector->Update();//设置Y轴像素反转vtkSmartPointer<vtkImageFlip> flip = vtkSmartPointer<vtkImageFlip>::New();flip->SetInputData(connector->GetOutput());flip->SetFilteredAxis(1);flip->Update();//显示图像vtkImageViewer2  *viewer =  vtkImageViewer2::New();viewer->SetInputData(flip->GetOutput());viewer->SetColorWindow(4096);viewer->SetColorLevel(2048);viewer->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());viewer->Render();

阅读全文
0 0