ITK读DICOM数据
来源:互联网 发布:网络直播靠什么赚钱 编辑:程序博客网 时间:2024/06/15 10:33
ITK提供强大的图像处理功能,VTK则提供强大的图像可视化功能。
比较VTK而言,ITK能够获取更全面的DICOM头文件中所包含的医学信息和病人信息。ITK能够读单张图片或序列图片。
(1)ITK能够读单张图片并获取头文件中信息:
typedef signed short InputPixelType;//dicom 对应数据类型 const unsigned int InputDimension = 2; typedef itk::Image< InputPixelType, InputDimension > InputImageType; typedef itk::ImageSeriesReader< InputImageType > ReaderType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName( argv[1] ); typedef itk::GDCMImageIO ImageIOType;//GDCMImageIO读DICOM ImageIOType::Pointer gdcmImageIO = ImageIOType::New(); //关联GDCMImageIO类后,DICOM数据信息就读入内存,ITK能获取更加全面的信息(比起VTK) reader->SetImageIO( gdcmImageIO ); try { reader->Update(); reader->GetMetaDataDictionary();//获取DIOCM头文件中信息 gdcmImageIO->GetMetaDataDictionary();//获取DIOCM头文件中信息 //举例获取头文件中部分信息 char* name = new char[50];//开辟空间而不是赋初值 char* patientID = new char[50]; char* time = new char[50]; char* manufacture = new char[50]; char* modility = new char[50]; char* hospital = new char[50]; int pixelType = gdcmImageIO->GetPixelType(); int componetType = gdcmImageIO->GetComponentType(); int fileType = gdcmImageIO->GetFileType(); ImageIOType::ByteOrder byteOrder; byteOrder = gdcmImageIO->GetByteOrder(); unsigned int dim = 0; gdcmImageIO->GetDimensions(dim); ImageIOType::SizeType imgSize; imgSize = gdcmImageIO->GetImageSizeInPixels(); int componetSize = gdcmImageIO->GetComponentSize(); int dimension = gdcmImageIO->GetNumberOfDimensions(); int ori = 0; gdcmImageIO->GetOrigin(ori); int spa = 0; gdcmImageIO->GetSpacing(spa); gdcmImageIO->GetPatientName(name); gdcmImageIO->GetModality(modility); gdcmImageIO->GetPatientID(patientID); gdcmImageIO->GetManufacturer(manufacture); gdcmImageIO->GetStudyDate(time); ImageIOType::TCompressionType compressType; compressType = gdcmImageIO->GetCompressionType(); gdcmImageIO->GetInstitution(hospital); InputImageType::SpacingType type; type = reader->GetOutput()->GetSpacing(); InputImageType::PointType origin; origin= reader->GetOutput()->GetOrigin(); }
(1)ITK能够读序列图片
typedef signed short PixelType; const unsigned int Dimension = 3; typedef itk::Image< PixelType, Dimension > ImageType; typedef itk::ImageSeriesReader< ImageType > ReaderType;//读序列图片 ReaderType::Pointer itkReader = ReaderType::New(); typedef itk::GDCMImageIO ImageIOType;//读DICOM图片 ImageIOType::Pointer dicomIO = ImageIOType::New(); itkReader->SetImageIO( dicomIO );//数据读入内存 typedef itk::GDCMSeriesFileNames NamesGeneratorType; NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New(); nameGenerator->SetUseSeriesDetails( true ); nameGenerator->AddSeriesRestriction("0008|0021" ); nameGenerator->SetDirectory(inputFileName);//设置文件目录 typedef std::vector< std::string > SeriesIdContainer; const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs(); SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();//迭代器 SeriesIdContainer::const_iterator seriesEnd = seriesUID.end(); std::string seriesIdentifier; seriesIdentifier = seriesUID.begin()->c_str();//通过迭代器读取所有单张切片 typedef std::vector< std::string > FileNamesContainer; FileNamesContainer fileNames; fileNames = nameGenerator->GetFileNames( seriesIdentifier ); itkReader->SetFileNames( fileNames ); itkReader->Update(); dicomIO->GetMetaDataDictionary();//获取DIOCM头文件中信息
结合ITK, VTK各自的优点,用ITK读DICOM头文件信息,用VTK显示DICOM数据。读取数据的结果在本人基于QT开发的数字图像处理软件中,结果如图所示:
0 0
- ITK读DICOM数据
- ITK&&VTK读取DICOM数据并渲染
- 用ITK读、写一幅2D图像(DICOM切片)
- ITK/VTK对DICOM文件的读取
- DICOM影像中的窗宽窗位 ITK Intensity Windowin
- ITK: 读序列图像和裸数据
- ITK数据表达
- ITK、VTK、Qt读取与显示DICOM文件------代码部分
- ITK读取裸数据方法
- ITK如何处理大数据
- ITK与VTK数据转换
- itk中的数据变大变小
- itk中的数据孔洞填充
- itk中的数据细化算法
- itk中的数据翻转算法
- 用python处理dicom数据
- ITK+VTK+QT 读取DICOM序列图像遇到的问题(1)
- DICOM:DICOM三大开源库对比分析之“数据加载”
- (素材源码)猫猫学iOS(四十六)之网易彩票幸运大转盘
- C#线程的发展学习
- 数据结构之堆
- iOS APP图标一键生成
- 数据结构 ——静态二叉树操作的算法
- ITK读DICOM数据
- Maven实例
- 杭电 1233 还是畅通工程
- 【示例】C语言中利用数组存放函数指针
- 多线程编程
- javascript(九)JSON
- 黑马程序员--java学习之正则表达式
- linux 常用命令大全
- OJ-复数类-重载运算符+-*/