X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkBLUTDIRGenericFilter.cxx;h=b49d9909639a88ae71874e1d12d3deabe8f99659;hb=e06bbd15e271bf0a4092b673399d040a5cb25efe;hp=39c1d3d53b529d263947edeca5715f2bcc66326c;hpb=52ed5f9ca1bbe477fecfe703566993fed4e8895a;p=clitk.git diff --git a/registration/clitkBLUTDIRGenericFilter.cxx b/registration/clitkBLUTDIRGenericFilter.cxx index 39c1d3d..b49d990 100644 --- a/registration/clitkBLUTDIRGenericFilter.cxx +++ b/registration/clitkBLUTDIRGenericFilter.cxx @@ -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(); @@ -387,6 +396,9 @@ namespace clitk // Crop the fixedImage to the bounding box to facilitate multi-resolution typedef itk::ExtractImageFilter ExtractImageFilterType; typename ExtractImageFilterType::Pointer extractImageFilter=ExtractImageFilterType::New(); +#if ITK_VERSION_MAJOR == 4 + extractImageFilter->SetDirectionCollapseToSubmatrix(); +#endif extractImageFilter->SetInput(fixedImage); extractImageFilter->SetExtractionRegion(transformRegion); extractImageFilter->Update(); @@ -493,6 +505,20 @@ namespace clitk itk::Vector 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..."< TransformInitializerType; + typename TransformInitializerType::Pointer initializer = TransformInitializerType::New(); + initializer->SetTransform( rigidTransform ); + initializer->SetFixedImage( fixedImage ); + initializer->SetMovingImage( movingImage ); + initializer->GeometryOn(); + initializer->InitializeTransform(); + } //======================================================= @@ -627,7 +653,7 @@ namespace clitk typename MetricType::Pointer metric=genericMetric->GetMetricPointer(); if (movingMask) metric->SetMovingImageMask(movingMask); -#ifdef ITK_USE_OPTIMIZED_REGISTRATION_METHODS +#if defined(ITK_USE_OPTIMIZED_REGISTRATION_METHODS) || ITK_VERSION_MAJOR >= 4 if (threadsGiven) { metric->SetNumberOfThreads( threads ); if (m_Verbose) std::cout<< "Using " << threads << " threads." << std::endl; @@ -716,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 ) { @@ -772,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 ConvertorType; +# else + typedef itk::TransformToDisplacementFieldFilter ConvertorType; +# endif #else typedef itk::TransformToDeformationFieldSource ConvertorType; #endif @@ -783,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();