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;
123 m_MovingImageInterpolator = ptr;
130 return m_MovingImageInterpolator;
147 global->m_SumOfSquaredDifference = 0.0;
148 global->m_NumberOfPixelsProcessed = 0L;
149 global->m_SumOfSquaredChange = 0;
158 ReleaseGlobalDataPointer(
void * gd)
const override;
162 InitializeIteration()
override;
169 ComputeUpdate(
const NeighborhoodType & it,
void * gd,
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;
219 double m_Normalizer{};
228 TimeStepType m_TimeStep{};
231 double m_DenominatorThreshold{};
234 double m_IntensityDifferenceThreshold{};
239 mutable double m_Metric{};
240 mutable double m_SumOfSquaredDifference{};
242 mutable double m_RMSChange{};
243 mutable double m_SumOfSquaredChange{};
246 mutable std::mutex m_MetricCalculationMutex{};
250 #ifndef ITK_MANUAL_INSTANTIATION
251 # include "itkSymmetricForcesDemonsRegistrationFunction.hxx"