18 #ifndef itkSymmetricForcesDemonsRegistrationFunction_h
19 #define itkSymmetricForcesDemonsRegistrationFunction_h
61 template <
typename TFixedImage,
typename TMovingImage,
typename TDisplacementField>
81 using typename Superclass::MovingImageType;
82 using typename Superclass::MovingImagePointer;
85 using typename Superclass::FixedImageType;
86 using typename Superclass::FixedImagePointer;
92 using typename Superclass::DisplacementFieldType;
93 using typename Superclass::DisplacementFieldTypePointer;
96 static constexpr
unsigned int ImageDimension = Superclass::ImageDimension;
107 #ifndef ITK_FUTURE_LEGACY_REMOVE
108 using CoordRepType ITK_FUTURE_DEPRECATED(
109 "ITK 6 discourages using `CoordRepType`. Please use `CoordinateType` instead!") =
CoordinateType;
127 m_MovingImageInterpolator = ptr;
134 return m_MovingImageInterpolator;
151 global->m_SumOfSquaredDifference = 0.0;
152 global->m_NumberOfPixelsProcessed = 0L;
153 global->m_SumOfSquaredChange = 0;
162 ReleaseGlobalDataPointer(
void * gd)
const override;
166 InitializeIteration()
override;
173 ComputeUpdate(
const NeighborhoodType & it,
void * gd,
const FloatOffsetType & offset = FloatOffsetType(0.0))
override;
185 virtual const double &
196 SetIntensityDifferenceThreshold(
double);
199 GetIntensityDifferenceThreshold()
const;
205 PrintSelf(std::ostream & os,
Indent indent)
const override;
223 double m_Normalizer{};
232 TimeStepType m_TimeStep{};
235 double m_DenominatorThreshold{};
238 double m_IntensityDifferenceThreshold{};
243 mutable double m_Metric{};
244 mutable double m_SumOfSquaredDifference{};
246 mutable double m_RMSChange{};
247 mutable double m_SumOfSquaredChange{};
250 mutable std::mutex m_MetricCalculationMutex{};
254 #ifndef ITK_MANUAL_INSTANTIATION
255 # include "itkSymmetricForcesDemonsRegistrationFunction.hxx"