X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkConvertBLUTCoeffsToVFFilter.txx;h=ef63900717289f73c0fc3b71969c8a7a0c44ec6c;hb=34637c8712feac5cf12c8920b6d0c1690918dd47;hp=32464d7466d907ace9a3e399f1d671d7c3cbddc5;hpb=4f2fb7a9394563fd56582639232a9fe12492c5d6;p=clitk.git diff --git a/registration/clitkConvertBLUTCoeffsToVFFilter.txx b/registration/clitkConvertBLUTCoeffsToVFFilter.txx index 32464d7..ef63900 100644 --- a/registration/clitkConvertBLUTCoeffsToVFFilter.txx +++ b/registration/clitkConvertBLUTCoeffsToVFFilter.txx @@ -1,17 +1,12 @@ #include "clitkConvertBLUTCoeffsToVFFilter.h" #include "clitkBSplineDeformableTransform.h" -#include "clitkTransformToDeformationFieldSource.h" -#include "clitkShapedBLUTSpatioTemporalDeformableTransform.h" +//#include "clitkTransformToDeformationFieldSource.h" +//#include "clitkShapedBLUTSpatioTemporalDeformableTransform.h" #include "itkImageMaskSpatialObject.h" -#include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h" +//#include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h" #include "clitkVectorImageToImageFilter.h" -#if ITK_VERSION_MAJOR >= 4 -#include "itkTransformToDisplacementFieldSource.h" -#else -#include "itkTransformToDeformationFieldSource.h" -#endif #include "itkBSplineDeformableTransform.h" namespace clitk @@ -148,8 +143,8 @@ namespace clitk typedef clitk::VectorImageToImageFilter FilterType; typename FilterType::Pointer component_filter[BLUTCoefficientImageType::ImageDimension]; + typename ITKTransformType::CoefficientImageArray coefficient_images; - typename ITKTransformType::ImagePointer coefficient_images[BLUTCoefficientImageType::ImageDimension]; for (unsigned int i=0; i < BLUTCoefficientImageType::ImageDimension; i++) { component_filter[i] = FilterType::New(); component_filter[i]->SetInput(input); @@ -157,20 +152,39 @@ namespace clitk component_filter[i]->Update(); coefficient_images[i] = component_filter[i]->GetOutput(); } - m_ITKTransform->SetCoefficientImage(coefficient_images); + + // RP: 16/01/2013 + // ATTENTION: Apparently, there's a bug in the SetCoefficientImages function of ITK 4.x + // I needed to use SetParametersByValue instead. + // + typename ITKTransformType::ParametersType params(input->GetPixelContainer()->Size() * BLUTCoefficientImageType::ImageDimension); + for (unsigned int i=0; i < BLUTCoefficientImageType::ImageDimension; i++) { + for (unsigned int j=0; j < coefficient_images[i]->GetPixelContainer()->Size(); j++) + params[input->GetPixelContainer()->Size() * i + j] = coefficient_images[i]->GetPixelContainer()->GetBufferPointer()[j]; + } + + m_ITKTransform->SetGridOrigin(input->GetOrigin()); + m_ITKTransform->SetGridDirection(input->GetDirection()); + m_ITKTransform->SetGridRegion(input->GetLargestPossibleRegion()); + m_ITKTransform->SetGridSpacing(input->GetSpacing()); + m_ITKTransform->SetParametersByValue(params); m_GenericTransform = m_ITKTransform; } +#if ITK_VERSION_MAJOR > 4 || (ITK_VERSION_MAJOR == 4 && ITK_VERSION_MINOR >= 6) + m_Filter->SetReferenceImage(output); +#else m_Filter->SetOutputOrigin(output->GetOrigin()); m_Filter->SetOutputSpacing(output->GetSpacing()); m_Filter->SetOutputSize(output->GetLargestPossibleRegion().GetSize()); +#endif m_Filter->SetTransform(m_GenericTransform); m_Filter->Update(); - SetNthOutput(0, m_Filter->GetOutput()); + this->SetNthOutput(0, m_Filter->GetOutput()); } -} \ No newline at end of file +}