18 #ifndef itkLevelSetMotionRegistrationFunction_h
19 #define itkLevelSetMotionRegistrationFunction_h
54 template <
typename TFixedImage,
typename TMovingImage,
typename TDisplacementField>
75 using typename Superclass::MovingImageType;
76 using typename Superclass::MovingImagePointer;
80 using typename Superclass::FixedImageType;
81 using typename Superclass::FixedImagePointer;
87 using typename Superclass::DisplacementFieldType;
88 using typename Superclass::DisplacementFieldTypePointer;
91 static constexpr
unsigned int ImageDimension = Superclass::ImageDimension;
119 m_MovingImageInterpolator = ptr;
126 return m_MovingImageInterpolator;
134 ComputeGlobalTimeStep(
void * GlobalData)
const override;
143 global->m_SumOfSquaredDifference = 0.0;
144 global->m_NumberOfPixelsProcessed = 0L;
145 global->m_SumOfSquaredChange = 0;
155 ReleaseGlobalDataPointer(
void * gd)
const override;
159 InitializeIteration()
override;
166 ComputeUpdate(
const NeighborhoodType & it,
void * gd,
const FloatOffsetType & offset = FloatOffsetType(0.0))
override;
201 SetIntensityDifferenceThreshold(
double);
204 GetIntensityDifferenceThreshold()
const;
209 SetGradientMagnitudeThreshold(
double);
212 GetGradientMagnitudeThreshold()
const;
217 SetGradientSmoothingStandardDeviations(
double);
220 GetGradientSmoothingStandardDeviations()
const;
226 SetUseImageSpacing(
bool);
229 GetUseImageSpacing()
const;
235 PrintSelf(std::ostream & os,
Indent indent)
const override;
267 double m_GradientMagnitudeThreshold{};
270 double m_IntensityDifferenceThreshold{};
273 double m_GradientSmoothingStandardDeviations{};
278 mutable double m_Metric{};
279 mutable double m_SumOfSquaredDifference{};
281 mutable double m_RMSChange{};
282 mutable double m_SumOfSquaredChange{};
285 mutable std::mutex m_MetricCalculationMutex{};
287 bool m_UseImageSpacing{
true };
291 #ifndef ITK_MANUAL_INSTANTIATION
292 # include "itkLevelSetMotionRegistrationFunction.hxx"