39 mitk::Image::ConstPointer inputImage = this->GetInput(0) ;
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.");
47 if ( (inputImage->GetDimension(0)<m_ResampledX) || (inputImage->GetDimension(1)<m_ResampledY) || (inputImage->GetDimension(2)<m_ResampledZ) )
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.");
54 if ( (m_ResampledX < 1) || (m_ResampledY < 1)|| (m_ResampledZ < 1) )
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())
65 AccessFixedDimensionByItk( inputImage.GetPointer(), ItkImageResampling, 2 );
break;
69 AccessFixedDimensionByItk( inputImage.GetPointer(), ItkImageResampling, 3 );
break;
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;
99 size[0] =
static_cast< SizeValueType
>( m_ResampledX );
100 size[1] =
static_cast< SizeValueType
>( m_ResampledY );
101 size[2] =
static_cast< SizeValueType
>( m_ResampledZ );
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;
119 mitk::Vector3D mitkspacing;
120 mitkspacing[0] = outputSpacing[0];
121 mitkspacing[1] = outputSpacing[1];
122 mitkspacing[2] = outputSpacing[2];
124 mitk::Point3D mitkorig;
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();
140 mitk::Image::Pointer resultImage = ImageToImageFilter::GetOutput();
141 resultImage->SetSpacing(mitkspacing);
142 resultImage->SetOrigin(mitkorig);
145 mitk::CastToMitkImage(resampler->GetOutput(), resultImage);