引言
ITK和VTK都是kitware推出的强大开源库,前者专注于图像分析和处理,后者专注于三维显示和三维模型操作。在实际应用的过程中,常常需要将两个库中的图像数据进行互传,实现二者之间的无缝连接。
ITK/VTK图像数据差别
ITK与VTK的图像数据坐标的原点都在图像的左下角,但是在读取图像时,二者的存储方式不同。以常用的dicom图像为例,图像的第一个像素定义为左上角。当使用VTK进行读取时,VTK将图像的第一个像素存储在左下角,因此,读取的图像是沿着Y轴反转的。而ITK则没有翻转的过程,其按照图像像素排列的原始顺序读入图像,然后将坐标原点移动到图像的左下角。二者图像数据读取方式的不同,导致二者之一的图像必须进行翻转,才能与另一个匹配。
常用类
ITK/VTK数据转换的类均存放在ITKVTKGlue模块中。
将ITK转化为VTK图像使用类
itkImageToVTKImageFilter,具体的示例如下:
typedef itk::Image<itk::RGBPixel<unsigned char>, 2> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
ReaderType::Pointer reader = ReaderType::New();
ConnectorType::Pointer connector = ConnectorType::New();
reader->SetFileName(argv[1]);
connector->SetInput(reader->GetOutput());
vtkSmartPointer<vtkImageActor> actor =
vtkSmartPointer<vtkImageActor>::New();
#if VTK_MAJOR_VERSION <