]> Creatis software - clitk.git/blobdiff - registration/clitkConvertBLUTCoeffsToVFFilter.txx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / registration / clitkConvertBLUTCoeffsToVFFilter.txx
index 32464d7466d907ace9a3e399f1d671d7c3cbddc5..ae1f9d539bd70d9425efbab1a760e324ba93771a 100644 (file)
@@ -1,11 +1,11 @@
 
 #include "clitkConvertBLUTCoeffsToVFFilter.h"
 #include "clitkBSplineDeformableTransform.h"
-#include "clitkTransformToDeformationFieldSource.h"
-#include "clitkShapedBLUTSpatioTemporalDeformableTransform.h"
+//#include "clitkTransformToDeformationFieldSource.h"
+//#include "clitkShapedBLUTSpatioTemporalDeformableTransform.h"
 #include "itkImageMaskSpatialObject.h"
 
-#include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h"
+//#include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h"
 #include "clitkVectorImageToImageFilter.h"
 #if ITK_VERSION_MAJOR >= 4
 #include "itkTransformToDisplacementFieldSource.h"
@@ -149,7 +149,12 @@ namespace clitk
       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);
@@ -157,7 +162,26 @@ namespace clitk
           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;
     }
@@ -169,8 +193,8 @@ namespace clitk
 
     m_Filter->Update();
 
-    SetNthOutput(0, m_Filter->GetOutput());
+    this->SetNthOutput(0, m_Filter->GetOutput());
   }
 
 
-}
\ No newline at end of file
+}