]> Creatis software - clitk.git/blobdiff - registration/clitkBLUTDIRGenericFilter.cxx
cosmetic
[clitk.git] / registration / clitkBLUTDIRGenericFilter.cxx
index 3f78b4125e4aaf8378f4619b81b4f969767f9f9d..b49d9909639a88ae71874e1d12d3deabe8f99659 100644 (file)
@@ -29,6 +29,16 @@ It is distributed under dual licence
 
 #include "clitkBLUTDIRGenericFilter.h"
 #include "clitkBLUTDIRCommandIterationUpdateDVF.h"
+#include "itkCenteredTransformInitializer.h"
+#if ITK_VERSION_MAJOR >= 4
+#  if ITK_VERSION_MINOR < 6
+#    include "itkTransformToDisplacementFieldSource.h"
+#  else
+#    include "itkTransformToDisplacementFieldFilter.h"
+#  endif
+#else
+#  include "itkTransformToDeformationFieldSource.h"
+#endif
 
 namespace clitk
 {
@@ -322,7 +332,6 @@ namespace clitk
       // The metric region with respect to the extracted transform region:
       // where should the metric be CALCULATED (depends on transform)
       typename FixedImageType::RegionType metricRegion = fixedImage->GetLargestPossibleRegion();
-      typename FixedImageType::RegionType::SizeType metricRegionSize=metricRegion.GetSize();
       typename FixedImageType::RegionType::IndexType metricRegionIndex=metricRegion.GetIndex();
       typename FixedImageType::PointType metricRegionOrigin=fixedImage->GetOrigin();
 
@@ -496,6 +505,20 @@ namespace clitk
         itk::Vector<double,3> finalTranslation = clitk::GetTranslationPartMatrix3D(rigidTransformMatrix);
         rigidTransform->SetTranslation(finalTranslation);
       }
+      else if (m_ArgsInfo.centre_flag)
+      {
+        if(m_Verbose) std::cout<<"No itinial matrix given and \"centre\" flag switched on. Centering all images..."<<std::endl;
+        
+        rigidTransform=RigidTransformType::New();
+        
+        typedef itk::CenteredTransformInitializer<RigidTransformType, FixedImageType, MovingImageType > TransformInitializerType;
+        typename TransformInitializerType::Pointer initializer = TransformInitializerType::New();
+        initializer->SetTransform( rigidTransform );
+        initializer->SetFixedImage( fixedImage );
+        initializer->SetMovingImage( movingImage );        
+        initializer->GeometryOn();
+        initializer->InitializeTransform();
+      }
 
 
       //=======================================================
@@ -719,7 +742,11 @@ namespace clitk
 
       try
       {
+#if ITK_VERSION_MAJOR < 4 || (ITK_VERSION_MAJOR == 4 && ITK_VERSION_MINOR <= 2)
         registration->StartRegistration();
+#else
+        registration->Update();
+#endif
       }
       catch( itk::ExceptionObject & err )
       {
@@ -775,7 +802,11 @@ namespace clitk
       typedef itk::Vector< float, SpaceDimension >  DisplacementType;
       typedef itk::Image< DisplacementType, InputImageType::ImageDimension >  DisplacementFieldType;
 #if ITK_VERSION_MAJOR >= 4
+#  if ITK_VERSION_MINOR < 6
       typedef itk::TransformToDisplacementFieldSource<DisplacementFieldType, double> ConvertorType;
+#  else
+      typedef itk::TransformToDisplacementFieldFilter<DisplacementFieldType, double> ConvertorType;
+#  endif
 #else
       typedef itk::TransformToDeformationFieldSource<DisplacementFieldType, double> ConvertorType;
 #endif
@@ -786,7 +817,11 @@ namespace clitk
       else
         transform->SetBulkTransform(NULL);
       filter->SetTransform(regTransform);
+#if ITK_VERSION_MAJOR > 4 || (ITK_VERSION_MAJOR == 4 && ITK_VERSION_MINOR >= 6)
+      filter->SetReferenceImage(fixedImage);
+#else
       filter->SetOutputParametersFromImage(fixedImage);
+#endif
       filter->Update();
       typename DisplacementFieldType::Pointer field = filter->GetOutput();