]> Creatis software - clitk.git/blobdiff - registration/clitkDemonsDeformableRegistrationGenericFilter.txx
remove tools (now in tests_dav)
[clitk.git] / registration / clitkDemonsDeformableRegistrationGenericFilter.txx
old mode 100755 (executable)
new mode 100644 (file)
index 887676e..6132dc5
@@ -3,7 +3,7 @@
 
   Authors belong to: 
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
 #ifndef __clitkDemonsDeformableRegistrationGenericFilter_txx
 #define __clitkDemonsDeformableRegistrationGenericFilter_txx
 #include "clitkDemonsDeformableRegistrationGenericFilter.h"
@@ -151,8 +151,12 @@ namespace clitk
     //find the multiresolution filter
     //     typedef typename  RegistrationFilterType::FixedImageType InternalImageType;
     //     typedef typename  RegistrationFilterType::MovingImageType MovingImageType;
-    typedef typename  RegistrationFilterType::DeformationFieldType DeformationFieldType;
-    typedef clitk::MultiResolutionPDEDeformableRegistration<FixedImageType, MovingImageType, DeformationFieldType> MultiResolutionRegistrationType; 
+#if ITK_VERSION_MAJOR >= 4
+    typedef typename  RegistrationFilterType::DisplacementFieldType DisplacementFieldType;
+#else
+    typedef typename  RegistrationFilterType::DeformationFieldType DisplacementFieldType;
+#endif
+    typedef clitk::MultiResolutionPDEDeformableRegistration<FixedImageType, MovingImageType, DisplacementFieldType> MultiResolutionRegistrationType;
     typedef CommandResolutionLevelUpdate<MultiResolutionRegistrationType> LevelObserver;
     
   protected:
@@ -369,7 +373,7 @@ namespace clitk
     //------------------------------------
     //Set the max RMS error for the field update
     //------------------------------------
-    itk::Array<double> maxRMSError(nLevels);
+    std::vector<double> maxRMSError(nLevels);
     for (unsigned int i=0 ; i<nLevels; i++)
       {
        if (m_ArgsInfo.maxRMSError_given==nLevels)      
@@ -387,7 +391,7 @@ namespace clitk
     //------------------------------------
     //Get the stop criterion
     //------------------------------------
-    itk::Array<int> stop(nLevels);
+    std::vector<int> stop(nLevels);
     for (unsigned int i=0; i<nLevels; i++)
       if (m_ArgsInfo.stop_given==nLevels)
        stop[i]=m_ArgsInfo.stop_arg[i];
@@ -442,7 +446,7 @@ namespace clitk
     typename CommandResolutionLevelUpdate<MultiResolutionRegistrationFilterType>::Pointer levelObserver = 
       CommandResolutionLevelUpdate<MultiResolutionRegistrationFilterType>::New();
     multiResolutionFilter->AddObserver( itk::IterationEvent(), levelObserver );
-    levelObserver->SetMaxRMSError(maxRMSError);
+    levelObserver->SetMaxRMSError(&(maxRMSError[0]));
     levelObserver->SetMaxStep(m_ArgsInfo.maxStep_arg);
     levelObserver->SetSD(sd);
     levelObserver->SetScaleStep(m_ArgsInfo.scaleStep_flag);
@@ -464,7 +468,7 @@ namespace clitk
        m->SetIntensityDifferenceThreshold( m_ArgsInfo.intThreshold_arg);
        m->SetUseMovingImageGradient( m_ArgsInfo.movGrad_flag);
        typename CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::Pointer observer = CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::New();
-       observer->SetStop(stop);
+       observer->SetStop(&(stop[0]));
        observer->SetLevelObserver(levelObserver);
        m->AddObserver( itk::IterationEvent(), observer );
        if (m_Verbose)  std::cout<<"Using the demons registration filter..."<<std::endl;
@@ -480,7 +484,7 @@ namespace clitk
        //Set Parameters for this filter
        m->SetIntensityDifferenceThreshold( m_ArgsInfo.intThreshold_arg);
        typename CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::Pointer observer = CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::New();
-       observer->SetStop(stop);
+       observer->SetStop(&(stop[0]));
        observer->SetLevelObserver(levelObserver);
        m->AddObserver( itk::IterationEvent(), observer );
        if (m_Verbose) std::cout<<"Using the symmetric forces demons registration filter..."<<std::endl;
@@ -498,7 +502,7 @@ namespace clitk
        m->SetMaximumUpdateStepLength( m_ArgsInfo.maxStep_arg);
        m->SetUseGradientType(grad);
        typename CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::Pointer observer = CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::New();
-       observer->SetStop(stop);
+       observer->SetStop(&(stop[0]));
        observer->SetLevelObserver(levelObserver);
        m->AddObserver( itk::IterationEvent(), observer );
        if (m_Verbose) std::cout<<"Using the fast symmetric forces demons registration filter..."<<std::endl;
@@ -516,7 +520,7 @@ namespace clitk
        m->SetUseFirstOrderExp(m_ArgsInfo.firstOrder_flag);
        m->SetUseGradientType(grad);
        typename CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::Pointer observer = CommandIterationUpdate<DemonsFilterType, FixedImageType, MovingImageType>::New();
-       observer->SetStop(stop);
+       observer->SetStop(&(stop[0]));
        observer->SetLevelObserver(levelObserver);
        m->AddObserver( itk::IterationEvent(), observer );
        if (m_Verbose) std::cout<<"Using the diffeomorphic demons registration filter..."<<std::endl;
@@ -533,7 +537,11 @@ namespace clitk
     //JV TODO
     // pdeFilter->SetMaximumError(m_ArgsInfo.maxError_arg);
     // pdeFilter->SetMaximumKernelWidth(m_ArgsInfo.maxError_arg);
+#if ITK_VERSION_MAJOR >= 4
+    pdeFilter->SetSmoothDisplacementField(!m_ArgsInfo.fluid_flag);
+#else
     pdeFilter->SetSmoothDeformationField(!m_ArgsInfo.fluid_flag);
+#endif
     pdeFilter->SetSmoothUpdateField(m_ArgsInfo.fluid_flag);
     pdeFilter->SetUseImageSpacing( m_ArgsInfo.spacing_flag );
 
@@ -599,7 +607,11 @@ namespace clitk
     typedef itk::WarpImageFilter< MovingImageType, FixedImageType, DeformationFieldType >    WarpFilterType;
     typename WarpFilterType::Pointer warp = WarpFilterType::New();
 
+#if ITK_VERSION_MAJOR >= 4
+    warp->SetDisplacementField( deformationField );
+#else
     warp->SetDeformationField( deformationField );
+#endif
     warp->SetInput( movingImageReader->GetOutput() );
     warp->SetOutputOrigin(  fixedImage->GetOrigin() );
     warp->SetOutputSpacing( fixedImage->GetSpacing() );