typedef clitk::VectorImageToImageFilter<BLUTCoefficientImageType, typename ITKTransformType::ImageType> FilterType;
typename FilterType::Pointer component_filter[BLUTCoefficientImageType::ImageDimension];
+#if ITK_VERSION_MAJOR >= 4
+ typename ITKTransformType::CoefficientImageArray coefficient_images;
+#else
typename ITKTransformType::ImagePointer coefficient_images[BLUTCoefficientImageType::ImageDimension];
+#endif
+
for (unsigned int i=0; i < BLUTCoefficientImageType::ImageDimension; i++) {
component_filter[i] = FilterType::New();
component_filter[i]->SetInput(input);
component_filter[i]->Update();
coefficient_images[i] = component_filter[i]->GetOutput();
}
+
+#if ITK_VERSION_MAJOR >= 4
+ // RP: 16/01/2013
+ // ATTENTION: Apparently, there's a bug in the SetCoefficientImages function of ITK 4.x
+ // I needed to use SetParametersByValue instead.
+ //
+ typename ITKTransformType::ParametersType params(input->GetPixelContainer()->Size() * BLUTCoefficientImageType::ImageDimension);
+ for (unsigned int i=0; i < BLUTCoefficientImageType::ImageDimension; i++) {
+ for (unsigned int j=0; j < coefficient_images[i]->GetPixelContainer()->Size(); j++)
+ params[input->GetPixelContainer()->Size() * i + j] = coefficient_images[i]->GetPixelContainer()->GetBufferPointer()[j];
+ }
+
+ m_ITKTransform->SetGridOrigin(input->GetOrigin());
+ m_ITKTransform->SetGridDirection(input->GetDirection());
+ m_ITKTransform->SetGridRegion(input->GetLargestPossibleRegion());
+ m_ITKTransform->SetGridSpacing(input->GetSpacing());
+ m_ITKTransform->SetParametersByValue(params);
+#else
m_ITKTransform->SetCoefficientImage(coefficient_images);
+#endif
m_GenericTransform = m_ITKTransform;
}
m_Filter->Update();
- SetNthOutput(0, m_Filter->GetOutput());
+ this->SetNthOutput(0, m_Filter->GetOutput());
}
-}
\ No newline at end of file
+}