NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkMSDImageToImageMetric.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  NifTK: A software platform for medical image computing.
4 
5  Copyright (c) University College London (UCL). All rights reserved.
6 
7  This software is distributed WITHOUT ANY WARRANTY; without even
8  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9  PURPOSE.
10 
11  See LICENSE.txt in the top level directory for details.
12 
13 =============================================================================*/
14 
15 #ifndef itkMSDImageToImageMetric_h
16 #define itkMSDImageToImageMetric_h
17 
19 
20 namespace itk
21 {
28 template < class TFixedImage, class TMovingImage >
29 class ITK_EXPORT MSDImageToImageMetric :
30  public JacobianGradientSimilarityMeasure< TFixedImage, TMovingImage>
31 {
32 public:
33 
37  typedef SmartPointer<Self> Pointer;
38  typedef SmartPointer<const Self> ConstPointer;
39  typedef typename Superclass::MeasureType MeasureType;
40  typedef typename Superclass::RealType RealType;
41  typedef typename Superclass::DerivativeType DerivativeType;
42  typedef typename Superclass::GradientPixelType GradientPixelType;
43  typedef typename Superclass::TransformJacobianType TransformJacobianType;
44  typedef typename Superclass::FixedImagePixelType FixedImagePixelType;
45  typedef typename Superclass::MovingImagePixelType MovingImagePixelType;
46 
48  itkNewMacro(Self);
49 
52 
53 protected:
54 
56  virtual ~MSDImageToImageMetric() {};
57 
62  {
63  this->m_MSD = 0;
64  this->m_NumberOfSamplesForCostFunction = 0;
65  }
66 
71  FixedImagePixelType fixedValue,
72  MovingImagePixelType movingValue)
73  {
74  this->m_MSD += ((fixedValue - movingValue) * (fixedValue - movingValue));
75  this->m_NumberOfSamplesForCostFunction++;
76  }
77 
81  MeasureType FinalizeCostFunction()
82  {
83  if (this->m_NumberOfSamplesForCostFunction > 0)
84  {
85  return this->m_MSD / (double)m_NumberOfSamplesForCostFunction;
86  }
87  else
88  {
89  return 0;
90  }
91  }
92 
97  {
98  m_NumberOfSamplesForDerivative = 0;
99  }
100 
105  DerivativeType & derivative,
106  const GradientPixelType & gradientPixel,
107  const TransformJacobianType & jacobian,
108  unsigned int dimensions,
109  unsigned int parameterNumber,
110  RealType fixedValue,
111  RealType movingValue)
112  {
113  RealType sum = NumericTraits< RealType >::Zero;
114  for(unsigned int dim=0; dim < dimensions; dim++)
115  {
116  sum += 2.0 * (movingValue - fixedValue) * jacobian( dim, parameterNumber ) * gradientPixel[dim];
117  }
118  derivative[parameterNumber] += sum;
119  m_NumberOfSamplesForDerivative++;
120  }
121 
122 
127  void FinalizeDerivative(DerivativeType & derivative)
128  {
129  if( !this->m_NumberOfSamplesForDerivative )
130  {
131  itkExceptionMacro(<<"All the points mapped to outside of the moving image");
132  }
133  else
134  {
135  unsigned int parametersDimension = derivative.GetSize();
136 
137  for(unsigned int i = 0; i < parametersDimension; i++)
138  {
139  derivative[i] /= this->m_NumberOfSamplesForDerivative;
140  }
141  }
142  }
143 
144 private:
145  MSDImageToImageMetric(const Self&); // purposefully not implemented
146  void operator=(const Self&); // purposefully not implemented
147 
149  double m_MSD;
150  long int m_NumberOfSamplesForCostFunction;
151  long int m_NumberOfSamplesForDerivative;
152 };
153 
154 } // end namespace itk
155 
156 #endif
157 
158 
159 
MSDImageToImageMetric Self
Definition: itkMSDImageToImageMetric.h:35
Abstract base class, implementing TemplateMethod [2] for similarity measures.
Definition: itkSimilarityMeasure.h:56
Superclass::GradientPixelType GradientPixelType
Definition: itkMSDImageToImageMetric.h:42
void FinalizeDerivative(DerivativeType &derivative)
Definition: itkMSDImageToImageMetric.h:127
Superclass::MeasureType MeasureType
Definition: itkMSDImageToImageMetric.h:39
Implements Mean of Squared Difference similarity measure.
Definition: itkMSDImageToImageMetric.h:29
Definition: niftkITKAffineResampleImage.cxx:74
void ResetCostFunction()
Definition: itkMSDImageToImageMetric.h:61
Superclass::RealType RealType
Definition: itkMSDImageToImageMetric.h:40
SmartPointer< const Self > ConstPointer
Definition: itkMSDImageToImageMetric.h:38
virtual ~MSDImageToImageMetric()
Definition: itkMSDImageToImageMetric.h:56
void ResetDerivativeComputations()
Definition: itkMSDImageToImageMetric.h:96
Superclass::FixedImagePixelType FixedImagePixelType
Definition: itkMSDImageToImageMetric.h:44
void ComputeDerivativeValue(DerivativeType &derivative, const GradientPixelType &gradientPixel, const TransformJacobianType &jacobian, unsigned int dimensions, unsigned int parameterNumber, RealType fixedValue, RealType movingValue)
Definition: itkMSDImageToImageMetric.h:104
Superclass::TransformJacobianType TransformJacobianType
Definition: itkMSDImageToImageMetric.h:43
Superclass::MovingImagePixelType MovingImagePixelType
Definition: itkMSDImageToImageMetric.h:45
SimilarityMeasure< TFixedImage, TMovingImage > Superclass
Definition: itkMSDImageToImageMetric.h:36
SmartPointer< Self > Pointer
Definition: itkMSDImageToImageMetric.h:37
Superclass::DerivativeType DerivativeType
Definition: itkMSDImageToImageMetric.h:41
void AggregateCostFunctionPair(FixedImagePixelType fixedValue, MovingImagePixelType movingValue)
Definition: itkMSDImageToImageMetric.h:70
MSDImageToImageMetric()
Definition: itkMSDImageToImageMetric.h:55
MeasureType FinalizeCostFunction()
Definition: itkMSDImageToImageMetric.h:81
AbstractBase class, just to implement a gradient method based on Jacobian.
Definition: itkJacobianGradientSimilarityMeasure.h:35