X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkBLUTDIRGenericFilter.cxx;h=24d461361f9e27a232e54a9e3fcfd757de02f8db;hb=HEAD;hp=06045c52defc3a3774844c2bd30334cb4add04a1;hpb=0fce6cfc8ec8c2177c876a9cac67048c9adc9a6c;p=clitk.git diff --git a/registration/clitkBLUTDIRGenericFilter.cxx b/registration/clitkBLUTDIRGenericFilter.cxx index 06045c5..24d4613 100644 --- a/registration/clitkBLUTDIRGenericFilter.cxx +++ b/registration/clitkBLUTDIRGenericFilter.cxx @@ -30,7 +30,13 @@ It is distributed under dual licence #include "clitkBLUTDIRGenericFilter.h" #include "clitkBLUTDIRCommandIterationUpdateDVF.h" #include "itkCenteredTransformInitializer.h" - +#include "itkLabelStatisticsImageFilter.h" +#if (ITK_VERSION_MAJOR == 4) && (ITK_VERSION_MINOR < 6) +# include "itkTransformToDisplacementFieldSource.h" +#else +# include "itkTransformToDisplacementFieldFilter.h" +#endif + namespace clitk { @@ -240,7 +246,7 @@ namespace clitk m_CommandIterationUpdate->SetOptimizer(m_GenericOptimizer); // Set the previous transform parameters to the registration - // if(m_Initializer->m_Parameters!=NULL )delete m_Initializer->m_Parameters; + // if(m_Initializer->m_Parameters!=ITK_NULLPTR )delete m_Initializer->m_Parameters; m_Initializer->SetInitialParameters(currentCoefficientImages, *newParameters); registration->SetInitialTransformParametersOfNextLevel(*newParameters); } @@ -332,8 +338,8 @@ namespace clitk //============================================================================ typedef itk::ImageMaskSpatialObject< InputImageType::ImageDimension > MaskType; typedef itk::Image< unsigned char, InputImageType::ImageDimension > ImageLabelType; - typename MaskType::Pointer fixedMask = NULL; - typename ImageLabelType::Pointer labels = NULL; + typename MaskType::Pointer fixedMask = ITK_NULLPTR; + typename ImageLabelType::Pointer labels = ITK_NULLPTR; if (m_ArgsInfo.referenceMask_given) { fixedMask = MaskType::New(); @@ -368,11 +374,12 @@ namespace clitk fixedMask->SetImage(labels); // Find the bounding box of the "inside" label - typedef itk::LabelGeometryImageFilter GeometryImageFilterType; - typename GeometryImageFilterType::Pointer geometryImageFilter=GeometryImageFilterType::New(); - geometryImageFilter->SetInput(labels); - geometryImageFilter->Update(); - typename GeometryImageFilterType::BoundingBoxType boundingBox = geometryImageFilter->GetBoundingBox(1); + typedef itk::LabelStatisticsImageFilter StatisticsImageFilterType; + typename StatisticsImageFilterType::Pointer statisticsImageFilter=StatisticsImageFilterType::New(); + statisticsImageFilter->SetInput(labels); + statisticsImageFilter->SetLabelInput(labels); + statisticsImageFilter->Update(); + typename StatisticsImageFilterType::BoundingBoxType boundingBox = statisticsImageFilter->GetBoundingBox(1); // Limit the transform region to the mask for (unsigned int i=0; i ExtractImageFilterType; typename ExtractImageFilterType::Pointer extractImageFilter=ExtractImageFilterType::New(); -#if ITK_VERSION_MAJOR == 4 extractImageFilter->SetDirectionCollapseToSubmatrix(); -#endif extractImageFilter->SetInput(fixedImage); extractImageFilter->SetExtractionRegion(transformRegion); extractImageFilter->Update(); @@ -408,7 +413,7 @@ namespace clitk } typedef itk::ImageMaskSpatialObject< InputImageType::ImageDimension > MaskType; - typename MaskType::Pointer movingMask=NULL; + typename MaskType::Pointer movingMask=ITK_NULLPTR; if (m_ArgsInfo.targetMask_given) { movingMask= MaskType::New(); @@ -481,7 +486,7 @@ namespace clitk // Rigid or Affine Transform //======================================================= typedef itk::AffineTransform RigidTransformType; - RigidTransformType::Pointer rigidTransform=NULL; + RigidTransformType::Pointer rigidTransform=ITK_NULLPTR; if (m_ArgsInfo.initMatrix_given) { if(m_Verbose) std::cout<<"Reading the prior transform matrix "<< m_ArgsInfo.initMatrix_arg<<"..."<SetGridRegion( transform->GetTransforms()[0]->GetGridRegion() ); sTransform->SetParameters( transform->GetTransforms()[0]->GetParameters() ); regTransform = sTransform; - transform = NULL; // free memory + transform = ITK_NULLPTR; // free memory } //======================================================= @@ -643,16 +648,14 @@ namespace clitk typedef itk::ImageToImageMetric< FixedImageType, MovingImageType > MetricType; typename MetricType::Pointer metric=genericMetric->GetMetricPointer(); if (movingMask) metric->SetMovingImageMask(movingMask); - -#if defined(ITK_USE_OPTIMIZED_REGISTRATION_METHODS) || ITK_VERSION_MAJOR >= 4 if (threadsGiven) { +#if ITK_VERSION_MAJOR <= 4 metric->SetNumberOfThreads( threads ); - if (m_Verbose) std::cout<< "Using " << threads << " threads." << std::endl; - } #else - if (m_Verbose) std::cout<<"Not setting the number of threads (not compiled with USE_OPTIMIZED_REGISTRATION_METHODS)..."<SetNumberOfWorkUnits( threads ); #endif - + if (m_Verbose) std::cout<< "Using " << threads << " threads." << std::endl; + } //======================================================= // Optimizer @@ -676,7 +679,11 @@ namespace clitk registration->SetInterpolator( interpolator ); registration->SetTransform (regTransform ); if(threadsGiven) { +#if ITK_VERSION_MAJOR <= 4 registration->SetNumberOfThreads(threads); +#else + registration->SetNumberOfWorkUnits(threads); +#endif if (m_Verbose) std::cout<< "Using " << threads << " threads." << std::endl; } registration->SetFixedImage( croppedFixedImage ); @@ -733,7 +740,7 @@ namespace clitk try { - registration->StartRegistration(); + registration->Update(); } catch( itk::ExceptionObject & err ) { @@ -788,19 +795,27 @@ namespace clitk //======================================================= typedef itk::Vector< float, SpaceDimension > DisplacementType; typedef itk::Image< DisplacementType, InputImageType::ImageDimension > DisplacementFieldType; -#if ITK_VERSION_MAJOR >= 4 +#if (ITK_VERSION_MAJOR == 4) && (ITK_VERSION_MINOR < 6) typedef itk::TransformToDisplacementFieldSource ConvertorType; #else - typedef itk::TransformToDeformationFieldSource ConvertorType; + typedef itk::TransformToDisplacementFieldFilter ConvertorType; #endif typename ConvertorType::Pointer filter= ConvertorType::New(); +#if ITK_VERSION_MAJOR <= 4 filter->SetNumberOfThreads(1); +#else + filter->SetNumberOfWorkUnits(1); +#endif if(m_ArgsInfo.itkbspline_flag) - sTransform->SetBulkTransform(NULL); + sTransform->SetBulkTransform(ITK_NULLPTR); else - transform->SetBulkTransform(NULL); + transform->SetBulkTransform(ITK_NULLPTR); 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();