18 #ifndef itkFastSymmetricForcesDemonsRegistrationFunction_h
19 #define itkFastSymmetricForcesDemonsRegistrationFunction_h
46 template <
typename TFixedImage,
typename TMovingImage,
typename TDisplacementField>
66 using typename Superclass::MovingImageType;
67 using typename Superclass::MovingImagePointer;
70 using typename Superclass::FixedImageType;
71 using typename Superclass::FixedImagePointer;
77 using typename Superclass::DisplacementFieldType;
78 using typename Superclass::DisplacementFieldTypePointer;
81 static constexpr
unsigned int ImageDimension = Superclass::ImageDimension;
92 #ifndef ITK_FUTURE_LEGACY_REMOVE
93 using CoordRepType ITK_FUTURE_DEPRECATED(
94 "ITK 6 discourages using `CoordRepType`. Please use `CoordinateType` instead!") =
CoordinateType;
119 m_MovingImageInterpolator = ptr;
120 m_MovingImageWarper->SetInterpolator(ptr);
128 return m_MovingImageInterpolator;
145 global->m_SumOfSquaredDifference = 0.0;
146 global->m_NumberOfPixelsProcessed = 0L;
147 global->m_SumOfSquaredChange = 0;
156 ReleaseGlobalDataPointer(
void * GlobalData)
const override;
160 InitializeIteration()
override;
167 ComputeUpdate(
const NeighborhoodType & neighborhood,
169 const FloatOffsetType & offset = FloatOffsetType(0.0))
override;
181 virtual const double &
192 SetIntensityDifferenceThreshold(
double);
195 GetIntensityDifferenceThreshold()
const;
201 PrintSelf(std::ostream & os,
Indent indent)
const override;
217 double m_Normalizer{};
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 "itkFastSymmetricForcesDemonsRegistrationFunction.hxx"