]> Creatis software - clitk.git/blobdiff - registration/clitkDemonsDeformableRegistrationGenericFilter.txx
Debug RTStruct conversion with empty struc
[clitk.git] / registration / clitkDemonsDeformableRegistrationGenericFilter.txx
old mode 100755 (executable)
new mode 100644 (file)
index 55406bb..0c49dd7
@@ -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,8 @@ 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; 
+    typedef typename  RegistrationFilterType::DisplacementFieldType DisplacementFieldType;
+    typedef clitk::MultiResolutionPDEDeformableRegistration<FixedImageType, MovingImageType, DisplacementFieldType> MultiResolutionRegistrationType;
     typedef CommandResolutionLevelUpdate<MultiResolutionRegistrationType> LevelObserver;
     
   protected:
@@ -335,7 +335,13 @@ namespace clitk
     // =======================================================
     // The multiresolution scheme
     // =======================================================
-    if (threadsGiven) multiResolutionFilter->SetNumberOfThreads(threads);
+    if (threadsGiven) {
+#if ITK_VERSION_MAJOR <= 4
+      multiResolutionFilter->SetNumberOfThreads(threads);
+#else
+      multiResolutionFilter->SetNumberOfWorkUnits(threads);
+#endif
+    }
     unsigned int nLevels=m_ArgsInfo.levels_arg;
     if (m_Verbose) std::cout<<"Setting the number of resolution levels to "<<nLevels<<"..."<<std::endl;
     multiResolutionFilter->SetFixedImage( fixedImage );
@@ -343,12 +349,18 @@ namespace clitk
     multiResolutionFilter->SetNumberOfLevels( nLevels );
     multiResolutionFilter->SetFixedImagePyramid( fixedImagePyramid );
     multiResolutionFilter->SetMovingImagePyramid( movingImagePyramid );
-    if (threadsGiven) multiResolutionFilter->SetNumberOfThreads( threads );
-    
+    if (threadsGiven) {
+#if ITK_VERSION_MAJOR <= 4
+      multiResolutionFilter->SetNumberOfThreads( threads );
+#else
+      multiResolutionFilter->SetNumberOfWorkUnits( threads );
+#endif
+    }
+
     //------------------------------------
     //Set the number of iterations
     //------------------------------------
-    unsigned int nIterations[nLevels];
+    std::vector<unsigned int> nIterations(nLevels);
     for (unsigned int i=0 ; i<nLevels; i++)
       {
        if (m_ArgsInfo.maxIter_given==nLevels)
@@ -358,7 +370,7 @@ namespace clitk
        else
          nIterations[i]=m_ArgsInfo.maxIter_arg[0];
       }
-    multiResolutionFilter->SetNumberOfIterations( nIterations );
+    multiResolutionFilter->SetNumberOfIterations( &(nIterations[0]) );
     if(m_Verbose) {
       std::cout<<"Setting the number of iterations to: "<<nIterations[0];
       for (unsigned int i=1; i<nLevels; i++)
@@ -369,7 +381,7 @@ namespace clitk
     //------------------------------------
     //Set the max RMS error for the field update
     //------------------------------------
-    double maxRMSError[nLevels];
+    std::vector<double> maxRMSError(nLevels);
     for (unsigned int i=0 ; i<nLevels; i++)
       {
        if (m_ArgsInfo.maxRMSError_given==nLevels)      
@@ -387,7 +399,7 @@ namespace clitk
     //------------------------------------
     //Get the stop criterion
     //------------------------------------
-    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 +454,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 +476,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 +492,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 +510,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 +528,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 +545,7 @@ namespace clitk
     //JV TODO
     // pdeFilter->SetMaximumError(m_ArgsInfo.maxError_arg);
     // pdeFilter->SetMaximumKernelWidth(m_ArgsInfo.maxError_arg);
-    pdeFilter->SetSmoothDeformationField(!m_ArgsInfo.fluid_flag);
+    pdeFilter->SetSmoothDisplacementField(!m_ArgsInfo.fluid_flag);
     pdeFilter->SetSmoothUpdateField(m_ArgsInfo.fluid_flag);
     pdeFilter->SetUseImageSpacing( m_ArgsInfo.spacing_flag );
 
@@ -599,7 +611,7 @@ namespace clitk
     typedef itk::WarpImageFilter< MovingImageType, FixedImageType, DeformationFieldType >    WarpFilterType;
     typename WarpFilterType::Pointer warp = WarpFilterType::New();
 
-    warp->SetDeformationField( deformationField );
+    warp->SetDisplacementField( deformationField );
     warp->SetInput( movingImageReader->GetOutput() );
     warp->SetOutputOrigin(  fixedImage->GetOrigin() );
     warp->SetOutputSpacing( fixedImage->GetSpacing() );