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
- 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"
//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:
// =======================================================
// 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 );
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
//------------------------------------
- itk::Array<unsigned int> nIterations(nLevels);
+ std::vector<unsigned int> nIterations(nLevels);
for (unsigned int i=0 ; i<nLevels; i++)
{
if (m_ArgsInfo.maxIter_given==nLevels)
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++)
//------------------------------------
//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)
//------------------------------------
//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];
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);
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;
//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;
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;
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;
//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 );
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() );