ITK笔记——读取DICOM切片

删除回忆录丶 提交于 2019-11-29 17:18:58

什么是DICOM

DICOM(Digital imaging and Communication in Medicine),医学数字成像与通信,它是一个国际标准(ISO 12052),由美国放射学院(ACR)和国家电气制造协会(NEMA)在1970年代共同制定,旨在统一格式,解决医学图像的处理、存储、打印以及传输。

GDCM

GDCM(Grassroots DICOM),开源库,DICOM标准的一种实现。ITK的DICOM设施,就是由它提供的。对应itk::GDCMImageIO类名。

读取DICOM切片

定义数据类型

	using InputPixelType = signed short;
	constexpr unsigned int InputDimension = 2;

	using InputImageType = itk::Image< InputPixelType, InputDimension >;

初始化GDCM接口

	using ImageIOType = itk::GDCMImageIO;
	ImageIOType::Pointer gdcmImageIO = ImageIOType::New();

设置ImageFileReader

	using ReaderType = itk::ImageFileReader< InputImageType >;
	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName(argv[1]);
	reader->SetImageIO(gdcmImageIO);

触发读取

	reader->Update();

VTK渲染

	QuickView viewer;
	viewer.AddImage(reader->GetOutput());
	viewer.Visualize();

在这里插入图片描述

ReadDICOMImage.cxx

#include "itkImageFileReader.h"
#include "itkGDCMImageIO.h"

#include "QuickView.h"

int main(int argc, char *argv[])
{
	if (argc < 2)
	{
		std::cerr << "Usage: " << argv[0] << " DicomImage" << std::endl;
		return EXIT_FAILURE;
	}

	using InputPixelType = signed short;
	constexpr unsigned int InputDimension = 2;

	using InputImageType = itk::Image< InputPixelType, InputDimension >;

	using ImageIOType = itk::GDCMImageIO;
	ImageIOType::Pointer gdcmImageIO = ImageIOType::New();

	using ReaderType = itk::ImageFileReader< InputImageType >;
	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName(argv[1]);
	reader->SetImageIO(gdcmImageIO);

	try
	{
		reader->Update();
	}
	catch ( itk::ExceptionObject &ex)
	{
		std::cerr << "exception in file reader " << std::endl;
		std::cerr << ex << std::endl;
		return EXIT_FAILURE;
	}

	QuickView viewer;
	viewer.AddImage(reader->GetOutput());
	viewer.Visualize();

	return EXIT_SUCCESS;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.9.5)
 
project(ReadDICOMImage)
 
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
if (ITKVtkGlue_LOADED)
  find_package(VTK REQUIRED)
  include(${VTK_USE_FILE})
else()
  find_package(ItkVtkGlue REQUIRED)
  include(${ItkVtkGlue_USE_FILE})
  set(Glue ItkVtkGlue)
endif()
 
add_executable(ReadDICOMImage MACOSX_BUNDLE ReadDICOMImage.cxx)
target_link_libraries(ReadDICOMImage
  ${Glue}  ${VTK_LIBRARIES} ${ITK_LIBRARIES})

Example Download

Reference

Examples/IO/DicomImageReadWrite.cxx

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!