案例功能:读取指定路径下的一张DICOM格式图片,并保存到指定路径下。
- itk采用数据管道结构
- reader无输入(上一级滤波器),但需添加读取数据对象路径(常用“/”区分多层目录)
- writer无输出(下一级滤波器),但需添加写入数据图像路径(同上)
- 数据管道结构不一定完整的从reader到writer
- 管道中间组件采用filter_n—>SetInput(fiter_n-1—>GetOutput())与上一级管道组件传输数据
- reader和writer需连接到确定的ImageIo类型
- 数据管道每级组件建立完成后,需调用Update()激活
#include "itkImageFileReader.h"//读取头文件
#include "itkImageFileWriter.h"//写入头文件
#include "itkGDCMImageIO.h"//ImageIo子类头文件
int main(int argc, char* argv[])
{
typedef signed short PixelType; // signed short 数据类型
typedef itk::Image< PixelType, 2 > ImageType;//定义image类型
typedef itk::ImageFileReader< ImageType > ReaderType;//实例化滤波器类型
typedef itk::ImageFileWriter< ImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();//reader
WriterType::Pointer writer = WriterType::New();//writer
typedef itk::GDCMImageIO ImageIOType;
ImageIOType::Pointer gdcmImageIO = ImageIOType::New();//创建gdcmImageIO对象
reader->SetFileName("D:/leg_dcm/IM70.dcm");//读取文件
reader->SetImageIO(gdcmImageIO);//imageio对象连接到读写滤波器
reader->Update();
writer->SetInput(reader->GetOutput());//写入文件
writer->SetFileName("D:/001.dcm");//写入文件
writer->SetImageIO(gdcmImageIO);
writer->Update();//当调用 Update( )方式时,数据处理管道就会按顺序使用这些滤波器,并将最终结果储存到文件中。
return EXIT_SUCCESS;
}
再理解:智能指针、引用计数、New()ITK04 开/闭运算 ITK 智能指针