go home Home | Main Page | Topics | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
Loading...
Searching...
No Matches
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
43
44template <typename TFixedImage, typename 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
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::TransformJacobianType;
78 using typename Superclass::InterpolatorType;
79 using typename Superclass::InterpolatorPointer;
80 using typename Superclass::RealType;
81 using typename Superclass::GradientPixelType;
82 using typename Superclass::GradientImageType;
83 using typename Superclass::GradientImagePointer;
84 using typename Superclass::FixedImageMaskType;
88 using typename Superclass::MeasureType;
89 using typename Superclass::DerivativeType;
90 using typename Superclass::ParametersType;
93 using typename Superclass::ImageSamplerType;
102 using ScalesType = typename Optimizer::ScalesType;
103
105 itkStaticConstMacro(FixedImageDimension, unsigned int, FixedImageType::ImageDimension);
106
107 using TransformedMovingImageType = itk::Image<FixedImagePixelType, Self::FixedImageDimension>;
109 using CombinationTransformPointer = typename CombinationTransformType::Pointer;
111 using RayCastInterpolatorPointer = typename RayCastInterpolatorType::Pointer;
112 using TransformMovingImageFilterType = itk::ResampleImageFilter<MovingImageType, TransformedMovingImageType>;
113 using TransformMovingImageFilterPointer = typename TransformMovingImageFilterType::Pointer;
115 itk::RescaleIntensityImageFilter<TransformedMovingImageType, TransformedMovingImageType>;
116 using RescaleIntensityImageFilterPointer = typename RescaleIntensityImageFilterType::Pointer;
117
119 itk::SubtractImageFilter<FixedImageType, TransformedMovingImageType, TransformedMovingImageType>;
120 using DifferenceImageFilterPointer = typename DifferenceImageFilterType::Pointer;
122 itk::MultiplyImageFilter<TransformedMovingImageType, TransformedMovingImageType, TransformedMovingImageType>;
123 using MultiplyImageFilterPointer = typename MultiplyImageFilterType::Pointer;
124
126 itkStaticConstMacro(MovingImageDimension, unsigned int, MovingImageType::ImageDimension);
127
129 MeasureType
130 GetValue(const ParametersType & parameters) const override;
131
133 void
134 GetDerivative(const ParametersType & parameters, DerivativeType & derivative) const override;
135
137 void
138 GetValueAndDerivative(const ParametersType & parameters,
139 MeasureType & Value,
140 DerivativeType & Derivative) const override;
141
147 void
148 Initialize() override;
149
151 itkSetMacro(Scales, ScalesType);
152 itkGetConstReferenceMacro(Scales, ScalesType);
153
155 itkSetMacro(NoiseConstant, double);
156 itkGetConstReferenceMacro(NoiseConstant, double);
157
159 itkSetMacro(OptimizeNormalizationFactor, bool);
160 itkGetConstReferenceMacro(OptimizeNormalizationFactor, bool);
161
162protected:
165 void
166 PrintSelf(std::ostream & os, Indent indent) const override;
167
169 MeasureType
171
173 MeasureType
174 ComputePIDiff(const ParametersType & parameters, float scalingfactor) const;
175
176private:
177 TransformMovingImageFilterPointer m_TransformMovingImageFilter{ TransformMovingImageFilterType::New() };
178 DifferenceImageFilterPointer m_DifferenceImageFilter{ DifferenceImageFilterType::New() };
179 RescaleIntensityImageFilterPointer m_RescaleImageFilter{ RescaleIntensityImageFilterType::New() };
180 MultiplyImageFilterPointer m_MultiplyImageFilter{ MultiplyImageFilterType::New() };
181 double m_NoiseConstant{ 10000 }; // = sigma * sigma = 100*100 if not specified
182 unsigned int m_NeighborhoodRadius{ 3 };
183 double m_DerivativeDelta{ 0.001 };
185 double m_Rescalingfactor{ 1.0 };
188 MeasureType m_FixedMeasure{ 0 };
189 CombinationTransformPointer m_CombinationTransform{ CombinationTransformType::New() };
190};
191
192} // end namespace itk
193
194#ifndef ITK_MANUAL_INSTANTIATION
195# include "itkPatternIntensityImageToImageMetric.hxx"
196#endif
197
198#endif // end #ifndef itkPatternIntensityImageToImageMetric_h
This class combines two transforms: an 'initial transform' with a 'current transform'.
typename ImageSamplerType::OutputVectorContainerPointer ImageSampleContainerPointer
typename MovingImageType::RegionType MovingImageRegionType
FixedArray< double, Self::MovingImageDimension > MovingImageDerivativeScalesType
typename FixedImageType::PixelType FixedImagePixelType
typename ImageSamplerType::OutputVectorContainerType ImageSampleContainerType
typename MovingImageType::Pointer MovingImagePointer
ImageMaskSpatialObject< Self::FixedImageDimension > FixedImageMaskType
SmartPointer< MovingImageMaskType > MovingImageMaskPointer
LimiterFunctionBase< RealType, FixedImageDimension > FixedImageLimiterType
ImageSamplerBase< FixedImageType > ImageSamplerType
LimiterFunctionBase< RealType, MovingImageDimension > MovingImageLimiterType
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.
itkStaticConstMacro(MovingImageDimension, unsigned int, MovingImageType::ImageDimension)
void GetDerivative(const ParametersType &parameters, DerivativeType &derivative) const override
itk::MultiplyImageFilter< TransformedMovingImageType, TransformedMovingImageType, TransformedMovingImageType > MultiplyImageFilterType
void GetValueAndDerivative(const ParametersType &parameters, MeasureType &Value, DerivativeType &Derivative) const override
~PatternIntensityImageToImageMetric() override=default
itkOverrideGetNameOfClassMacro(PatternIntensityImageToImageMetric)
MeasureType GetValue(const ParametersType &parameters) const override
MeasureType ComputePIDiff(const ParametersType &parameters, float scalingfactor) const
ITK_DISALLOW_COPY_AND_MOVE(PatternIntensityImageToImageMetric)
itkStaticConstMacro(FixedImageDimension, unsigned int, FixedImageType::ImageDimension)
void PrintSelf(std::ostream &os, Indent indent) const override
AdvancedImageToImageMetric< typename MetricBase< TElastix >::FixedImageType, typename MetricBase< TElastix >::MovingImageType > Superclass


Generated on 1774142652 for elastix by doxygen 1.15.0 elastix logo