#include "itkImageToVTKImageFilter.h"
#include "itkImage.h"
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include<itkVTKImageToImageFilter.h>
#include "itkChangeInformationImageFilter.h"
using PixelType = float;
constexpr unsigned int Dimension = 3;
using ImageType = itk::Image< PixelType, Dimension >;
using ImageIOType = itk::GDCMImageIO;
using ReaderType = itk::ImageSeriesReader< ImageType >;
using NamesGeneratorType = itk::GDCMSeriesFileNames;
ReaderType::Pointer reader = ReaderType::New();
ImageIOType::Pointer dicomIO = ImageIOType::New();
reader->SetImageIO(dicomIO);
//创建读取DCM的GDCMIOImage类
std::string inputFilename = "11.dcm";
reader->SetFileName(inputFilename);
try
{
reader->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
}
using FilterType = itk::ChangeInformationImageFilter<ImageType>;
FilterType::Pointer filter = FilterType::New();
filter->SetInput(reader->GetOutput());
ImageType::PointType::VectorType translation;
//更改坐标原点
translation[0] = 0;
translation[1] = 0;
translation[2] = 0;
ImageType::PointType origin = reader->GetOutput()->GetOrigin();
//origin += translation;
filter->SetOutputOrigin(translation);
filter->ChangeOriginOn();
filter->Update();
filter->UpdateOutputInformation();
//链接滤波器,转换为VTK类型
using ConnectorType=itk::ImageToVTKImageFilter<ImageType>;
ConnectorType::Pointer connector = ConnectorType::New();
connector->SetInput(filter->GetOutput());
try
{
connector->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
}
vtkImageFlip* FLIPImage = vtkImageFlip::New();
FLIPImage->SetInputData(connector->GetOutput());
FLIPImage->SetFilteredAxis(1);//y轴为1,x轴为0,z轴为2;
FLIPImage->Update();
FLIPImage这个变量就可以相当于vtkimagereader读取后的图像了