NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkPIUImageToImageMetric.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 itkPIUImageToImageMetric_h
16 #define itkPIUImageToImageMetric_h
17 
19 
20 namespace itk
21 {
28 template < class TFixedImage, class TMovingImage >
29 class ITK_EXPORT PIUImageToImageMetric :
30  public HistogramSimilarityMeasure< TFixedImage, TMovingImage>
31 {
32 public:
33 
37  typedef SmartPointer<Self> Pointer;
38  typedef SmartPointer<const Self> ConstPointer;
42  typedef typename Superclass::HistogramType HistogramType;
44  typedef typename HistogramType::Iterator HistogramIteratorType;
45  typedef typename HistogramType::MeasurementVectorType HistogramMeasurementVectorType;
47  typedef typename HistogramType::SizeValueType HistogramSizeValueType;
48 
50  itkNewMacro(Self);
51 
54 
55 protected:
56 
58  virtual ~PIUImageToImageMetric() {};
59 
65  MeasureType FinalizeCostFunction()
66  {
67  MeasureType piu = NumericTraits<MeasureType>::Zero;
68  HistogramFrequencyType movingFrequency;
69  HistogramIndexType index(2);
70 
71  HistogramSizeValueType sf = this->m_Histogram->GetSize(0);
72  HistogramSizeValueType sm = this->m_Histogram->GetSize(1);
73 
74  HistogramFrequencyType totalFrequency = this->m_Histogram->GetTotalFrequency();
75 
76  for (unsigned int f = 0; f < sf; f++)
77  {
78  // Reset to zero.
79  MeasureType value = NumericTraits<MeasureType>::Zero;
80  MeasureType mean = NumericTraits<MeasureType>::Zero;
81  MeasureType sum = NumericTraits<MeasureType>::Zero;
82  MeasureType sumSquared = NumericTraits<MeasureType>::Zero;
83  MeasureType stdDev = NumericTraits<MeasureType>::Zero;
84  HistogramFrequencyType totalMovingFrequency = NumericTraits<HistogramFrequencyType>::Zero;
85 
86  for (unsigned int m = 0; m < sm; m++)
87  {
88  index[0] = f;
89  index[1] = m;
90 
91  movingFrequency = this->m_Histogram->GetFrequency(index);
92  value = m+1;
93  sum += (movingFrequency * value);
94  sumSquared += (movingFrequency * (value*value));
95  totalMovingFrequency += movingFrequency;
96 
97  }
98 
99  if (totalMovingFrequency > 0)
100  {
101  mean = sum/(double)totalMovingFrequency;
102  stdDev = sqrt( (sumSquared - ((sum*sum)/(double)totalMovingFrequency))/((double)totalMovingFrequency - 1));
103  piu += ((stdDev/mean) * ((double)totalMovingFrequency/(double)totalFrequency));
104 
105  }
106  }
107  return piu;
108  }
109 
110 private:
111  PIUImageToImageMetric(const Self&); // purposefully not implemented
112  void operator=(const Self&); // purposefully not implemented
113 };
114 
115 } // end namespace itk
116 
117 #endif
118 
119 
120 
HistogramType::FrequencyType HistogramFrequencyType
Definition: itkPIUImageToImageMetric.h:43
PIUImageToImageMetric Self
Definition: itkPIUImageToImageMetric.h:35
Computes similarity between two objects to be registered using Histogram.
Definition: itkHistogramSimilarityMeasure.h:33
HistogramSimilarityMeasure< TFixedImage, TMovingImage > Superclass
Definition: itkPIUImageToImageMetric.h:36
Superclass::HistogramType HistogramType
Definition: itkPIUImageToImageMetric.h:42
Definition: niftkITKAffineResampleImage.cxx:74
PIUImageToImageMetric()
Definition: itkPIUImageToImageMetric.h:57
MeasureType FinalizeCostFunction()
Definition: itkPIUImageToImageMetric.h:65
Superclass::FixedImageType::PixelType FixedImagePixelType
Definition: itkPIUImageToImageMetric.h:39
HistogramType::MeasurementVectorType HistogramMeasurementVectorType
Definition: itkPIUImageToImageMetric.h:45
Superclass::MeasureType MeasureType
Definition: itkPIUImageToImageMetric.h:41
GLsizei const GLfloat * value
Definition: glew.h:1833
virtual ~PIUImageToImageMetric()
Definition: itkPIUImageToImageMetric.h:58
HistogramType::Iterator HistogramIteratorType
Definition: itkPIUImageToImageMetric.h:44
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
HistogramType::SizeValueType HistogramSizeValueType
Definition: itkPIUImageToImageMetric.h:47
SmartPointer< const Self > ConstPointer
Definition: itkPIUImageToImageMetric.h:38
Superclass::IndexType IndexType
Definition: itkUCLHistogram.h:45
GLuint index
Definition: glew.h:1798
HistogramType::IndexType HistogramIndexType
Definition: itkPIUImageToImageMetric.h:46
SmartPointer< Self > Pointer
Definition: itkPIUImageToImageMetric.h:37
Superclass::MovingImageType::PixelType MovingImagePixelType
Definition: itkPIUImageToImageMetric.h:40
const GLdouble * m
Definition: glew.h:7887
Superclass::MeasureType MeasureType
Definition: itkSimilarityMeasure.h:80
Superclass::AbsoluteFrequencyType FrequencyType
Definition: itkUCLHistogram.h:44
Implements Roger Woods PIU image similarity measure.
Definition: itkPIUImageToImageMetric.h:29
GLclampf f
Definition: glew.h:3136