go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkGradientDifferenceImageToImageMetric2.h
Go to the documentation of this file.
1 /*======================================================================
2 
3  This file is part of the elastix software.
4 
5  Copyright (c) University Medical Center Utrecht. All rights reserved.
6  See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
7  details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notices for more information.
12 
13 ======================================================================*/
14 /*=========================================================================
15 
16  Program: Insight Segmentation & Registration Toolkit
17  Module: $RCSfile: itkGradientDifferenceImageToImageMetric2.h,v $
18  Language: C++
19  Date: $Date: 2011-29-04 14:33 $
20  Version: $Revision: 2.0 $
21 
22  Copyright (c) Insight Software Consortium. All rights reserved.
23  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
24 
25  This software is distributed WITHOUT ANY WARRANTY; without even
26  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
27  PURPOSE. See the above copyright notices for more information.
28 
29 =========================================================================*/
30 #ifndef __itkGradientDifferenceImageToImageMetric2_h
31 #define __itkGradientDifferenceImageToImageMetric2_h
32 
34 
35 #include "itkSobelOperator.h"
36 #include "itkNeighborhoodOperatorImageFilter.h"
37 #include "itkPoint.h"
38 #include "itkCastImageFilter.h"
39 #include "itkResampleImageFilter.h"
40 #include "itkOptimizer.h"
43 
44 namespace itk
45 {
70 template< class TFixedImage, class TMovingImage >
72  public AdvancedImageToImageMetric< TFixedImage, TMovingImage >
73 {
74 public:
75 
79 
80  typedef SmartPointer< Self > Pointer;
81  typedef SmartPointer< const Self > ConstPointer;
82 
84  itkNewMacro( Self );
85 
87  itkTypeMacro( GradientDifferenceImageToImageMetric, ImageToImageMetric );
88 
91  #if defined( _MSC_VER ) && ( _MSC_VER == 1300 )
92  typedef double RealType;
93  #else
94  typedef typename Superclass::RealType RealType;
95  #endif
96 
98  typedef typename TransformType::ScalarType ScalarType;
103  typedef typename InterpolatorType::Pointer InterpolatorPointer;
110  typedef typename TFixedImage::PixelType FixedImagePixelType;
111  typedef typename TMovingImage::PixelType MovedImagePixelType;
112  typedef typename MovingImageType::RegionType MovingImageRegionType;
113  typedef typename itk::Optimizer OptimizerType;
114  typedef typename OptimizerType::ScalesType ScalesType;
115 
116  itkStaticConstMacro( FixedImageDimension, unsigned int,
117  FixedImageType::ImageDimension );
118  itkStaticConstMacro( MovedImageDimension, unsigned int,
119  MovingImageType::ImageDimension );
120 
124  typedef itk::Image< FixedImagePixelType, itkGetStaticConstMacro( FixedImageDimension ) >
126  typedef itk::ResampleImageFilter< MovingImageType, TransformedMovingImageType >
131  typedef itk::Image< RealType, itkGetStaticConstMacro( FixedImageDimension ) >
133  typedef itk::CastImageFilter< FixedImageType, FixedGradientImageType >
135  typedef typename CastFixedImageFilterType::Pointer CastFixedImageFilterPointer;
136  typedef typename FixedGradientImageType::PixelType FixedGradientPixelType;
137  typedef itk::Image< RealType, itkGetStaticConstMacro( MovedImageDimension ) >
139  typedef itk::CastImageFilter< TransformedMovingImageType, MovedGradientImageType >
141  typedef typename CastMovedImageFilterType::Pointer CastMovedImageFilterPointer;
142  typedef typename MovedGradientImageType::PixelType MovedGradientPixelType;
143 
145  void GetDerivative( const TransformParametersType & parameters,
146  DerivativeType & derivative ) const;
147 
149  MeasureType GetValue( const TransformParametersType & parameters ) const;
150 
152  void GetValueAndDerivative( const TransformParametersType & parameters,
153  MeasureType & Value, DerivativeType & derivative ) const;
154 
155  virtual void Initialize( void ) throw ( ExceptionObject );
156 
158  void WriteGradientImagesToFiles( void ) const;
159 
161  itkSetMacro( Scales, ScalesType );
162  itkGetConstReferenceMacro( Scales, ScalesType );
163 
166  itkSetMacro( DerivativeDelta, double );
167  itkGetConstReferenceMacro( DerivativeDelta, double );
168 
169 protected:
170 
172  virtual ~GradientDifferenceImageToImageMetric() {}
173  void PrintSelf( std::ostream & os, Indent indent ) const;
174 
176  void ComputeMovedGradientRange( void ) const;
177 
179  void ComputeVariance( void ) const;
180 
183  const double * subtractionFactor ) const;
184 
185  typedef NeighborhoodOperatorImageFilter<
187 
188  typedef NeighborhoodOperatorImageFilter<
190 
191 private:
192 
193  GradientDifferenceImageToImageMetric( const Self & ); // purposely not implemented
194  void operator=( const Self & ); // purposely not implemented
195 
197  mutable MovedGradientPixelType m_Variance[ FixedImageDimension ];
198 
200  mutable MovedGradientPixelType m_MinMovedGradient[ MovedImageDimension ];
201  mutable MovedGradientPixelType m_MaxMovedGradient[ MovedImageDimension ];
202 
204  mutable FixedGradientPixelType m_MinFixedGradient[ FixedImageDimension ];
205  mutable FixedGradientPixelType m_MaxFixedGradient[ FixedImageDimension ];
206 
208  typename TransformMovingImageFilterType::Pointer m_TransformMovingImageFilter;
209 
212 
213  SobelOperator< FixedGradientPixelType,
214  itkGetStaticConstMacro( FixedImageDimension ) >
215  m_FixedSobelOperators[ FixedImageDimension ];
216 
217  typename FixedSobelFilter::Pointer m_FixedSobelFilters[ itkGetStaticConstMacro
218  ( FixedImageDimension ) ];
219 
222 
225 
226  SobelOperator< MovedGradientPixelType,
227  itkGetStaticConstMacro( MovedImageDimension ) >
228  m_MovedSobelOperators[ MovedImageDimension ];
229 
230  typename MovedSobelFilter::Pointer m_MovedSobelFilters[ itkGetStaticConstMacro
231  ( MovedImageDimension ) ];
232 
237 
238 };
239 
240 } // end namespace itk
241 
242 #ifndef ITK_MANUAL_INSTANTIATION
243 #include "itkGradientDifferenceImageToImageMetric2.hxx"
244 #endif
245 
246 #endif
This class combines two transforms: an 'initial transform' with a 'current transform'.
MeasureType ComputeMeasure(const TransformParametersType &parameters, const double *subtractionFactor) const
NeighborhoodOperatorImageFilter< FixedGradientImageType, FixedGradientImageType > FixedSobelFilter
Superclass::TransformParametersType TransformParametersType
Superclass::MovingImageType MovingImageType
An extension of the ITK ImageToImageMetric. It is the intended base class for all elastix metrics...
SobelOperator< FixedGradientPixelType, itkGetStaticConstMacro(FixedImageDimension) > m_FixedSobelOperators[FixedImageDimension]
FixedGradientPixelType m_MinFixedGradient[FixedImageDimension]
MovedGradientPixelType m_Variance[FixedImageDimension]
FixedSobelFilter::Pointer m_FixedSobelFilters[itkGetStaticConstMacro(FixedImageDimension)]
void PrintSelf(std::ostream &os, Indent indent) const
void GetDerivative(const TransformParametersType &parameters, DerivativeType &derivative) const
itk::Image< FixedImagePixelType, itkGetStaticConstMacro(FixedImageDimension) > TransformedMovingImageType
itk::AdvancedCombinationTransform< ScalarType, FixedImageDimension > CombinationTransformType
MovedSobelFilter::Pointer m_MovedSobelFilters[itkGetStaticConstMacro(MovedImageDimension)]
itk::Image< RealType, itkGetStaticConstMacro(FixedImageDimension) > FixedGradientImageType
FixedGradientPixelType m_MaxFixedGradient[FixedImageDimension]
itkStaticConstMacro(FixedImageDimension, unsigned int, FixedImageType::ImageDimension)
NeighborhoodOperatorImageFilter< MovedGradientImageType, MovedGradientImageType > MovedSobelFilter
itk::ResampleImageFilter< MovingImageType, TransformedMovingImageType > TransformMovingImageFilterType
Superclass::TransformPointer TransformPointer
MovedGradientPixelType m_MinMovedGradient[MovedImageDimension]
ZeroFluxNeumannBoundaryCondition< FixedGradientImageType > m_FixedBoundCond
itk::Image< RealType, itkGetStaticConstMacro(MovedImageDimension) > MovedGradientImageType
AdvancedImageToImageMetric< TFixedImage, TMovingImage > Superclass
TransformMovingImageFilterType::Pointer m_TransformMovingImageFilter
Superclass::InterpolatorType InterpolatorType
Projective interpolation of an image at specified positions.
Superclass::TransformJacobianType TransformJacobianType
Computes similarity between two objects to be registered.
itk::CastImageFilter< TransformedMovingImageType, MovedGradientImageType > CastMovedImageFilterType
SobelOperator< MovedGradientPixelType, itkGetStaticConstMacro(MovedImageDimension) > m_MovedSobelOperators[MovedImageDimension]
void GetValueAndDerivative(const TransformParametersType &parameters, MeasureType &Value, DerivativeType &derivative) const
itk::AdvancedRayCastInterpolateImageFunction< MovingImageType, ScalarType > RayCastInterpolatorType
MovedGradientPixelType m_MaxMovedGradient[MovedImageDimension]
itk::CastImageFilter< FixedImageType, FixedGradientImageType > CastFixedImageFilterType
Superclass::FixedImageConstPointer FixedImageConstPointer
ZeroFluxNeumannBoundaryCondition< MovedGradientImageType > m_MovedBoundCond
Superclass::MovingImageConstPointer MovingImageConstPointer
MeasureType GetValue(const TransformParametersType &parameters) const


Generated on 11-03-2014 for elastix by doxygen 1.8.6 elastix logo