18 #ifndef itkImageToImageMetricv4_h
19 #define itkImageToImageMetricv4_h
168 template <
typename TFixedImage,
169 typename TMovingImage,
170 typename TVirtualImage = TFixedImage,
171 typename TInternalComputationValueType = double,
172 typename TMetricTraits =
173 DefaultImageToImageMetricTraitsv4<TFixedImage, TMovingImage, TVirtualImage, TInternalComputationValueType>>
176 TMovingImage::ImageDimension,
178 TInternalComputationValueType>
186 TMovingImage::ImageDimension,
188 TInternalComputationValueType>;
201 using typename Superclass::CoordinateRepresentationType;
204 using typename Superclass::ParametersType;
205 using typename Superclass::ParametersValueType;
208 using typename Superclass::GradientSourceEnum;
211 using typename Superclass::DimensionType;
215 using typename Superclass::FixedTransformType;
216 using typename Superclass::FixedTransformPointer;
217 using typename Superclass::FixedInputPointType;
218 using typename Superclass::FixedOutputPointType;
219 using typename Superclass::FixedTransformParametersType;
221 using typename Superclass::MovingTransformType;
222 using typename Superclass::MovingTransformPointer;
223 using typename Superclass::MovingInputPointType;
224 using typename Superclass::MovingOutputPointType;
225 using typename Superclass::MovingTransformParametersType;
227 using typename Superclass::JacobianType;
228 using typename Superclass::FixedTransformJacobianType;
229 using typename Superclass::MovingTransformJacobianType;
252 using typename Superclass::VirtualImagePointer;
253 using typename Superclass::VirtualPixelType;
254 using typename Superclass::VirtualRegionType;
255 using typename Superclass::VirtualSizeType;
256 using typename Superclass::VirtualSpacingType;
258 using typename Superclass::VirtualPointType;
259 using typename Superclass::VirtualDirectionType;
261 using typename Superclass::VirtualIndexType;
262 using typename Superclass::VirtualPointSetType;
263 using typename Superclass::VirtualPointSetPointer;
269 static constexpr DimensionType FixedImageDimension = Superclass::FixedDimension;
270 static constexpr DimensionType MovingImageDimension = Superclass::MovingDimension;
271 static constexpr DimensionType VirtualImageDimension = Superclass::VirtualDimension;
352 using typename Superclass::MeasureType;
355 using typename Superclass::DerivativeType;
360 using typename Superclass::NumberOfParametersType;
366 auto * image = dynamic_cast<FixedImageType *>(const_cast<ObjectType *>(
object));
367 if (image !=
nullptr)
369 this->SetFixedImage(image);
373 itkExceptionMacro(
"Incorrect object type. Should be an image.");
382 auto * image = dynamic_cast<MovingImageType *>(const_cast<ObjectType *>(
object));
383 if (image !=
nullptr)
385 this->SetMovingImage(image);
389 itkExceptionMacro(
"Incorrect object type. Should be an image.");
395 itkSetConstObjectMacro(FixedImage, FixedImageType);
396 itkGetConstObjectMacro(FixedImage, FixedImageType);
399 itkSetConstObjectMacro(MovingImage, MovingImageType);
400 itkGetConstObjectMacro(MovingImage, MovingImageType);
404 itkSetObjectMacro(FixedInterpolator, FixedInterpolatorType);
407 itkGetModifiableObjectMacro(FixedInterpolator, FixedInterpolatorType);
410 itkSetObjectMacro(MovingInterpolator, MovingInterpolatorType);
413 itkGetModifiableObjectMacro(MovingInterpolator, MovingInterpolatorType);
416 #ifndef ITK_FUTURE_LEGACY_REMOVE
418 SetMovingImageMask(MovingImageMaskType *
const arg)
420 const auto *
const constArg = arg;
422 this->SetMovingImageMask(constArg);
425 itkSetConstObjectMacro(MovingImageMask, MovingImageMaskType);
426 itkGetConstObjectMacro(MovingImageMask, MovingImageMaskType);
430 #ifndef ITK_FUTURE_LEGACY_REMOVE
432 SetFixedImageMask(FixedImageMaskType *
const arg)
434 const auto *
const constArg = arg;
436 this->SetFixedImageMask(constArg);
439 itkSetConstObjectMacro(FixedImageMask, FixedImageMaskType);
440 itkGetConstObjectMacro(FixedImageMask, FixedImageMaskType);
446 #ifndef ITK_FUTURE_LEGACY_REMOVE
448 SetFixedSampledPointSet(FixedSampledPointSetType *
const arg)
450 const auto *
const constArg = arg;
452 this->SetFixedSampledPointSet(constArg);
455 itkSetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType);
456 itkGetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType);
460 itkSetObjectMacro(VirtualSampledPointSet, VirtualPointSetType);
461 itkGetConstObjectMacro(VirtualSampledPointSet, VirtualPointSetType);
465 itkSetMacro(UseSampledPointSet,
bool);
466 itkGetConstReferenceMacro(UseSampledPointSet,
bool);
467 itkBooleanMacro(UseSampledPointSet);
472 itkSetMacro(UseVirtualSampledPointSet,
bool);
473 itkGetConstReferenceMacro(UseVirtualSampledPointSet,
bool);
474 itkBooleanMacro(UseVirtualSampledPointSet);
477 #if !defined(ITK_LEGACY_REMOVE)
480 itkLegacyMacro(
virtual void SetUseFixedSampledPointSet(
bool v))
482 this->SetUseSampledPointSet(v);
484 itkLegacyMacro(
virtual bool GetUseFixedSampledPointSet()
const)
486 return this->GetUseSampledPointSet();
488 itkLegacyMacro(
virtual void UseFixedSampledPointSetOn())
490 return this->UseSampledPointSetOn();
492 itkLegacyMacro(
virtual void UseFixedSampledPointSetOff())
494 return this->UseSampledPointSetOff();
501 itkSetObjectMacro(FixedImageGradientFilter, FixedImageGradientFilterType);
502 itkGetModifiableObjectMacro(FixedImageGradientFilter, FixedImageGradientFilterType);
503 itkSetObjectMacro(MovingImageGradientFilter, MovingImageGradientFilterType);
504 itkGetModifiableObjectMacro(MovingImageGradientFilter, MovingImageGradientFilterType);
508 itkSetObjectMacro(FixedImageGradientCalculator, FixedImageGradientCalculatorType);
509 itkGetModifiableObjectMacro(FixedImageGradientCalculator, FixedImageGradientCalculatorType);
510 itkSetObjectMacro(MovingImageGradientCalculator, MovingImageGradientCalculatorType);
511 itkGetModifiableObjectMacro(MovingImageGradientCalculator, MovingImageGradientCalculatorType);
516 itkSetMacro(UseFixedImageGradientFilter,
bool);
517 itkGetConstReferenceMacro(UseFixedImageGradientFilter,
bool);
518 itkBooleanMacro(UseFixedImageGradientFilter);
522 itkSetMacro(UseMovingImageGradientFilter,
bool);
523 itkGetConstReferenceMacro(UseMovingImageGradientFilter,
bool);
524 itkBooleanMacro(UseMovingImageGradientFilter);
531 GetNumberOfWorkUnitsUsed()
const;
539 GetMaximumNumberOfWorkUnits()
const;
542 #if !defined(ITK_LEGACY_REMOVE)
548 itkLegacyMacro(
virtual ThreadIdType GetNumberOfThreadsUsed()
const)
550 return this->GetNumberOfWorkUnitsUsed();
559 itkLegacyMacro(
virtual void SetMaximumNumberOfThreads(
const ThreadIdType count))
561 this->SetMaximumNumberOfWorkUnits(count);
563 itkLegacyMacro(
virtual ThreadIdType GetMaximumNumberOfThreads()
const)
565 return this->GetMaximumNumberOfWorkUnits();
567 #endif // !ITK_LEGACY_REMOVE
584 itkGetModifiableObjectMacro(FixedImageGradientImage, FixedImageGradientImageType);
587 itkGetModifiableObjectMacro(MovingImageGradientImage, MovingImageGradientImageType);
594 GetNumberOfDomainPoints()
const;
609 itkSetMacro(UseFloatingPointCorrection,
bool);
610 itkGetConstReferenceMacro(UseFloatingPointCorrection,
bool);
611 itkBooleanMacro(UseFloatingPointCorrection);
618 itkSetMacro(FloatingPointCorrectionResolution, DerivativeValueType);
619 itkGetConstMacro(FloatingPointCorrectionResolution, DerivativeValueType);
631 Initialize()
override;
634 GetValue()
const override;
637 GetDerivative(DerivativeType &)
const override;
645 GetValueAndDerivative(MeasureType & value, DerivativeType & derivative)
const override;
650 itkGetConstReferenceMacro(NumberOfSkippedFixedSampledPoints,
SizeValueType);
658 using typename Superclass::MetricCategoryType;
664 return MetricCategoryType::IMAGE_METRIC;
669 using FixedImageGradientInterpolatorType =
698 InitializeForIteration()
const;
730 ComputeFixedImageGradientFilterImage();
736 ComputeMovingImageGradientFilterImage()
const;
745 GetValueAndDerivativeExecute()
const;
750 InitializeDefaultFixedImageGradientFilter();
752 InitializeDefaultMovingImageGradientFilter();
756 itkGetConstMacro(ComputeDerivative,
bool);
769 bool m_UseFixedImageGradientFilter{};
770 bool m_UseMovingImageGradientFilter{};
808 VirtualPointSetPointer m_VirtualSampledPointSet{};
811 bool m_UseSampledPointSet{};
815 bool m_UseVirtualSampledPointSet{};
821 PrintSelf(std::ostream & os,
Indent indent)
const override;
826 MapFixedSampledPointSetToVirtual();
833 mappedFixedPoint = this->m_FixedTransform->TransformPoint(virtualPoint);
836 template <
typename TVirtualPo
int>
844 localVirtualPoint.
CastFrom(virtualPoint);
846 mappedFixedPoint = this->m_FixedTransform->TransformPoint(localVirtualPoint);
849 template <
typename TFixedImagePo
int>
852 TFixedImagePoint & mappedFixedPoint)
const
855 localMappedFixedPoint.
CastFrom(mappedFixedPoint);
856 localMappedFixedPoint = this->m_FixedTransform->TransformPoint(virtualPoint);
857 mappedFixedPoint.
CastFrom(localMappedFixedPoint);
860 template <
typename TVirtualPo
int,
typename TFixedImagePo
int>
867 localVirtualPoint.
CastFrom(virtualPoint);
868 localMappedFixedPoint.
CastFrom(mappedFixedPoint);
870 localMappedFixedPoint = this->m_FixedTransform->TransformPoint(localVirtualPoint);
871 mappedFixedPoint.
CastFrom(localMappedFixedPoint);
876 mutable bool m_HaveMadeGetValueWarning{};
883 bool m_UseFloatingPointCorrection{};
889 mutable bool m_ComputeDerivative{};
893 #ifdef ITK_USE_CONCEPT_CHECKING
898 #endif // ITK_USE_CONCEPT_CHECKING
903 #ifndef ITK_MANUAL_INSTANTIATION
904 # include "itkImageToImageMetricv4.hxx"