89 using typename Superclass::CoordinateRepresentationType;
90 using typename Superclass::MovingImageType;
91 using typename Superclass::MovingImagePixelType;
93 using typename Superclass::MovingImageConstPointer;
94 using typename Superclass::FixedImageType;
96 using typename Superclass::FixedImageConstPointer;
97 using typename Superclass::FixedImageRegionType;
99 using typename Superclass::TransformPointer;
100 using typename Superclass::InputPointType;
101 using typename Superclass::OutputPointType;
102 using typename Superclass::TransformParametersType;
103 using typename Superclass::TransformJacobianType;
104 using typename Superclass::InterpolatorType;
105 using typename Superclass::InterpolatorPointer;
106 using typename Superclass::RealType;
107 using typename Superclass::GradientPixelType;
108 using typename Superclass::GradientImageType;
109 using typename Superclass::GradientImagePointer;
114 using typename Superclass::MeasureType;
115 using typename Superclass::DerivativeType;
117 using typename Superclass::ParametersType;
160 using NOIFType = NeighborhoodOperatorImageFilter<CoefficientImageType, CoefficientImageType>;
162 using RadiusType =
typename NeighborhoodIteratorType::RadiusType;
174 using DilateFilterType = GrayscaleDilateImageFilter<RigidityImageType, RigidityImageType, StructuringElementType>;
183 GetValue(
const ParametersType & parameters)
const override;
187 GetDerivative(
const ParametersType & parameters, DerivativeType & derivative)
const override;
197 DerivativeType & derivative)
const override;
208 itkSetClampMacro(LinearityConditionWeight,
ScalarType, 0.0, NumericTraits<ScalarType>::max());
212 itkSetClampMacro(OrthonormalityConditionWeight,
ScalarType, 0.0, NumericTraits<ScalarType>::max());
216 itkSetClampMacro(PropernessConditionWeight,
ScalarType, 0.0, NumericTraits<ScalarType>::max());
220 itkSetMacro(UseLinearityCondition,
bool);
223 itkSetMacro(UseOrthonormalityCondition,
bool);
226 itkSetMacro(UsePropernessCondition,
bool);
231 itkSetMacro(CalculateLinearityCondition,
bool);
236 itkSetMacro(CalculateOrthonormalityCondition,
bool);
241 itkSetMacro(CalculatePropernessCondition,
bool);
244 itkGetConstReferenceMacro(LinearityConditionValue, MeasureType);
247 itkGetConstReferenceMacro(OrthonormalityConditionValue, MeasureType);
250 itkGetConstReferenceMacro(PropernessConditionValue, MeasureType);
253 itkGetConstReferenceMacro(LinearityConditionGradientMagnitude, MeasureType);
256 itkGetConstReferenceMacro(OrthonormalityConditionGradientMagnitude, MeasureType);
259 itkGetConstReferenceMacro(PropernessConditionGradientMagnitude, MeasureType);
265 itkSetMacro(DilateRigidityImages,
bool);
268 itkSetClampMacro(DilationRadiusMultiplier,
269 CoordinateRepresentationType,
271 NumericTraits<CoordinateRepresentationType>::max());
280 itkSetMacro(UseFixedRigidityImage,
bool);
283 itkSetMacro(UseMovingRigidityImage,
bool);
297 PrintSelf(std::ostream & os, Indent indent)
const override;
307 const std::string & whichF,
308 const unsigned int WhichDimension,
325 mutable MeasureType m_RigidityPenaltyTermValue{};
326 mutable MeasureType m_LinearityConditionValue{};
327 mutable MeasureType m_OrthonormalityConditionValue{};
328 mutable MeasureType m_PropernessConditionValue{};
329 mutable MeasureType m_LinearityConditionGradientMagnitude{};
330 mutable MeasureType m_OrthonormalityConditionGradientMagnitude{};
331 mutable MeasureType m_PropernessConditionGradientMagnitude{};
333 bool m_UseLinearityCondition{};
334 bool m_UseOrthonormalityCondition{};
335 bool m_UsePropernessCondition{};
336 bool m_CalculateLinearityCondition{};
337 bool m_CalculateOrthonormalityCondition{};
338 bool m_CalculatePropernessCondition{};
341 CoordinateRepresentationType m_DilationRadiusMultiplier{};
342 bool m_DilateRigidityImages{};
343 mutable bool m_RigidityCoefficientImageIsFilled{};
347 std::vector<DilateFilterPointer> m_FixedRigidityImageDilation{};
348 std::vector<DilateFilterPointer> m_MovingRigidityImageDilation{};
351 bool m_UseFixedRigidityImage{};
352 bool m_UseMovingRigidityImage{};