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

原创 2017年11月30日 11:55:32

最近项目要求解析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转JPG
	typedef 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();

DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”

背景:         本专栏“DICOM医学图像处理”受众较窄,起初只想作为自己学习积累和工作经验的简单整理。前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在“关于BMP(JPG)与DC...
  • xionglifei123
  • xionglifei123
  • 2015年06月24日 15:44
  • 1676

图像特征特点及其常用的特征提取与匹配方法

常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。 一 颜色特征 (一)特点:颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。一般颜色特征是基于像素点的特征,此时所有...
  • yewei11
  • yewei11
  • 2015年12月19日 19:33
  • 515

Python 处理医学影像学中的DICOM

DICOMDICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义了...
  • jiandanjinxin
  • jiandanjinxin
  • 2017年03月06日 17:12
  • 1834

DICOM影像中的窗宽窗位 ITK Intensity Windowin

医学图像领域的关键技术窗技术,是CT检查中用以观察不同密度的正常组织或病变的一种显示技术,包括窗宽(window width)和窗位(window level)。由于各种组织结构或病变具有不同的C...
  • zhimingf
  • zhimingf
  • 2017年04月19日 09:48
  • 390

使用pydicom读取dicom文件,并对文件做一些简单操作

import os import dicom import matplotlib.pyplot as plt def process(dcms): ds = dicom.read_file(d...
  • redmoon729
  • redmoon729
  • 2017年04月11日 18:46
  • 974

Python处理医学影像学中的DICOM

DICOMDICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义...
  • langb2014
  • langb2014
  • 2017年01月22日 13:17
  • 11181

一个开源的基于.net的dicom库

  • 2008年10月23日 10:36
  • 3.31MB
  • 下载

DCM医学影像文件的格式与读取方法分享

DCM医学影像文件的格式与读取方法分享 转自 http://bbs.csdn.net/topics/390146622 2014-01-10 13:25 636人阅读 评论...
  • hugyxh
  • hugyxh
  • 2015年10月20日 09:17
  • 3717

dcm4che2-Java Library for DICOM

1 前言:       DICOM是所有医疗行业工作者都熟知的标准医学图像格式,但它又不止是一个图像格式那么简单。DICOM标准是一套医疗影像行业内必须遵守的标准,不管是医学影像设备制造商,还是医疗...
  • inter_peng
  • inter_peng
  • 2015年05月18日 22:47
  • 7174

多幅BMP图像数据存入DCM文件 java 實現

java实现,多幅bmp转换dcm
  • AlanLzz
  • AlanLzz
  • 2016年10月18日 15:59
  • 434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DICOM文件的读取显示和本地JPG格式的存储
举报原因:
原因补充:

(最多只允许输入30个字)