NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkMammogramPectoralisFitMetric.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 __itkMammogramPectoralisFitMetric_h
16 #define __itkMammogramPectoralisFitMetric_h
17 
18 #include <itkSingleValuedCostFunction.h>
19 #include <itkImageRegionIterator.h>
20 #include <itkImageRegionIteratorWithIndex.h>
21 #include <itkImageRegionConstIterator.h>
22 #include <itkImageRegionConstIteratorWithIndex.h>
23 
24 namespace itk {
25 
34 template <class TInputImage>
35 class ITK_EXPORT MammogramPectoralisFitMetric :
36  public SingleValuedCostFunction
37 {
38 // Software Guide : EndCodeSnippet
39 public:
41  typedef SingleValuedCostFunction Superclass;
42  typedef SmartPointer< Self > Pointer;
43  typedef SmartPointer< const Self > ConstPointer;
44 
46  itkTypeMacro( MammogramPectoralisFitMetric, SingleValuedCostFunction );
47 
49  itkNewMacro(Self);
50 
52  itkStaticConstMacro(ImageDimension, unsigned int,
53  TInputImage::ImageDimension);
54 
56  typedef TInputImage InputImageType;
57  typedef typename InputImageType::Pointer InputImagePointer;
58  typedef typename InputImageType::ConstPointer InputImageConstPointer;
61  typedef typename InputImageType::SpacingType InputImageSpacingType;
62  typedef typename InputImageType::PointType InputImagePointType;
65 
66  typedef typename itk::ImageRegionIterator< TInputImage > IteratorType;
67  typedef typename itk::ImageRegionIteratorWithIndex< TInputImage > IteratorWithIndexType;
68  typedef typename itk::ImageRegionConstIterator< TInputImage > IteratorConstType;
69  typedef typename itk::ImageRegionConstIteratorWithIndex< TInputImage > IteratorWithIndexConstType;
70 
71 
73  typedef float TemplatePixelType;
74  typedef typename itk::Image<TemplatePixelType, ImageDimension> TemplateImageType;
75  typedef typename TemplateImageType::Pointer TemplateImagePointer;
76  typedef typename TemplateImageType::ConstPointer TemplateImageConstPointer;
79  typedef typename TemplateImageType::SpacingType TemplateImageSpacingType;
80  typedef typename TemplateImageType::PointType TemplateImagePointType;
83 
84  typedef typename itk::ImageRegionIterator< TemplateImageType > TemplateIteratorType;
85  typedef typename itk::ImageRegionIteratorWithIndex< TemplateImageType > TemplateIteratorWithIndexType;
86 
88  typedef unsigned char MaskPixelType;
89  typedef typename itk::Image<MaskPixelType, ImageDimension> MaskImageType;
90  typedef typename MaskImageType::ConstPointer MaskImageConstPointer;
91  typedef typename MaskImageType::Pointer MaskImagePointer;
95  typedef typename MaskImageType::SpacingType MaskImageSpacingType;
96 
97 
98  typedef typename itk::ImageRegionConstIterator< MaskImageType > MaskIteratorType;
99  typedef typename itk::ImageLinearConstIteratorWithIndex< MaskImageType > MaskLineIteratorType;
100 
101 
103  void SetInputImage( const InputImageType *imInput );
104 
106  void SetMask( const MaskImageType *imMask );
107 
109  void SetSSD( bool flag ) { m_flgOptimiseSSD = flag; }
110 
112  void SetMinimumPectoralArea( double minPecArea ) { m_MinimumPectoralArea = minPecArea; }
113 
115  itkGetObjectMacro( ImTemplate, TemplateImageType );
116 
117  typedef Superclass::ParametersType ParametersType;
118  typedef Superclass::DerivativeType DerivativeType;
119  typedef Superclass::MeasureType MeasureType;
120 
121  itkStaticConstMacro( ParametricSpaceDimension, unsigned int, 8 );
122 
123  unsigned int GetNumberOfParameters(void) const override
124  {
125  return ParametricSpaceDimension;
126  }
127 
128  void GetParameters( const InputImagePointType &pecInterceptInMM,
129  ParametersType &parameters );
130 
131  void GetDerivative( const ParametersType &parameters,
132  DerivativeType &Derivative ) const override
133  {
134  return;
135  }
136 
137  MeasureType GetValueAtPecIntercept( const InputImagePointType &pecInterceptInMM );
138 
139  MeasureType GetValue( const ParametersType &parameters ) const override;
140 
141  MeasureType GetValueNCC( const ParametersType &parameters ) const;
142  MeasureType GetValueSSD( const ParametersType &parameters ) const;
143 
144  void GetValueAndDerivative( const ParametersType &parameters,
145  MeasureType &Value,
146  DerivativeType &Derivative ) const override
147  {
148  Value = this->GetValue( parameters );
149  this->GetDerivative( parameters, Derivative );
150  }
151 
152  TemplateImagePointer GetTemplate( void ) { return m_ImTemplate; }
153 
154  void ClearTemplate( void );
155 
156  void GenerateTemplate( const ParametersType &parameters,
157  double &tMean, double &tStdDev, double &nInside, double &nPixels,
158  TemplateImageRegionType &templateRegion );
159 
160 
161 protected:
162 
164  virtual ~MammogramPectoralisFitMetric();
166  void operator=(const Self &) {}
167  void PrintSelf(std::ostream & os, Indent indent) const override;
168 
170 
173 
174  InputImageRegionType m_ImRegion;
175  InputImageSpacingType m_ImSpacing;
176  InputImagePointType m_ImOrigin;
177  InputImageSizeType m_ImSize;
178  InputImagePointType m_ImSizeInMM;
179  InputImageConstPointer m_InputImage;
180 
181  TemplateImagePointer m_ImTemplate;
182 
183  MaskImageRegionType m_MaskRegion;
184  MaskImageConstPointer m_Mask;
185 
186  double GradientAtMidpoint( const ParametersType &parameters ) const;
187 };
188 
189 } // end namespace itk
190 
191 #ifndef ITK_MANUAL_INSTANTIATION
192 #include "itkMammogramPectoralisFitMetric.txx"
193 #endif
194 
195 #endif
MaskImageType::SizeType MaskImageSizeType
Definition: itkMammogramPectoralisFitMetric.h:93
SingleValuedCostFunction Superclass
Definition: itkMammogramPectoralisFitMetric.h:41
MaskImageConstPointer m_Mask
Definition: itkMammogramPectoralisFitMetric.h:184
MaskImageType::RegionType MaskImageRegionType
Definition: itkMammogramPectoralisFitMetric.h:92
TemplateImageType::SpacingType TemplateImageSpacingType
Definition: itkMammogramPectoralisFitMetric.h:79
A metric to compute the similarity between an image and a pectoral shape model.
Definition: itkMammogramPectoralisFitMetric.h:35
bool m_flgOptimiseSSD
Definition: itkMammogramPectoralisFitMetric.h:169
unsigned int GetNumberOfParameters(void) const override
Definition: itkMammogramPectoralisFitMetric.h:123
ImageType::SizeType SizeType
Definition: niftkMakeLapUSProbeBasicModel.cxx:31
itk::Image< TemplatePixelType, ImageDimension > TemplateImageType
Definition: itkMammogramPectoralisFitMetric.h:74
TemplateImageType::IndexType TemplateImageIndexType
Definition: itkMammogramPectoralisFitMetric.h:81
TInputImage InputImageType
Definition: itkMammogramPectoralisFitMetric.h:56
InputImageType::PointType InputImagePointType
Definition: itkMammogramPectoralisFitMetric.h:62
void GetDerivative(const ParametersType &parameters, DerivativeType &Derivative) const override
Definition: itkMammogramPectoralisFitMetric.h:131
InputImageType::Pointer InputImagePointer
Definition: itkMammogramPectoralisFitMetric.h:57
TemplateImageType::PointType TemplateImagePointType
Definition: itkMammogramPectoralisFitMetric.h:80
MaskImageType::ConstPointer MaskImageConstPointer
Definition: itkMammogramPectoralisFitMetric.h:90
itk::ImageLinearConstIteratorWithIndex< MaskImageType > MaskLineIteratorType
Definition: itkMammogramPectoralisFitMetric.h:99
TemplateImageType::SizeType TemplateImageSizeType
Definition: itkMammogramPectoralisFitMetric.h:82
Superclass::ParametersType ParametersType
Definition: itkMammogramPectoralisFitMetric.h:115
MammogramPectoralisFitMetric Self
Definition: itkMammogramPectoralisFitMetric.h:40
Definition: niftkITKAffineResampleImage.cxx:74
ImageType::IndexType IndexType
Definition: niftkMakeLapUSProbeBasicModel.cxx:32
InputImageConstPointer m_InputImage
Definition: itkMammogramPectoralisFitMetric.h:179
InputImagePointType m_ImSizeInMM
Definition: itkMammogramPectoralisFitMetric.h:178
TemplateImagePointer GetTemplate(void)
Definition: itkMammogramPectoralisFitMetric.h:152
itk::ImageRegionConstIterator< MaskImageType > MaskIteratorType
Definition: itkMammogramPectoralisFitMetric.h:98
void SetSSD(bool flag)
Optimise SSD rather than normalised cross-correlation.
Definition: itkMammogramPectoralisFitMetric.h:109
itk::ImageRegionIteratorWithIndex< TemplateImageType > TemplateIteratorWithIndexType
Definition: itkMammogramPectoralisFitMetric.h:85
float TemplatePixelType
Definition: itkMammogramPectoralisFitMetric.h:73
SmartPointer< Self > Pointer
Definition: itkMammogramPectoralisFitMetric.h:42
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
SmartPointer< const Self > ConstPointer
Definition: itkMammogramPectoralisFitMetric.h:43
InputImageType::RegionType InputImageRegionType
Definition: itkMammogramPectoralisFitMetric.h:59
ImageType::RegionType RegionType
Definition: niftkMakeLapUSProbeBasicModel.cxx:30
MaskImageRegionType m_MaskRegion
Definition: itkMammogramPectoralisFitMetric.h:183
InputImageType::SizeType InputImageSizeType
Definition: itkMammogramPectoralisFitMetric.h:64
itk::ImageRegionConstIterator< TInputImage > IteratorConstType
Definition: itkMammogramPectoralisFitMetric.h:68
double m_MinimumPectoralArea
Definition: itkMammogramPectoralisFitMetric.h:171
InputImagePointType m_ImOrigin
Definition: itkMammogramPectoralisFitMetric.h:176
MammogramPectoralisFitMetric(const Self &)
Definition: itkMammogramPectoralisFitMetric.h:165
MaskImageType::SpacingType MaskImageSpacingType
Definition: itkMammogramPectoralisFitMetric.h:95
InputImageSpacingType m_ImSpacing
Definition: itkMammogramPectoralisFitMetric.h:175
unsigned char MaskPixelType
Definition: itkMammogramPectoralisFitMetric.h:88
InputImageType::PixelType InputImagePixelType
Definition: itkMammogramPectoralisFitMetric.h:60
InputImageType::IndexType InputImageIndexType
Definition: itkMammogramPectoralisFitMetric.h:63
void operator=(const Self &)
Definition: itkMammogramPectoralisFitMetric.h:166
InputImageSizeType m_ImSize
Definition: itkMammogramPectoralisFitMetric.h:177
MaskImageType::IndexType MaskImageIndexType
Definition: itkMammogramPectoralisFitMetric.h:94
TemplateImagePointer m_ImTemplate
Definition: itkMammogramPectoralisFitMetric.h:181
void GetValueAndDerivative(const ParametersType &parameters, MeasureType &Value, DerivativeType &Derivative) const override
Definition: itkMammogramPectoralisFitMetric.h:144
itk::ImageRegionIterator< TInputImage > IteratorType
Definition: itkMammogramPectoralisFitMetric.h:66
itk::ImageRegionIteratorWithIndex< TInputImage > IteratorWithIndexType
Definition: itkMammogramPectoralisFitMetric.h:67
double m_TemplatePixelAreaInMM
Definition: itkMammogramPectoralisFitMetric.h:172
itk::ImageRegionIterator< TemplateImageType > TemplateIteratorType
Definition: itkMammogramPectoralisFitMetric.h:84
void SetMinimumPectoralArea(double minPecArea)
Set the minuimum pectoral area in mm^2.
Definition: itkMammogramPectoralisFitMetric.h:112
TemplateImageType::ConstPointer TemplateImageConstPointer
Definition: itkMammogramPectoralisFitMetric.h:76
InputImageType::SpacingType InputImageSpacingType
Definition: itkMammogramPectoralisFitMetric.h:61
MaskImageType::Pointer MaskImagePointer
Definition: itkMammogramPectoralisFitMetric.h:91
InputImageRegionType m_ImRegion
Definition: itkMammogramPectoralisFitMetric.h:174
itk::ImageRegionConstIteratorWithIndex< TInputImage > IteratorWithIndexConstType
Definition: itkMammogramPectoralisFitMetric.h:69
itk::Image< MaskPixelType, ImageDimension > MaskImageType
Definition: itkMammogramPectoralisFitMetric.h:89
Superclass::DerivativeType DerivativeType
Definition: itkMammogramPectoralisFitMetric.h:118
Superclass::MeasureType MeasureType
Definition: itkMammogramPectoralisFitMetric.h:119
TemplateImageType::PixelType TemplateImagePixelType
Definition: itkMammogramPectoralisFitMetric.h:78
InputImageType::ConstPointer InputImageConstPointer
Definition: itkMammogramPectoralisFitMetric.h:58
TemplateImageType::Pointer TemplateImagePointer
Definition: itkMammogramPectoralisFitMetric.h:75
TemplateImageType::RegionType TemplateImageRegionType
Definition: itkMammogramPectoralisFitMetric.h:77