NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkLocalSimilarityMeasureGradientDescentOptimizer.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 itkLocalSimilarityMeasureGradientDescentOptimizer_h
16 #define itkLocalSimilarityMeasureGradientDescentOptimizer_h
17 
18 #include <NifTKConfigure.h>
19 #include <itkSingleValuedNonLinearOptimizer.h>
20 #include <itkDeformableTransform.h>
21 #include <itkSimilarityMeasure.h>
22 
23 namespace itk
24 {
25 
32 template <class TFixedImage, class TMovingImage, class TScalarType, class TDeformationScalar>
34  public SingleValuedNonLinearOptimizer
35 {
36 public:
37 
42  typedef SingleValuedNonLinearOptimizer Superclass;
43  typedef SmartPointer<Self> Pointer;
44  typedef SmartPointer<const Self> ConstPointer;
45 
47  itkTypeMacro( LocalSimilarityMeasureGradientDescentOptimizer, SingleValuedNonLinearOptimizer );
48 
50  itkStaticConstMacro(Dimension, unsigned int, TFixedImage::ImageDimension);
51 
54  typedef const ImageToImageMetricType* ImageToImageMetricPointer;
55  typedef TFixedImage FixedImageType;
57  typedef FixedImageType* FixedImagePointer;
58  typedef typename FixedImageType::Pointer FixedImageSmartPointer;
59  typedef TMovingImage MovingImageType;
61  typedef MovingImageType* MovingImagePointer;
64  typedef double MeasureType;
65  typedef InterpolateImageFunction< TFixedImage, TScalarType > RegriddingInterpolatorType;
66  typedef typename RegriddingInterpolatorType::Pointer RegriddingInterpolatorPointer;
68  typedef typename ResampleFilterType::Pointer ResampleFilterPointer;
69  typedef typename DeformableTransformType::JacobianDeterminantFilterType::OutputImageType JacobianImageType;
70 
72  virtual void StartOptimization( void ) override;
73 
76  virtual void ResumeOptimization( void );
77 
80  virtual void StopOptimization( void );
81 
83  itkGetConstReferenceMacro( Maximize, bool );
84  itkSetMacro( Maximize, bool );
85  itkBooleanMacro( Maximize );
86 
90  itkGetConstMacro( Value, double );
91 
95  itkGetConstMacro( Stop, bool );
96 
98  itkSetMacro( MaximumNumberOfIterations, unsigned long int );
99  itkGetMacro( MaximumNumberOfIterations, unsigned long int );
100 
102  itkGetMacro( CurrentIteration, unsigned long int );
103 
105  itkSetMacro ( StepSize, double );
106  itkGetMacro ( StepSize, double );
107 
109  itkSetMacro ( MinimumStepSize, double );
110  itkGetMacro ( MinimumStepSize, double );
111 
113  itkSetMacro ( IteratingStepSizeReductionFactor, double );
114  itkGetMacro ( IteratingStepSizeReductionFactor, double );
115 
117  itkSetMacro ( RegriddingStepSizeReductionFactor, double );
118  itkGetMacro ( RegriddingStepSizeReductionFactor, double );
119 
121  itkSetMacro ( JacobianBelowZeroStepSizeReductionFactor, double );
122  itkGetMacro ( JacobianBelowZeroStepSizeReductionFactor, double );
123 
125  itkSetMacro ( MinimumDeformationMagnitudeThreshold, double );
126  itkGetMacro ( MinimumDeformationMagnitudeThreshold, double );
127 
129  itkSetMacro ( MinimumJacobianThreshold, double );
130  itkGetMacro ( MinimumJacobianThreshold, double );
131 
133  itkSetObjectMacro(RegriddingInterpolator, RegriddingInterpolatorType);
134  itkGetConstObjectMacro(RegriddingInterpolator, RegriddingInterpolatorType );
135 
137  itkSetObjectMacro(DeformableTransform, DeformableTransformType);
138  itkGetConstObjectMacro(DeformableTransform, DeformableTransformType );
139 
141  itkSetMacro ( MinimumSimilarityChangeThreshold, double );
142  itkGetMacro ( MinimumSimilarityChangeThreshold, double );
143 
147  itkSetMacro ( CheckSimilarityMeasure, bool );
148  itkGetMacro ( CheckSimilarityMeasure, bool );
149 
153  itkSetMacro ( CheckMinDeformationMagnitudeThreshold, bool );
154  itkGetMacro ( CheckMinDeformationMagnitudeThreshold, bool );
155 
159  itkSetMacro ( CheckJacobianBelowZero, bool );
160  itkGetMacro ( CheckJacobianBelowZero, bool );
161 
163  itkSetMacro ( WriteNextParameters, bool );
164  itkGetMacro ( WriteNextParameters, bool );
165 
167  itkSetMacro ( NextParametersFileName, std::string );
168  itkGetMacro ( NextParametersFileName, std::string );
169 
171  itkSetMacro ( NextParametersFileExt, std::string );
172  itkGetMacro ( NextParametersFileExt, std::string );
173 
175  itkSetMacro ( WriteDeformationField, bool );
176  itkGetMacro ( WriteDeformationField, bool );
177 
179  itkSetMacro ( DeformationFieldFileName, std::string );
180  itkGetMacro ( DeformationFieldFileName, std::string );
181 
183  itkSetMacro ( DeformationFieldFileExt, std::string );
184  itkGetMacro ( DeformationFieldFileExt, std::string );
185 
187  itkSetMacro ( WriteRegriddedImage, bool );
188  itkGetMacro ( WriteRegriddedImage, bool );
189 
191  itkSetMacro ( RegriddedImageFileName, std::string );
192  itkGetMacro ( RegriddedImageFileName, std::string );
193 
195  itkSetMacro ( RegriddedImageFileExt, std::string );
196  itkGetMacro ( RegriddedImageFileExt, std::string );
197 
199  itkSetMacro ( RegriddedMovingImagePadValue, MovingImagePixelType );
200  itkGetMacro ( RegriddedMovingImagePadValue, MovingImagePixelType );
201 
203  itkSetMacro(IsAbsRegriddedImage, bool);
204  itkGetMacro(IsAbsRegriddedImage, bool);
205 
209  itkSetMacro(IsPropagateRegriddedMovingImage, bool);
210  itkGetMacro(IsPropagateRegriddedMovingImage, bool);
211 
215  virtual const JacobianImageType* GetComposedJacobian() const
216  {
217  return this->m_ComposedJacobian;
218  }
222  virtual const FixedImageType* GetRegriddedMovingImage() const
223  {
224  return this->m_RegriddedMovingImage;
225  }
229  virtual const FixedImageType* GetRegriddedFixedImage() const
230  {
231  return this->m_RegriddedFixedImage;
232  }
233 
234 protected:
235 
238  void PrintSelf(std::ostream& os, Indent indent) const override;
239 
242 
246  double m_Value;
247 
251  bool m_Stop;
252 
256  unsigned long int m_MaximumNumberOfIterations;
257 
261  unsigned int m_CurrentIteration;
262 
264  unsigned int m_RegriddingNumber;
265 
267  double m_StepSize;
268 
271 
274 
277 
280 
285 
288 
293 
298 
301 
304 
307 
309  virtual void Initialize() {};
310 
312  virtual double CalculateNextStep(int iterationNumber, double currentSimilarity, const ParametersType& current, ParametersType& next) = 0;
313 
315  virtual void CleanUp() {};
316 
318  virtual void ReGrid(bool isResetCurrentPosition);
319 
323  virtual void ComposeJacobian()
324  {
325  typedef MultiplyImageFilter<JacobianImageType> MultiplyImageFilterType;
326 
327  this->m_DeformableTransform->ComputeMinJacobian();
328  typename MultiplyImageFilterType::Pointer multiplyFilter = MultiplyImageFilterType::New();
329  multiplyFilter->SetInput1(this->m_ComposedJacobian);
330  multiplyFilter->SetInput2(this->m_DeformableTransform->GetJacobianImage());
331  multiplyFilter->Update();
332  this->m_ComposedJacobian = multiplyFilter->GetOutput();
333  this->m_ComposedJacobian->DisconnectPipeline();
334  }
335 
337  RegriddingInterpolatorPointer m_RegriddingInterpolator;
338 
340  ResampleFilterPointer m_RegriddingResampler;
341 
343  FixedImageSmartPointer m_RegriddedMovingImage;
344 
346  FixedImageSmartPointer m_RegriddedFixedImage;
347 
349  DeformableTransformPointer m_DeformableTransform;
350 
352  ParametersType m_NextParameters;
353 
355  ParametersType m_RegriddedParameters;
356 
358  ImageToImageMetricPointer m_ImageToImageMetric;
359 
361  FixedImagePointer m_FixedImage;
362 
364  MovingImagePointer m_MovingImage;
365 
368 
371 
374 
377 
380 
383 
386 
389 
392 
394  MovingImagePixelType m_RegriddedMovingImagePadValue;
395 
399  typename JacobianImageType::Pointer m_ComposedJacobian;
400 
409 
410 private:
411 
412  LocalSimilarityMeasureGradientDescentOptimizer(const Self&); //purposely not implemented
413  void operator=(const Self&); //purposely not implemented
414 
415 };
416 
417 } // namespace itk.
418 
419 #ifndef ITK_MANUAL_INSTANTIATION
420 #include "itkLocalSimilarityMeasureGradientDescentOptimizer.txx"
421 #endif
422 
423 #endif /*ITKLOCALSIMILARITYMEASUREGRADIENTDESCENTOPTIMIZER_H_*/
424 
425 
426 
std::string m_DeformationFieldFileName
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:379
FixedImageType::Pointer FixedImageSmartPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:58
bool m_WriteNextParameters
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:367
double m_StepSize
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:267
Implement a gradient descent optimization suitable for FFD and Fluid deformation. ...
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:33
DeformableTransformType::JacobianDeterminantFilterType::OutputImageType JacobianImageType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:69
FixedImageSmartPointer m_RegriddedFixedImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:346
bool m_CheckJacobianBelowZero
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:303
double m_IteratingStepSizeReductionFactor
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:273
Abstract base class, implementing TemplateMethod [2] for similarity measures.
Definition: itkSimilarityMeasure.h:56
FixedImagePointer m_FixedImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:361
SingleValuedNonLinearOptimizer Superclass
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:42
FixedImageType * FixedImagePointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:57
RegriddingInterpolatorPointer m_RegriddingInterpolator
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:337
TFixedImage FixedImageType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:55
bool m_IsAbsRegriddedImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:306
Base class for deformable transforms.
Definition: itkDeformableTransform.h:69
unsigned long int m_MaximumNumberOfIterations
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:256
Definition: niftkITKAffineResampleImage.cxx:74
ParametersType m_NextParameters
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:352
std::string m_RegriddedImageFileExt
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:391
DeformableTransform< TFixedImage, TScalarType, Dimension, TDeformationScalar > DeformableTransformType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:62
std::string m_RegriddedImageFileName
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:388
DeformableTransformType::Pointer DeformableTransformPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:63
MovingImagePointer m_MovingImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:364
SmartPointer< Self > Pointer
Definition: itkDeformableTransform.h:76
std::string m_NextParametersFileName
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:370
bool m_WriteRegriddedImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:385
double m_MinimumDeformationMagnitudeThreshold
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:284
ImageToImageMetricPointer m_ImageToImageMetric
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:358
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
LocalSimilarityMeasureGradientDescentOptimizer Self
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:41
ResampleFilterType::Pointer ResampleFilterPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:68
double m_MinimumStepSize
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:270
unsigned int m_CurrentIteration
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:261
MovingImageType * MovingImagePointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:61
JacobianImageType::Pointer m_ComposedJacobian
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:399
const ImageToImageMetricType * ImageToImageMetricPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:54
FixedImageType::PixelType FixedImagePixelType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:56
ResampleImageFilter< TFixedImage, TFixedImage > ResampleFilterType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:67
double m_MinimumSimilarityChangeThreshold
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:287
std::string m_DeformationFieldFileExt
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:382
RegriddingInterpolatorType::Pointer RegriddingInterpolatorPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:66
MovingImagePixelType m_RegriddedMovingImagePadValue
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:394
double m_MinimumJacobianThreshold
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:292
virtual void CleanUp()
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:315
ParametersType m_RegriddedParameters
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:355
virtual ~LocalSimilarityMeasureGradientDescentOptimizer()
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:237
bool m_Stop
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:251
unsigned int m_RegriddingNumber
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:264
bool m_CheckMinDeformationMagnitudeThreshold
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:300
virtual const FixedImageType * GetRegriddedMovingImage() const
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:222
virtual void ComposeJacobian()
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:323
bool m_Maximize
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:241
virtual const FixedImageType * GetRegriddedFixedImage() const
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:229
const unsigned int Dimension
Definition: niftkBreastDCEandADC.cxx:89
SmartPointer< Self > Pointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:43
DeformableTransformPointer m_DeformableTransform
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:349
SmartPointer< const Self > ConstPointer
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:44
Resample an image via a coordinate transform.
InterpolateImageFunction< TFixedImage, TScalarType > RegriddingInterpolatorType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:65
SimilarityMeasure< TFixedImage, TMovingImage > ImageToImageMetricType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:53
virtual void Initialize()
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:309
double m_Value
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:246
bool m_IsPropagateRegriddedMovingImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:408
FixedImageSmartPointer m_RegriddedMovingImage
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:343
double MeasureType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:64
double m_JacobianBelowZeroStepSizeReductionFactor
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:279
MovingImageType::PixelType MovingImagePixelType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:60
GLsizei const GLcharARB ** string
Definition: glew.h:5194
bool m_CheckSimilarityMeasure
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:297
std::string m_NextParametersFileExt
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:373
virtual const JacobianImageType * GetComposedJacobian() const
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:215
TMovingImage MovingImageType
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:59
double m_RegriddingStepSizeReductionFactor
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:276
bool m_WriteDeformationField
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:376
ResampleFilterPointer m_RegriddingResampler
Definition: itkLocalSimilarityMeasureGradientDescentOptimizer.h:340