//#include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h"
#include "clitkVectorImageToImageFilter.h"
-#if ITK_VERSION_MAJOR >= 4
-#include "itkTransformToDisplacementFieldSource.h"
-#else
-#include "itkTransformToDeformationFieldSource.h"
-#endif
#include "itkBSplineDeformableTransform.h"
namespace clitk
// Mask
typedef itk::ImageMaskSpatialObject<BLUTCoefficientImageType::ImageDimension > MaskType;
- typename MaskType::Pointer spatialObjectMask=NULL;
+ typename MaskType::Pointer spatialObjectMask=ITK_NULLPTR;
if (!m_MaskFileName.empty())
{
typedef itk::Image< unsigned char, BLUTCoefficientImageType::ImageDimension > ImageMaskType;
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]->Update();
coefficient_images[i] = component_filter[i]->GetOutput();
}
-#if ITK_VERSION_MAJOR >= 4
- m_ITKTransform->SetCoefficientImages(coefficient_images);
-#else
- m_ITKTransform->SetCoefficientImage(coefficient_images);
-#endif
- m_GenericTransform = m_ITKTransform;
+ // 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];
+ }
+ typename ITKTransformTypeZero::Pointer zero;
+ typename ITKTransformTypeOne::Pointer one;
+ typename ITKTransformTypeTwo::Pointer two;
+ typename ITKTransformTypeFour::Pointer four;
+
+ switch(m_BLUTSplineOrders[0])
+ {
+ case 0:
+ zero = ITKTransformTypeZero::New();
+ zero->SetGridOrigin(input->GetOrigin());
+ zero->SetGridDirection(input->GetDirection());
+ zero->SetGridRegion(input->GetLargestPossibleRegion());
+ zero->SetGridSpacing(input->GetSpacing());
+ m_GenericTransform = zero;
+ break;
+ case 1:
+ one = ITKTransformTypeOne::New();
+ one->SetGridOrigin(input->GetOrigin());
+ one->SetGridDirection(input->GetDirection());
+ one->SetGridRegion(input->GetLargestPossibleRegion());
+ one->SetGridSpacing(input->GetSpacing());
+ m_GenericTransform = one;
+ break;
+ case 2:
+ two = ITKTransformTypeTwo::New();
+ two->SetGridOrigin(input->GetOrigin());
+ two->SetGridDirection(input->GetDirection());
+ two->SetGridRegion(input->GetLargestPossibleRegion());
+ two->SetGridSpacing(input->GetSpacing());
+ m_GenericTransform = two;
+ break;
+ case 3:
+ m_ITKTransform = ITKTransformType::New();
+ m_ITKTransform->SetGridOrigin(input->GetOrigin());
+ m_ITKTransform->SetGridDirection(input->GetDirection());
+ m_ITKTransform->SetGridRegion(input->GetLargestPossibleRegion());
+ m_ITKTransform->SetGridSpacing(input->GetSpacing());
+ m_GenericTransform = m_ITKTransform;
+ break;
+ case 4:
+ four = ITKTransformTypeFour::New();
+ four->SetGridOrigin(input->GetOrigin());
+ four->SetGridDirection(input->GetDirection());
+ four->SetGridRegion(input->GetLargestPossibleRegion());
+ four->SetGridSpacing(input->GetSpacing());
+ m_GenericTransform = four;
+ break;
+ }
+ m_GenericTransform->SetParametersByValue(params);
}
+#if ITK_VERSION_MAJOR > 4 || (ITK_VERSION_MAJOR == 4 && ITK_VERSION_MINOR >= 6)
+ m_Filter->SetSize(output->GetLargestPossibleRegion().GetSize());
+#else
+ m_Filter->SetOutputSize(output->GetLargestPossibleRegion().GetSize());
+#endif
m_Filter->SetOutputOrigin(output->GetOrigin());
m_Filter->SetOutputSpacing(output->GetSpacing());
- m_Filter->SetOutputSize(output->GetLargestPossibleRegion().GetSize());
m_Filter->SetTransform(m_GenericTransform);
m_Filter->Update();