NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkSimilarityMeasure.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 itkSimilarityMeasure_h
16 #define itkSimilarityMeasure_h
17 
18 #include <itkUCLBaseTransform.h>
20 #include <itkCovariantVector.h>
21 #include <itkPoint.h>
22 #include <itkImageFileWriter.h>
23 #include <itkSignedMaurerDistanceMapImageFilter.h>
24 #include <itkLinearInterpolateImageFunction.h>
26 #include <itkImageMaskSpatialObject.h>
27 
28 namespace itk
29 {
55 template < typename TFixedImage, typename TMovingImage >
56 class ITK_EXPORT SimilarityMeasure :
57  public ImageToImageMetricWithConstraint< TFixedImage, TMovingImage>
58 {
59 public:
60 
64  typedef SmartPointer<Self> Pointer;
65  typedef SmartPointer<const Self> ConstPointer;
66 
69 
72  typedef typename itk::UCLBaseTransform<double,
73  TFixedImage::ImageDimension,
74  TMovingImage::ImageDimension> UCLBaseTransformType;
75  typedef typename Superclass::TransformPointer TransformPointer;
76  typedef typename Superclass::TransformParametersType TransformParametersType;
77  typedef typename Superclass::TransformJacobianType TransformJacobianType;
80  typedef typename Superclass::MeasureType MeasureType;
81  typedef typename Superclass::DerivativeType DerivativeType;
82  typedef typename Superclass::FixedImageType FixedImageType;
85  typedef typename Superclass::MovingImageType MovingImageType;
88  typedef typename Superclass::FixedImageConstPointer FixedImageConstPointer;
89  typedef typename Superclass::MovingImageConstPointer MovingImageConstPointer;
90  typedef ImageFileWriter<TFixedImage> ImageFileWriterType;
91  typedef typename Superclass::InterpolatorType InterpolatorType;
95  typedef SignedMaurerDistanceMapImageFilter<UnsignedCharImageType, FloatImageType> FixedDistanceMapImageFilterType;
96  typedef SignedMaurerDistanceMapImageFilter<UnsignedCharImageType, FloatImageType> MovingDistanceMapImageFilterType;
97  typedef LinearInterpolateImageFunction<FloatImageType, double> DistanceMapLinearInterpolatorType;
99  typedef const ImageMaskSpatialObject<TFixedImage::ImageDimension> FixedMaskType;
100  typedef const ImageMaskSpatialObject<TMovingImage::ImageDimension> MovingMaskType;
101 
102  static const int SYMMETRIC_METRIC_AVERAGE;
103  static const int SYMMETRIC_METRIC_MID_WAY;
105 
107  void Initialize() throw (ExceptionObject);
108 
110  void InitializeIntensityBounds() throw (ExceptionObject);
111 
113  void SetIntensityBounds( const FixedImagePixelType fixedLower,
114  const FixedImagePixelType fixedUpper,
115  const MovingImagePixelType movingLower,
116  const MovingImagePixelType movingUpper);
117 
119  itkGetConstMacro( FixedLowerBound, FixedImagePixelType );
120 
122  itkGetConstMacro( FixedUpperBound, FixedImagePixelType );
123 
125  itkGetConstMacro( MovingLowerBound, MovingImagePixelType );
126 
128  itkGetConstMacro( MovingUpperBound, MovingImagePixelType );
129 
133  itkGetMacro( NumberOfFixedSamples, long int);
134 
138  itkGetMacro( NumberOfMovingSamples, long int);
139 
173  itkSetMacro( TwoSidedMetric, bool );
174  itkGetMacro( TwoSidedMetric, bool );
175 
177  itkSetMacro( WriteFixedImage, bool );
178  itkGetMacro( WriteFixedImage, bool );
179 
181  itkSetMacro( FixedImageFileName, std::string );
182  itkGetMacro( FixedImageFileName, std::string );
183 
185  itkSetMacro( FixedImageFileExt, std::string );
186  itkGetMacro( FixedImageFileExt, std::string );
187 
189  itkSetMacro( WriteTransformedMovingImage, bool );
190  itkGetMacro( WriteTransformedMovingImage, bool );
191 
193  itkSetMacro( TransformedMovingImageFileName, std::string );
194  itkGetMacro( TransformedMovingImageFileName, std::string );
195 
197  itkSetMacro( TransformedMovingImageFileExt, std::string );
198  itkGetMacro( TransformedMovingImageFileExt, std::string );
199 
206  itkSetMacro(DirectVoxelComparison, bool);
207  itkGetMacro(DirectVoxelComparison, bool);
208 
216  itkSetMacro(SymmetricMetric, int);
217  itkGetMacro(SymmetricMetric, int);
218 
219  itkSetMacro(IsUpdateMatrix, bool);
220  itkGetMacro(IsUpdateMatrix, bool);
221 
223  itkSetMacro(TransformedMovingImagePadValue, MovingImagePixelType);
224  itkGetMacro(TransformedMovingImagePadValue, MovingImagePixelType);
225 
227  itkSetMacro(UseWeighting, bool);
228  itkGetMacro(UseWeighting, bool);
229 
231  itkSetMacro(WeightingDistanceThreshold, double);
232  itkGetMacro(WeightingDistanceThreshold, double);
233 
237  itkSetObjectMacro(FixedImageInterpolator, InterpolatorType);
238  itkSetObjectMacro(MovingImageInterpolator, InterpolatorType);
239  itkGetObjectMacro(FixedImageInterpolator, InterpolatorType);
240  itkGetObjectMacro(MovingImageInterpolator, InterpolatorType);
241 
245  itkSetObjectMacro(FixedImageTransform, TransformType);
246  itkGetObjectMacro(FixedImageTransform, TransformType);
247 
251  itkSetMacro(InitialiseIntensityBoundsUsingMask, bool);
252  itkGetMacro(InitialiseIntensityBoundsUsingMask, bool);
253 
257  itkSetMacro(IsResampleWholeImage, bool);
258  itkGetMacro(IsResampleWholeImage, bool);
259 
265  virtual bool ShouldBeMaximized() { return false; }
266 
270  virtual const TFixedImage* GetTransformedMovingImage() const { return this->m_TransformedMovingImage.GetPointer(); }
271 
275  virtual const TFixedImage* GetTransformedFixedImage() const { return this->m_TransformedFixedImage.GetPointer(); }
276 
280  double GetMeasureOfParameterChange(TransformParametersType lastP, TransformParametersType p);
281 
282 protected:
283 
285  virtual ~SimilarityMeasure() {};
286  void PrintSelf(std::ostream& os, Indent indent) const;
287 
292  virtual MeasureType GetSimilarity( const TransformParametersType & parameters ) const;
293 
298  virtual void ResetCostFunction() = 0;
299 
304  virtual void AggregateCostFunctionPair(FixedImagePixelType fixedValue, MovingImagePixelType movingValue) = 0;
305 
310  virtual void AggregateCostFunctionPairWithWeighting(FixedImagePixelType fixedValue, MovingImagePixelType movingValue, double weight) { itkExceptionMacro(<<"AggregateCostFunctionPairWithWeighting not implemented.");
311  }
312 
317  virtual MeasureType FinalizeCostFunction() = 0;
318 
326  typename TFixedImage::Pointer m_TransformedMovingImage;
327 
331  typename TFixedImage::Pointer m_TransformedFixedImage;
332 
339  typename InterpolatorType::Pointer m_FixedImageInterpolator;
343  typename InterpolatorType::Pointer m_MovingImageInterpolator;
344 
346  FixedImagePixelType m_FixedLowerBound;
347 
349  FixedImagePixelType m_FixedUpperBound;
350 
352  MovingImagePixelType m_MovingLowerBound;
353 
355  MovingImagePixelType m_MovingUpperBound;
356 
361 
367 
371  typename MidwayImageType::Pointer m_MidwayImage;
372 
379  typename FixedDistanceMapImageFilterType::Pointer m_FixedDistanceMap;
380 
384  typename MovingDistanceMapImageFilterType::Pointer m_MovingDistanceMap;
385 
389  typename DistanceMapLinearInterpolatorType::Pointer m_FixedDistanceMapInterpolator;
390 
394  typename DistanceMapLinearInterpolatorType::Pointer m_MovingDistanceMapInterpolator;
395 
400 
405 
410 
412  void WriteImage(const TFixedImage* image, std::string filename) const;
413 
421  virtual MeasureType GetSymmetricSimilarity(const TransformParametersType & parameters);
422 
430  virtual MeasureType GetSymmetricSimilarityAtHalfway(const TransformParametersType & parameters);
431 
435  virtual MeasureType GetSimilarityUsingFixedAndMovingImageTransforms(const TransformParametersType& parameters);
436 
440  virtual void InitializeSymmetricMetric();
441 
445  virtual void InitializeDistanceWeightings();
446 
447 private:
448 
449  SimilarityMeasure(const Self&); // purposefully not implemented
450  void operator=(const Self&); // purposefully not implemented
451 
456  bool m_BoundsSetByUser;
457 
463  mutable long int m_NumberOfFixedSamples;
464 
470  mutable long int m_NumberOfMovingSamples;
471 
473  mutable int m_IterationNumber;
474 
476  bool m_WriteFixedImage;
477 
479  bool m_WriteTransformedMovingImage;
480 
482  std::string m_FixedImageFileName;
483 
485  std::string m_FixedImageFileExt;
486 
488  std::string m_TransformedMovingImageFileName;
489 
491  std::string m_TransformedMovingImageFileExt;
492 
494  bool m_TwoSidedMetric;
495 
501  bool m_DirectVoxelComparison;
502 
507  int m_SymmetricMetric;
508 
509  bool m_IsUpdateMatrix;
510 
512  MovingImagePixelType m_TransformedMovingImagePadValue;
513 
514 };
515 
516 } // end namespace itk
517 
518 #ifndef ITK_MANUAL_INSTANTIATION
519 #include "itkSimilarityMeasure.txx"
520 #endif
521 
522 #endif
523 
524 
525 
const ImageMaskSpatialObject< TFixedImage::ImageDimension > FixedMaskType
Definition: itkSimilarityMeasure.h:99
InterpolatorType::Pointer m_MovingImageInterpolator
Definition: itkSimilarityMeasure.h:343
MovingDistanceMapImageFilterType::Pointer m_MovingDistanceMap
Definition: itkSimilarityMeasure.h:384
bool m_InitialiseIntensityBoundsUsingMask
Definition: itkSimilarityMeasure.h:404
FixedImagePixelType m_FixedUpperBound
Definition: itkSimilarityMeasure.h:349
Abstract base class, implementing TemplateMethod [2] for similarity measures.
Definition: itkSimilarityMeasure.h:56
ImageType::SizeType SizeType
Definition: niftkMakeLapUSProbeBasicModel.cxx:31
virtual ~SimilarityMeasure()
Definition: itkSimilarityMeasure.h:285
SmartPointer< Self > Pointer
Definition: itkSimilarityMeasure.h:64
static const int SYMMETRIC_METRIC_AVERAGE
Definition: itkSimilarityMeasure.h:102
Superclass::TransformParametersType TransformParametersType
Definition: itkSimilarityMeasure.h:76
Abstract base class to provide functionality for adding arbitrary constraints, and also arbitrary way...
Definition: itkImageToImageMetricWithConstraint.h:49
Superclass::TransformType TransformType
Definition: itkSimilarityMeasure.h:68
Superclass::FixedImageType FixedImageType
Definition: itkSimilarityMeasure.h:82
FixedImageType::SizeType FixedImageSizeType
Definition: itkSimilarityMeasure.h:83
TransformType::Pointer m_FixedImageTransform
Definition: itkSimilarityMeasure.h:399
Image< float, TFixedImage::ImageDimension > FloatImageType
Definition: itkSimilarityMeasure.h:93
virtual const TFixedImage * GetTransformedMovingImage() const
Definition: itkSimilarityMeasure.h:270
ImageFileWriter< TFixedImage > ImageFileWriterType
Definition: itkSimilarityMeasure.h:90
Superclass::TransformPointer TransformPointer
Definition: itkSimilarityMeasure.h:75
GLenum GLsizei GLenum GLenum const GLvoid * image
Definition: glew.h:4052
bool m_UseWeighting
Definition: itkSimilarityMeasure.h:360
Definition: niftkMeshSmoother.cxx:19
Definition: niftkITKAffineResampleImage.cxx:74
Superclass::MovingImageType MovingImageType
Definition: itkSimilarityMeasure.h:85
Superclass::FixedImageType::PixelType FixedImagePixelType
Definition: itkSimilarityMeasure.h:84
SignedMaurerDistanceMapImageFilter< UnsignedCharImageType, FloatImageType > FixedDistanceMapImageFilterType
Definition: itkSimilarityMeasure.h:95
SmartPointer< const Self > ConstPointer
Definition: itkSimilarityMeasure.h:65
Superclass::InputPointType InputPointType
Definition: itkSimilarityMeasure.h:78
itk::Point< double, 2 > InputPointType
Definition: EulerAffine2DJacobianTest.cxx:34
GLuint GLuint GLfloat weight
Definition: glew.h:11786
itk::EulerAffineTransform< double, 2, 2 > TransformType
Definition: EulerAffine2DJacobianTest.cxx:27
Image< unsigned char, TFixedImage::ImageDimension > UnsignedCharImageType
Definition: itkSimilarityMeasure.h:94
DistanceMapLinearInterpolatorType::Pointer m_FixedDistanceMapInterpolator
Definition: itkSimilarityMeasure.h:389
Euler Affine transform.
Definition: itkEulerAffineTransform.h:38
virtual const TFixedImage * GetTransformedFixedImage() const
Definition: itkSimilarityMeasure.h:275
MovingImagePixelType m_MovingLowerBound
Definition: itkSimilarityMeasure.h:352
MidwayImageType::Pointer m_MidwayImage
Definition: itkSimilarityMeasure.h:371
SimilarityMeasure Self
Definition: itkSimilarityMeasure.h:62
SignedMaurerDistanceMapImageFilter< UnsignedCharImageType, FloatImageType > MovingDistanceMapImageFilterType
Definition: itkSimilarityMeasure.h:96
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
static const int SYMMETRIC_METRIC_BOTH_FIXED_AND_MOVING_TRANSFORM
Definition: itkSimilarityMeasure.h:104
GLfloat GLfloat p
Definition: glew.h:14169
Image< char, TFixedImage::ImageDimension > MidwayImageType
Definition: itkSimilarityMeasure.h:92
Superclass::FixedImageConstPointer FixedImageConstPointer
Definition: itkSimilarityMeasure.h:88
InterpolatorType::Pointer m_FixedImageInterpolator
Definition: itkSimilarityMeasure.h:339
TFixedImage::Pointer m_TransformedFixedImage
Definition: itkSimilarityMeasure.h:331
const ImageMaskSpatialObject< TMovingImage::ImageDimension > MovingMaskType
Definition: itkSimilarityMeasure.h:100
itk::UCLBaseTransform< double, TFixedImage::ImageDimension, TMovingImage::ImageDimension > UCLBaseTransformType
Definition: itkSimilarityMeasure.h:74
Superclass::MovingImageConstPointer MovingImageConstPointer
Definition: itkSimilarityMeasure.h:89
TFixedImage::Pointer m_TransformedMovingImage
Definition: itkSimilarityMeasure.h:326
MovingImagePixelType m_MovingUpperBound
Definition: itkSimilarityMeasure.h:355
Superclass::TransformJacobianType TransformJacobianType
Definition: itkSimilarityMeasure.h:77
Simultaneous itk::Image and itk::Array (and hence vnl_vector) class.
FixedDistanceMapImageFilterType::Pointer m_FixedDistanceMap
Definition: itkSimilarityMeasure.h:379
LinearInterpolateImageFunction< FloatImageType, double > DistanceMapLinearInterpolatorType
Definition: itkSimilarityMeasure.h:97
Superclass::MeasureType MeasureType
Definition: itkSimilarityMeasure.h:80
ImageToImageMetricWithConstraint< TFixedImage, TMovingImage > Superclass
Definition: itkSimilarityMeasure.h:63
Superclass::DerivativeType DerivativeType
Definition: itkSimilarityMeasure.h:81
FixedImagePixelType m_FixedLowerBound
Definition: itkSimilarityMeasure.h:346
Superclass::OutputPointType OutputPointType
Definition: itkSimilarityMeasure.h:79
double m_WeightingDistanceThreshold
Definition: itkSimilarityMeasure.h:366
virtual void AggregateCostFunctionPairWithWeighting(FixedImagePixelType fixedValue, MovingImagePixelType movingValue, double weight)
Definition: itkSimilarityMeasure.h:310
bool m_IsResampleWholeImage
Definition: itkSimilarityMeasure.h:409
itk::EulerAffineTransform< double, TFixedImage::ImageDimension, TMovingImage::ImageDimension > AffineTransformType
Definition: itkSimilarityMeasure.h:98
Our base transform class. Cant think of a better name.
Definition: itkUCLBaseTransform.h:33
SmartPointer< Self > Pointer
Definition: itkEulerAffineTransform.h:49
itk::Point< double, 2 > OutputPointType
Definition: EulerAffine2DJacobianTest.cxx:35
GLsizei const GLcharARB ** string
Definition: glew.h:5194
Superclass::MovingImageType::PixelType MovingImagePixelType
Definition: itkSimilarityMeasure.h:87
Superclass::InterpolatorType InterpolatorType
Definition: itkSimilarityMeasure.h:91
MovingImageType::SizeType MovingImageSizeType
Definition: itkSimilarityMeasure.h:86
DistanceMapLinearInterpolatorType::Pointer m_MovingDistanceMapInterpolator
Definition: itkSimilarityMeasure.h:394
static const int SYMMETRIC_METRIC_MID_WAY
Definition: itkSimilarityMeasure.h:103