18#ifndef itkNormalizedGradientCorrelationImageToImageMetric_h
19#define itkNormalizedGradientCorrelationImageToImageMetric_h
22#include "itkSobelOperator.h"
23#include "itkNeighborhoodOperatorImageFilter.h"
25#include "itkCastImageFilter.h"
26#include "itkResampleImageFilter.h"
27#include "itkOptimizer.h"
43template <
class TFixedImage,
class TMovingImage>
64#if defined(_MSC_VER) && (_MSC_VER == 1300)
67 using typename Superclass::RealType;
70 using typename Superclass::TransformType;
72 using typename Superclass::TransformPointer;
74 using typename Superclass::TransformParametersType;
75 using typename Superclass::TransformJacobianType;
76 using typename Superclass::InterpolatorType;
78 using typename Superclass::MeasureType;
79 using typename Superclass::DerivativeType;
80 using typename Superclass::FixedImageType;
81 using typename Superclass::FixedImageRegionType;
82 using typename Superclass::MovingImageType;
84 using typename Superclass::FixedImageConstPointer;
85 using typename Superclass::MovingImageConstPointer;
97 using MaskImageType = itk::Image<unsigned char, Self::FixedImageDimension>;
119 GetDerivative(
const TransformParametersType & parameters, DerivativeType & derivative)
const override;
123 GetValue(
const TransformParametersType & parameters)
const override;
129 DerivativeType & derivative)
const override;
148 itkSetMacro(DerivativeDelta,
double);
149 itkGetConstReferenceMacro(DerivativeDelta,
double);
159 PrintSelf(std::ostream & os, Indent indent)
const override;
172 using FixedSobelFilter = NeighborhoodOperatorImageFilter<FixedGradientImageType, FixedGradientImageType>;
173 using MovedSobelFilter = NeighborhoodOperatorImageFilter<MovedGradientImageType, MovedGradientImageType>;
192 SobelOperator<FixedGradientPixelType, Self::FixedImageDimension> m_FixedSobelOperators[FixedImageDimension];
194 typename FixedSobelFilter::Pointer m_FixedSobelFilters[Self::FixedImageDimension];
201 SobelOperator<MovedGradientPixelType, Self::MovedImageDimension> m_MovedSobelOperators[MovedImageDimension];
203 typename MovedSobelFilter::Pointer m_MovedSobelFilters[Self::MovedImageDimension];
208#ifndef ITK_MANUAL_INSTANTIATION
209# include "itkNormalizedGradientCorrelationImageToImageMetric.hxx"
An extension of the ITK ImageToImageMetric. It is the intended base class for all elastix metrics.
typename MovingImageType::RegionType MovingImageRegionType
typename MovingImageType::Pointer MovingImagePointer
Projective interpolation of an image at specified positions.
An metric based on the itk::NormalizedGradientCorrelationImageToImageMetric.
NeighborhoodOperatorImageFilter< MovedGradientImageType, MovedGradientImageType > MovedSobelFilter
ZeroFluxNeumannBoundaryCondition< FixedGradientImageType > m_FixedBoundCond
typename RayCastInterpolatorType::Pointer RayCastInterpolatorPointer
typename CastFixedImageFilterType::Pointer CastFixedImageFilterPointer
itk::Image< RealType, Self::MovedImageDimension > MovedGradientImageType
TransformMovingImageFilterPointer m_TransformMovingImageFilter
typename InterpolatorType::Pointer InterpolatorPointer
typename MovedGradientImageType::PixelType MovedGradientPixelType
void PrintSelf(std::ostream &os, Indent indent) const override
void GetDerivative(const TransformParametersType ¶meters, DerivativeType &derivative) const override
typename TFixedImage::PixelType FixedImagePixelType
typename CombinationTransformType::Pointer CombinationTransformPointer
CastFixedImageFilterPointer m_CastFixedImageFilter
typename TransformType::ConstPointer TransformConstPointer
void WriteGradientImagesToFiles() const
itk::Image< FixedImagePixelType, Self::FixedImageDimension > TransformedMovingImageType
typename Optimizer::ScalesType ScalesType
NeighborhoodOperatorImageFilter< FixedGradientImageType, FixedGradientImageType > FixedSobelFilter
ITK_DISALLOW_COPY_AND_MOVE(NormalizedGradientCorrelationImageToImageMetric)
itk::Image< RealType, Self::FixedImageDimension > FixedGradientImageType
itk::Image< unsigned char, Self::FixedImageDimension > MaskImageType
typename MaskImageType::Pointer MaskImageTypePointer
typename TransformType::ScalarType ScalarType
typename CastMovedImageFilterType::Pointer CastMovedImageFilterPointer
typename FixedGradientImageType::PixelType FixedGradientPixelType
void ComputeMeanFixedGradient() const
itk::CastImageFilter< FixedImageType, FixedGradientImageType > CastFixedImageFilterType
void SetTransformParameters(const TransformParametersType ¶meters) const
MeasureType ComputeMeasure(const TransformParametersType ¶meters) const
itkStaticConstMacro(FixedImageDimension, unsigned int, TFixedImage::ImageDimension)
itk::CastImageFilter< TransformedMovingImageType, MovedGradientImageType > CastMovedImageFilterType
itkStaticConstMacro(MovedImageDimension, unsigned int, MovingImageType::ImageDimension)
void ComputeMeanMovedGradient() const
MeasureType GetValue(const TransformParametersType ¶meters) const override
SmartPointer< const Self > ConstPointer
ZeroFluxNeumannBoundaryCondition< MovedGradientImageType > m_MovedBoundCond
~NormalizedGradientCorrelationImageToImageMetric() override=default
CombinationTransformPointer m_CombinationTransform
typename itk::AdvancedCombinationTransform< ScalarType, FixedImageDimension > CombinationTransformType
void GetValueAndDerivative(const TransformParametersType ¶meters, MeasureType &Value, DerivativeType &derivative) const override
typename itk::AdvancedRayCastInterpolateImageFunction< MovingImageType, ScalarType > RayCastInterpolatorType
itk::ResampleImageFilter< MovingImageType, TransformedMovingImageType > TransformMovingImageFilterType
CastMovedImageFilterPointer m_CastMovedImageFilter
typename TMovingImage::PixelType MovedImagePixelType
NormalizedGradientCorrelationImageToImageMetric()
void Initialize() override
typename TransformMovingImageFilterType::Pointer TransformMovingImageFilterPointer