go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkPatternIntensityImageToImageMetric.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright UMC Utrecht and contributors
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18#ifndef itkPatternIntensityImageToImageMetric_h
19#define itkPatternIntensityImageToImageMetric_h
20
22
23#include "itkPoint.h"
24#include "itkCastImageFilter.h"
25#include "itkResampleImageFilter.h"
26#include "itkMultiplyImageFilter.h"
27#include "itkSubtractImageFilter.h"
28#include "itkOptimizer.h"
29#include "itkRescaleIntensityImageFilter.h"
32
33namespace itk
34{
35
44template <class TFixedImage, class TMovingImage>
45class ITK_TEMPLATE_EXPORT PatternIntensityImageToImageMetric
46 : public AdvancedImageToImageMetric<TFixedImage, TMovingImage>
47{
48public:
50
54 using Pointer = SmartPointer<Self>;
55 using ConstPointer = SmartPointer<const Self>;
56
58 itkNewMacro(Self);
59
61 itkTypeMacro(PatternIntensityImageToImageMetric, ImageToImageMetric);
62
64 using typename Superclass::CoordinateRepresentationType;
65 using typename Superclass::MovingImageType;
66 using typename Superclass::MovingImagePixelType;
67 using typename Superclass::MovingImagePointer;
68 using typename Superclass::MovingImageConstPointer;
69 using typename Superclass::FixedImageType;
70 using typename Superclass::FixedImageConstPointer;
71 using typename Superclass::FixedImageRegionType;
72 using typename Superclass::TransformType;
73 using ScalarType = typename TransformType::ScalarType;
74 using typename Superclass::TransformPointer;
75 using typename Superclass::InputPointType;
76 using typename Superclass::OutputPointType;
77 using typename Superclass::TransformParametersType;
78 using typename Superclass::TransformJacobianType;
79 using typename Superclass::InterpolatorType;
80 using typename Superclass::InterpolatorPointer;
81 using typename Superclass::RealType;
82 using typename Superclass::GradientPixelType;
83 using typename Superclass::GradientImageType;
84 using typename Superclass::GradientImagePointer;
85 using typename Superclass::FixedImageMaskType;
89 using typename Superclass::MeasureType;
90 using typename Superclass::DerivativeType;
91 using typename Superclass::ParametersType;
94 using typename Superclass::ImageSamplerType;
103 using ScalesType = typename Optimizer::ScalesType;
104
106 itkStaticConstMacro(FixedImageDimension, unsigned int, FixedImageType::ImageDimension);
107
108 using TransformedMovingImageType = itk::Image<FixedImagePixelType, Self::FixedImageDimension>;
110 using CombinationTransformPointer = typename CombinationTransformType::Pointer;
112 using RayCastInterpolatorPointer = typename RayCastInterpolatorType::Pointer;
113 using TransformMovingImageFilterType = itk::ResampleImageFilter<MovingImageType, TransformedMovingImageType>;
114 using TransformMovingImageFilterPointer = typename TransformMovingImageFilterType::Pointer;
116 itk::RescaleIntensityImageFilter<TransformedMovingImageType, TransformedMovingImageType>;
117 using RescaleIntensityImageFilterPointer = typename RescaleIntensityImageFilterType::Pointer;
118
120 itk::SubtractImageFilter<FixedImageType, TransformedMovingImageType, TransformedMovingImageType>;
121 using DifferenceImageFilterPointer = typename DifferenceImageFilterType::Pointer;
123 itk::MultiplyImageFilter<TransformedMovingImageType, TransformedMovingImageType, TransformedMovingImageType>;
124 using MultiplyImageFilterPointer = typename MultiplyImageFilterType::Pointer;
125
127 itkStaticConstMacro(MovingImageDimension, unsigned int, MovingImageType::ImageDimension);
128
130 MeasureType
131 GetValue(const TransformParametersType & parameters) const override;
132
134 void
135 GetDerivative(const TransformParametersType & parameters, DerivativeType & derivative) const override;
136
138 void
139 GetValueAndDerivative(const TransformParametersType & parameters,
140 MeasureType & Value,
141 DerivativeType & Derivative) const override;
142
148 void
149 Initialize() override;
150
152 itkSetMacro(Scales, ScalesType);
153 itkGetConstReferenceMacro(Scales, ScalesType);
154
156 itkSetMacro(NoiseConstant, double);
157 itkGetConstReferenceMacro(NoiseConstant, double);
158
160 itkSetMacro(OptimizeNormalizationFactor, bool);
161 itkGetConstReferenceMacro(OptimizeNormalizationFactor, bool);
162
163protected:
166 void
167 PrintSelf(std::ostream & os, Indent indent) const override;
168
170 MeasureType
172
174 MeasureType
175 ComputePIDiff(const TransformParametersType & parameters, float scalingfactor) const;
176
177private:
178 TransformMovingImageFilterPointer m_TransformMovingImageFilter{ TransformMovingImageFilterType::New() };
179 DifferenceImageFilterPointer m_DifferenceImageFilter{ DifferenceImageFilterType::New() };
180 RescaleIntensityImageFilterPointer m_RescaleImageFilter{ RescaleIntensityImageFilterType::New() };
181 MultiplyImageFilterPointer m_MultiplyImageFilter{ MultiplyImageFilterType::New() };
182 double m_NoiseConstant{ 10000 }; // = sigma * sigma = 100*100 if not specified
183 unsigned int m_NeighborhoodRadius{ 3 };
184 double m_DerivativeDelta{ 0.001 };
185 double m_NormalizationFactor{ 1.0 };
186 double m_Rescalingfactor{ 1.0 };
187 bool m_OptimizeNormalizationFactor{ false };
188 ScalesType m_Scales{};
189 MeasureType m_FixedMeasure{ 0 };
190 CombinationTransformPointer m_CombinationTransform{ CombinationTransformType::New() };
191};
192
193} // end namespace itk
194
195#ifndef ITK_MANUAL_INSTANTIATION
196# include "itkPatternIntensityImageToImageMetric.hxx"
197#endif
198
199#endif // end #ifndef itkPatternIntensityImageToImageMetric_h
This class combines two transforms: an 'initial transform' with a 'current transform'.
An extension of the ITK ImageToImageMetric. It is the intended base class for all elastix metrics.
typename ImageSamplerType::OutputVectorContainerPointer ImageSampleContainerPointer
typename MovingImageType::RegionType MovingImageRegionType
typename FixedImageType::PixelType FixedImagePixelType
typename ImageSamplerType::OutputVectorContainerType ImageSampleContainerType
typename MovingImageType::Pointer MovingImagePointer
ImageMaskSpatialObject< Self::FixedImageDimension > FixedImageMaskType
SmartPointer< MovingImageMaskType > MovingImageMaskPointer
typename MovingImageLimiterType::OutputType MovingImageLimiterOutputType
typename FixedImageLimiterType::OutputType FixedImageLimiterOutputType
SmartPointer< FixedImageMaskType > FixedImageMaskPointer
typename ImageSamplerType::Pointer ImageSamplerPointer
ImageMaskSpatialObject< Self::MovingImageDimension > MovingImageMaskType
Projective interpolation of an image at specified positions.
This class is a base class for any image sampler.
Base class for all ITK limiter function objects.
Computes similarity between two objects to be registered.
itkStaticConstMacro(MovingImageDimension, unsigned int, MovingImageType::ImageDimension)
typename MultiplyImageFilterType::Pointer MultiplyImageFilterPointer
itk::MultiplyImageFilter< TransformedMovingImageType, TransformedMovingImageType, TransformedMovingImageType > MultiplyImageFilterType
MeasureType ComputePIDiff(const TransformParametersType &parameters, float scalingfactor) const
~PatternIntensityImageToImageMetric() override=default
typename RescaleIntensityImageFilterType::Pointer RescaleIntensityImageFilterPointer
void GetValueAndDerivative(const TransformParametersType &parameters, MeasureType &Value, DerivativeType &Derivative) const override
typename CombinationTransformType::Pointer CombinationTransformPointer
typename DifferenceImageFilterType::Pointer DifferenceImageFilterPointer
typename itk::AdvancedRayCastInterpolateImageFunction< MovingImageType, ScalarType > RayCastInterpolatorType
itk::SubtractImageFilter< FixedImageType, TransformedMovingImageType, TransformedMovingImageType > DifferenceImageFilterType
itk::ResampleImageFilter< MovingImageType, TransformedMovingImageType > TransformMovingImageFilterType
typename TransformMovingImageFilterType::Pointer TransformMovingImageFilterPointer
MeasureType GetValue(const TransformParametersType &parameters) const override
ITK_DISALLOW_COPY_AND_MOVE(PatternIntensityImageToImageMetric)
itk::RescaleIntensityImageFilter< TransformedMovingImageType, TransformedMovingImageType > RescaleIntensityImageFilterType
void GetDerivative(const TransformParametersType &parameters, DerivativeType &derivative) const override
itkStaticConstMacro(FixedImageDimension, unsigned int, FixedImageType::ImageDimension)
void PrintSelf(std::ostream &os, Indent indent) const override
itk::Image< FixedImagePixelType, Self::FixedImageDimension > TransformedMovingImageType
typename itk::AdvancedCombinationTransform< ScalarType, FixedImageDimension > CombinationTransformType
typename RayCastInterpolatorType::Pointer RayCastInterpolatorPointer


Generated on 2024-07-17 for elastix by doxygen 1.11.0 (9b424b03c9833626cd435af22a444888fbbb192d) elastix logo