/*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv Authors belong to: - University of LYON http://www.universite-lyon.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 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the copyright notices for more information. It is distributed under dual licence - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ===========================================================================**/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkMeanSquaresImageToImageMetricFor3DBLUTFFD.h,v $ Language: C++ Date: $Date: 2010/06/14 17:32:07 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMeanSquaresImageToImageMetricFor3DBLUTFFD_h #define __itkMeanSquaresImageToImageMetricFor3DBLUTFFD_h // First make sure that the configuration is available. // This line can be removed once the optimized versions // gets integrated into the main directories. #include "itkConfigure.h" #if defined(ITK_USE_OPTIMIZED_REGISTRATION_METHODS) || ITK_VERSION_MAJOR >= 4 #include "itkOptMeanSquaresImageToImageMetricFor3DBLUTFFD.h" #else #include "itkImageToImageMetric.h" #include "itkCovariantVector.h" #include "itkPoint.h" namespace itk { /** \class MeanSquaresImageToImageMetricFor3DBLUTFFD * \brief Computes similarity between two objects to be registered * * This Class is templated over the type of the fixed and moving * images to be compared. * * This metric computes the sum of squared differences between pixels in * the moving image and pixels in the fixed image. The spatial correspondance * between both images is established through a Transform. Pixel values are * taken from the Moving image. Their positions are mapped to the Fixed image * and result in general in non-grid position on it. Values at these non-grid * position of the Fixed image are interpolated using a user-selected Interpolator. * * \ingroup RegistrationMetrics */ template < class TFixedImage, class TMovingImage > class ITK_EXPORT MeanSquaresImageToImageMetricFor3DBLUTFFD : public ImageToImageMetric< TFixedImage, TMovingImage> { public: /** Standard class typedefs. */ typedef MeanSquaresImageToImageMetricFor3DBLUTFFD Self; typedef ImageToImageMetric Superclass; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(MeanSquaresImageToImageMetricFor3DBLUTFFD, ImageToImageMetric); /** Types transferred from the base class */ typedef typename Superclass::RealType RealType; typedef typename Superclass::TransformType TransformType; typedef typename Superclass::TransformPointer TransformPointer; typedef typename Superclass::TransformParametersType TransformParametersType; typedef typename Superclass::TransformJacobianType TransformJacobianType; typedef typename Superclass::GradientPixelType GradientPixelType; typedef typename Superclass::GradientImageType GradientImageType; typedef typename Superclass::InputPointType InputPointType; typedef typename Superclass::OutputPointType OutputPointType; typedef typename Superclass::MeasureType MeasureType; typedef typename Superclass::DerivativeType DerivativeType; typedef typename Superclass::FixedImageType FixedImageType; typedef typename Superclass::MovingImageType MovingImageType; typedef typename Superclass::FixedImageConstPointer FixedImageConstPointer; typedef typename Superclass::MovingImageConstPointer MovingImageConstPointer; /** Get the derivatives of the match measure. */ void GetDerivative( const TransformParametersType & parameters, DerivativeType & derivative ) const; /** Get the value for single valued optimizers. */ MeasureType GetValue( const TransformParametersType & parameters ) const; /** Get value and derivatives for multiple valued optimizers. */ void GetValueAndDerivative( const TransformParametersType & parameters, MeasureType& Value, DerivativeType& Derivative ) const; #ifdef ITK_USE_CONCEPT_CHECKING /** Begin concept checking */ itkConceptMacro(MovingPixelTypeHasNumericTraitsCheck, (Concept::HasNumericTraits)); itkConceptMacro(MovingRealTypeAdditivieOperatorsCheck, (Concept::AdditiveOperators< typename NumericTraits::RealType>)); itkConceptMacro(MovingRealTypeMultiplyOperatorCheck, (Concept::MultiplyOperator< typename NumericTraits::RealType>)); /** End concept checking */ #endif protected: MeanSquaresImageToImageMetricFor3DBLUTFFD(); virtual ~MeanSquaresImageToImageMetricFor3DBLUTFFD() {}; private: MeanSquaresImageToImageMetricFor3DBLUTFFD(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION #include "itkMeanSquaresImageToImageMetricFor3DBLUTFFD.txx" #endif #endif #endif