diff --git a/Code/DisparityMap/otbFineRegistrationImageFilter.h b/Code/DisparityMap/otbFineRegistrationImageFilter.h index a433c112d9210b8fd3a37d5d654199b84cba1ff9..7212c975062d5c884211c3568961192697f462b5 100644 --- a/Code/DisparityMap/otbFineRegistrationImageFilter.h +++ b/Code/DisparityMap/otbFineRegistrationImageFilter.h @@ -22,6 +22,7 @@ #include "itkInterpolateImageFunction.h" #include "itkContinuousIndex.h" +#include "itkTransform.h" #include "itkTranslationTransform.h" #include "itkImageToImageMetric.txx" @@ -51,8 +52,8 @@ namespace otb * This filter accepts fixed and moving images with different sizes and spacing. Metric and search windows radius * are expressed in terms of number of pixels in the fixed image. * - * An initial offset can be used to reduce computation time in case of input and moving images with a significant - * offset. This offset is taken into account in the output deformation field. + * An initial transform can be used to reduce computation time in case of input and moving images with a significant + * offset. This transform is taken into account in the output deformation field. * * It is possible to generate an output metric map and deformation field at a coarser resolution by setting * grid step to value higher than 1 (grid step is expressed in terms of number of fixed image pixels). @@ -98,8 +99,9 @@ public: typedef typename itk::ImageToImageMetric<TInputImage, TInputImage> MetricType; typedef typename MetricType::Pointer MetricPointerType; - typedef typename itk::TranslationTransform<double,2> TranslationType; - typedef typename TranslationType::Pointer TranslationPointerType; + typedef typename itk::Transform<double,2,2> TransformType; + typedef typename TransformType::Pointer TransformPointerType; + typedef typename itk::TranslationTransform<double,2> TranslationTransformType; /** Set/Get the Metric used to compare images */ itkSetObjectMacro(Metric,MetricType); @@ -142,6 +144,10 @@ public: itkSetMacro(UseSpacing,bool); itkBooleanMacro(UseSpacing); + /** Set default transform between the two images */ + itkSetObjectMacro(Transform, TransformType); + itkGetConstObjectMacro(Transform, TransformType); + /** Set default offset between the two images */ itkSetMacro(InitialOffset,SpacingType); itkGetConstReferenceMacro(InitialOffset,SpacingType); @@ -209,7 +215,7 @@ private: MetricPointerType m_Metric; /** The translation */ - TranslationPointerType m_Translation; + TransformPointerType m_Transform; /** Default offset */ SpacingType m_InitialOffset; diff --git a/Code/DisparityMap/otbFineRegistrationImageFilter.txx b/Code/DisparityMap/otbFineRegistrationImageFilter.txx index c02f405246a4752bdc6ef97f6f52c6ac80208800..0b4629b70820c4f4ccd06f8f29d37b57dcf826ce 100644 --- a/Code/DisparityMap/otbFineRegistrationImageFilter.txx +++ b/Code/DisparityMap/otbFineRegistrationImageFilter.txx @@ -57,8 +57,8 @@ FineRegistrationImageFilter<TInputImage,T0utputCorrelation,TOutputDeformationFie // Default interpolator m_Interpolator = itk::LinearInterpolateImageFunction<TInputImage,double>::New(); - // Translation - m_Translation = TranslationType::New(); + // Transform: default on a translation + m_Transform = TranslationTransformType::New(); // Grid Step m_GridStep.Fill(1); @@ -297,7 +297,7 @@ FineRegistrationImageFilter<TInputImage,TOutputCorrelation,TOutputDeformationFie // Wire currentMetric m_Interpolator->SetInputImage(this->GetMovingInput()); - m_Metric->SetTransform(m_Translation); + m_Metric->SetTransform(m_Transform); m_Metric->SetInterpolator(m_Interpolator); m_Metric->SetFixedImage(fixedPtr); m_Metric->SetMovingImage(movingPtr); @@ -320,7 +320,7 @@ FineRegistrationImageFilter<TInputImage,TOutputCorrelation,TOutputDeformationFie double currentMetric, optMetric; // Optimal translation parameters - typename TranslationType::ParametersType params(2), optParams(2), tmpOptParams(2); + typename TransformType::ParametersType params(2), optParams(2), tmpOptParams(2); // Final deformation value DeformationValueType deformationValue;