1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://www.centreleonberard.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
19 /*=========================================================================
21 Program: Insight Segmentation & Registration Toolkit
22 Module: $RCSfile: itkOptMeanSquaresImageToImageMetricFor3DBLUTFFD.h,v $
24 Date: $Date: 2010/06/14 17:32:07 $
25 Version: $Revision: 1.1 $
27 Copyright (c) Insight Software Consortium. All rights reserved.
28 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
30 This software is distributed WITHOUT ANY WARRANTY; without even
31 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
32 PURPOSE. See the above copyright notices for more information.
34 =========================================================================*/
35 #ifndef __itkOptMeanSquaresImageToImageMetricFor3DBLUTFFD_h
36 #define __itkOptMeanSquaresImageToImageMetricFor3DBLUTFFD_h
38 #include "itkImageToImageMetric.h"
39 #include "itkCovariantVector.h"
43 #include "itkMultiThreader.h"
48 template <class TFixedImage,class TMovingImage >
49 class ITK_EXPORT MeanSquaresImageToImageMetricFor3DBLUTFFD :
50 public ImageToImageMetric< TFixedImage, TMovingImage >
54 /** Standard class typedefs. */
55 typedef MeanSquaresImageToImageMetricFor3DBLUTFFD Self;
56 typedef ImageToImageMetric< TFixedImage, TMovingImage > Superclass;
57 typedef SmartPointer<Self> Pointer;
58 typedef SmartPointer<const Self> ConstPointer;
60 /** Method for creation through the object factory. */
63 /** Run-time type information (and related methods). */
64 itkTypeMacro(MeanSquaresImageToImageMetricFor3DBLUTFFD, ImageToImageMetric);
66 /** Types inherited from Superclass. */
67 typedef typename Superclass::TransformType TransformType;
68 typedef typename Superclass::TransformPointer TransformPointer;
69 typedef typename Superclass::TransformJacobianType TransformJacobianType;
70 typedef typename Superclass::InterpolatorType InterpolatorType;
71 typedef typename Superclass::MeasureType MeasureType;
72 typedef typename Superclass::DerivativeType DerivativeType;
73 typedef typename Superclass::ParametersType ParametersType;
74 typedef typename Superclass::FixedImageType FixedImageType;
75 typedef typename Superclass::MovingImageType MovingImageType;
76 typedef typename Superclass::MovingImagePointType MovingImagePointType;
77 typedef typename Superclass::FixedImageConstPointer FixedImageConstPointer;
78 typedef typename Superclass::MovingImageConstPointer MovingImageConstPointer;
79 typedef typename Superclass::CoordinateRepresentationType
80 CoordinateRepresentationType;
81 typedef typename Superclass::FixedImageSampleContainer
82 FixedImageSampleContainer;
83 typedef typename Superclass::ImageDerivativesType ImageDerivativesType;
84 typedef typename Superclass::WeightsValueType WeightsValueType;
85 typedef typename Superclass::IndexValueType IndexValueType;
87 // Needed for evaluation of Jacobian.
88 typedef typename Superclass::FixedImagePointType FixedImagePointType;
90 /** The moving image dimension. */
91 itkStaticConstMacro( MovingImageDimension, unsigned int,
92 MovingImageType::ImageDimension );
95 * Initialize the Metric by
96 * (1) making sure that all the components are present and plugged
98 * (2) uniformly select NumberOfSpatialSamples within
99 * the FixedImageRegion, and
100 * (3) allocate memory for pdf data structures. */
101 #if ( ( ITK_VERSION_MAJOR == 4 ) && ( ITK_VERSION_MINOR > 12 ) || ( ITK_VERSION_MAJOR > 4 ))
102 virtual void Initialize(void) ITK_OVERRIDE;
104 virtual void Initialize(void) throw ( ExceptionObject ) ITK_OVERRIDE;
107 /** Get the value. */
108 MeasureType GetValue( const ParametersType & parameters ) const ITK_OVERRIDE;
110 /** Get the derivatives of the match measure. */
111 void GetDerivative( const ParametersType & parameters,
112 DerivativeType & Derivative ) const ITK_OVERRIDE;
114 /** Get the value and derivatives for single valued optimizers. */
115 void GetValueAndDerivative( const ParametersType & parameters,
117 DerivativeType & Derivative ) const ITK_OVERRIDE;
121 MeanSquaresImageToImageMetricFor3DBLUTFFD();
122 virtual ~MeanSquaresImageToImageMetricFor3DBLUTFFD();
123 void PrintSelf(std::ostream& os, Indent indent) const ITK_OVERRIDE;
127 //purposely not implemented
128 MeanSquaresImageToImageMetricFor3DBLUTFFD(const Self &);
129 //purposely not implemented
130 void operator=(const Self &);
132 inline bool GetValueThreadProcessSample( unsigned int threadID,
133 unsigned long fixedImageSample,
134 const MovingImagePointType & mappedPoint,
135 double movingImageValue ) const ITK_OVERRIDE;
137 inline bool GetValueAndDerivativeThreadProcessSample( unsigned int threadID,
138 unsigned long fixedImageSample,
139 const MovingImagePointType & mappedPoint,
140 double movingImageValue,
141 const ImageDerivativesType &
142 movingImageGradientValue ) const ITK_OVERRIDE;
144 MeasureType * m_ThreaderMSE;
145 DerivativeType * m_ThreaderMSEDerivatives;
149 } // end namespace itk
151 #ifndef ITK_MANUAL_INSTANTIATION
152 #include "itkOptMeanSquaresImageToImageMetricFor3DBLUTFFD.txx"