14 #include <itkResampleImageFilter.h> 17 #include <itkImageFileWriter.h> 18 #include <itkIdentityTransform.h> 19 #include <itkLinearInterpolateImageFunction.h> 20 #include <itkNearestNeighborInterpolateImageFunction.h> 23 m_ResampledX(100), m_ResampledY(100),m_ResampledZ(1)
40 if ( (inputImage->GetDimension() > 3) || (inputImage->GetDimension() < 2) )
42 MITK_ERROR <<
"mitk::TofImageDownsamplingFilter:GenerateData works only with 2D and 3D images, sorry." << std::endl;
43 itkExceptionMacro(
"mitk::TofImageDownsamplingFilter:GenerateData works only with 2D and 3D images, sorry.");
49 MITK_ERROR <<
"mitk::TofImageDownsamplingFilter:GenerateData only downsamples. Your requested dimensions exceed the original image dimensions." << std::endl;
50 itkExceptionMacro(
"mitk::TofImageDownsamplingFilter:GenerateData only downsamples. Your requested dimensions exceed the original image dimensions.");
56 MITK_ERROR <<
"mitk::TofImageDownsamplingFilter:GenerateData works only for positive input dimensions " << std::endl;
57 itkExceptionMacro(
"mitk::TofImageDownsamplingFilter:GenerateData works only for positive input dimensions");
61 switch(inputImage->GetDimension())
78 template<
typename TPixel,
unsigned int VImageDimension>
82 typedef itk::Image< TPixel, VImageDimension > ItkImageType;
85 typedef itk::ResampleImageFilter<ItkImageType,ItkImageType> ResamplerFilterType;
86 typedef itk::IdentityTransform<double, VImageDimension> TransformType;
87 typedef itk::NearestNeighborInterpolateImageFunction<ItkImageType, double > InterpolatorType;
88 typedef typename ItkImageType::SizeType::SizeValueType SizeValueType;
91 typename ResamplerFilterType::Pointer resampler = ResamplerFilterType::New();
92 typename TransformType::Pointer transform = TransformType::New();
93 typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
96 typename ItkImageType::SizeType inputSize = itkImage->GetLargestPossibleRegion().GetSize();
97 typename ItkImageType::SizeType size;
104 const typename ItkImageType::SpacingType& inputSpacing = itkImage->GetSpacing();
105 typename ItkImageType::SpacingType outputSpacing;
107 outputSpacing[0] = inputSpacing[0] * ( inputSize[0]/
m_ResampledX );
108 outputSpacing[1] = inputSpacing[1] * ( inputSize[1]/
m_ResampledY );
110 if (VImageDimension > 2)
112 outputSpacing[2] = inputSpacing[2] * ( inputSize[2]/
m_ResampledZ );
116 outputSpacing[2] = 0.0;
120 mitkspacing[0] = outputSpacing[0];
121 mitkspacing[1] = outputSpacing[1];
122 mitkspacing[2] = outputSpacing[2];
125 mitkorig[0] = itkImage->GetOrigin()[0];
126 mitkorig[1] = itkImage->GetOrigin()[1];
130 transform->SetIdentity();
131 resampler->SetTransform(transform);
132 resampler->SetInterpolator(interpolator);
133 resampler->SetOutputSpacing(outputSpacing);
134 resampler->SetOutputOrigin(itkImage->GetOrigin());
135 resampler->SetSize(size);
136 resampler->SetInput(itkImage);
137 resampler->UpdateLargestPossibleRegion();
141 resultImage->SetSpacing(mitkspacing);
142 resultImage->SetOrigin(mitkorig);
double m_ResampledX
length of x dimension of output image in pixels
#define AccessFixedDimensionByItk(mitkImage, itkImageTypeFunction, dimension)
Access a mitk-image with known dimension by an itk-image.
void ItkImageResampling(const itk::Image< TPixel, VImageDimension > *itkImage)
Templated method for ITK image type which performs the resampling with an itk filter.
double m_ResampledZ
length of z dimension of output image in pixels (if 2D, default is set to 1)
double m_ResampledY
length of y dimension of output image in pixels
void GenerateData() override
Method generating the output of this filter. Called in the updated process of the pipeline...
InputImageType * GetInput(void)
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
ToFImageDownsamplingFilter()
Standard constructor.
OutputType * GetOutput()
Get the output data of this image source object.
~ToFImageDownsamplingFilter() override
Standard destructor.