template<typename TFixedImage, typename TMovingImage, typename TVirtualImage = TFixedImage, typename TInternalComputationValueType = double, typename TMetricTraits = DefaultImageToImageMetricTraitsv4<TFixedImage, TMovingImage, TVirtualImage, TInternalComputationValueType>>
class itk::CorrelationImageToImageMetricv4< TFixedImage, TMovingImage, TVirtualImage, TInternalComputationValueType, TMetricTraits >
Class implementing normalized cross correlation image metric.
Definition of the normalized cross correlation metric used here:
negative square of normalized cross correlation
\[ C(f, m) = -\frac{<f-\bar{f}, m-\bar{m} >^2}{|f-\bar{f}|^2 |m-\bar{m}|^2} \]
in which, f, m are the vectors of image pixel intensities, \(\bar{f}\) and \(\bar{m}\) are the mean values of f and m. <,> denotes inner product, \(|\cdot|\) denotes the 2-norm of the vector. The minus sign makes the metric to optimize towards its minimal value. Note that this uses the square of the mathematical notion of normalized cross correlation to avoid the square root computation in practice.
Moving image (m) is a function of the parameters (p) of the moving transforms. So \( C(f, m) = C(f, m(p)) \) GetValueAndDerivative will return the value as \( C(f,m) \) and the derivative as
\[ \frac{d}{dp} C = 2 \frac{<f1, m1>}{|f1|^2 |m1|^2} * ( <f1, \frac{dm}{dp}> - \frac{<f1, m1>}{|m1|^2} < m1, \frac{dm}{dp} > ) \]
in which, \( f1 = f - \bar{f} \), \( m1 = m - \bar{m} \) (Note: there should be a minus sign of \( \frac{d}{dp} \) mathematically, which is not in the implementation to match the requirement of the metricv4 optimization framework.
See CorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ProcessPoint for algorithm implementation.
This metric only works with the global transform. It throws an exception if the transform has local support.
- Examples
- Examples/RegistrationITKv4/DeformableRegistration4.cxx.
Definition at line 78 of file itkCorrelationImageToImageMetricv4.h.
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = CorrelationImageToImageMetricv4 |
|
using | Superclass = ImageToImageMetricv4< TFixedImage, TMovingImage, TVirtualImage, TInternalComputationValueType, TMetricTraits > |
|
using | VirtualImageType = typename Superclass::VirtualImageType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DefaultFixedImageGradientCalculator = typename MetricTraits::DefaultFixedImageGradientCalculator |
|
using | DefaultFixedImageGradientFilter = typename MetricTraits::DefaultFixedImageGradientFilter |
|
using | DefaultMovingImageGradientCalculator = typename MetricTraits::DefaultMovingImageGradientCalculator |
|
using | DefaultMovingImageGradientFilter = typename MetricTraits::DefaultMovingImageGradientFilter |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | FixedGradientPixelType = typename MetricTraits::FixedGradientPixelType |
|
using | FixedImageComponentGradientType = CovariantVector< typename FixedImageGradientType::ValueType, FixedImageDimension > |
|
using | FixedImageConstPointer = typename FixedImageType::ConstPointer |
|
using | FixedImageGradientCalculatorPointer = typename FixedImageGradientCalculatorType::Pointer |
|
using | FixedImageGradientCalculatorType = typename MetricTraits::FixedImageGradientCalculatorType |
|
using | FixedImageGradientFilterPointer = typename FixedImageGradientFilterType::Pointer |
|
using | FixedImageGradientFilterType = typename MetricTraits::FixedImageGradientFilterType |
|
using | FixedImageGradientImagePointer = typename FixedImageGradientImageType::Pointer |
|
using | FixedImageGradientImageType = typename MetricTraits::FixedImageGradientImageType |
|
using | FixedImageGradientType = typename MetricTraits::FixedImageGradientType |
|
using | FixedImageIndexType = typename FixedImageType::IndexType |
|
using | FixedImageMaskConstPointer = typename FixedImageMaskType::ConstPointer |
|
using | FixedImageMaskPointer = typename FixedImageMaskType::Pointer |
|
using | FixedImageMaskType = SpatialObject< Self::FixedImageDimension > |
|
using | FixedImagePixelType = typename FixedImageType::PixelType |
|
using | FixedImagePointer = typename FixedImageType::Pointer |
|
using | FixedImagePointType = typename FixedImageType::PointType |
|
using | FixedImageType = TFixedImage |
|
using | FixedInterpolatorPointer = typename FixedInterpolatorType::Pointer |
|
using | FixedInterpolatorType = InterpolateImageFunction< FixedImageType, CoordinateRepresentationType > |
|
using | FixedPixelType = FixedImagePixelType |
|
using | FixedRealType = typename MetricTraits::FixedRealType |
|
using | FixedSampledPointSetConstPointer = typename FixedSampledPointSetType::ConstPointer |
|
using | FixedSampledPointSetPointer = typename FixedSampledPointSetType::Pointer |
|
using | FixedSampledPointSetType = PointSet< typename FixedImageType::PixelType, Self::FixedImageDimension > |
|
using | FixedScalarRealType = typename NumericTraits< FixedRealType >::ScalarRealType |
|
using | ImageDimensionType = typename Superclass::DimensionType |
|
using | InternalComputationValueType = TInternalComputationValueType |
|
using | MetricTraits = TMetricTraits |
|
using | MovingGradientPixelType = typename MetricTraits::MovingGradientPixelType |
|
using | MovingImageComponentGradientType = CovariantVector< typename MovingImageGradientType::ValueType, MovingImageDimension > |
|
using | MovingImageConstPointer = typename MovingImageType::ConstPointer |
|
using | MovingImageGradientCalculatorPointer = typename MovingImageGradientCalculatorType::Pointer |
|
using | MovingImageGradientCalculatorType = typename MetricTraits::MovingImageGradientCalculatorType |
|
using | MovingImageGradientFilterPointer = typename MovingImageGradientFilterType::Pointer |
|
using | MovingImageGradientFilterType = typename MetricTraits::MovingImageGradientFilterType |
|
using | MovingImageGradientImagePointer = typename MovingImageGradientImageType::Pointer |
|
using | MovingImageGradientImageType = typename MetricTraits::MovingImageGradientImageType |
|
using | MovingImageGradientType = typename MetricTraits::MovingImageGradientType |
|
using | MovingImageIndexType = typename MovingImageType::IndexType |
|
using | MovingImageMaskConstPointer = typename MovingImageMaskType::ConstPointer |
|
using | MovingImageMaskPointer = typename MovingImageMaskType::Pointer |
|
using | MovingImageMaskType = SpatialObject< Self::MovingImageDimension > |
|
using | MovingImagePixelType = typename MovingImageType::PixelType |
|
using | MovingImagePointer = typename MovingImageType::Pointer |
|
using | MovingImagePointType = typename MovingImageType::PointType |
|
using | MovingImageRegionType = typename MovingImageType::RegionType |
|
using | MovingImageType = TMovingImage |
|
using | MovingInterpolatorPointer = typename MovingInterpolatorType::Pointer |
|
using | MovingInterpolatorType = InterpolateImageFunction< MovingImageType, CoordinateRepresentationType > |
|
using | MovingPixelType = MovingImagePixelType |
|
using | MovingRealType = typename MetricTraits::MovingRealType |
|
using | MovingScalarRealType = typename NumericTraits< MovingRealType >::ScalarRealType |
|
using | ObjectType = typename Superclass::ObjectType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ImageToImageMetricv4 |
|
using | Superclass = ObjectToObjectMetric< TFixedImage::ImageDimension, TMovingImage::ImageDimension, TVirtualImage, TInternalComputationValueType > |
|
using | VirtualImageComponentGradientType = CovariantVector< typename VirtualImageGradientType::ValueType, VirtualImageDimension > |
|
using | VirtualImageGradientType = typename MetricTraits::VirtualImageGradientType |
|
using | VirtualImageType = typename Superclass::VirtualImageType |
|
using | VirtualOriginType = typename Superclass::VirtualPointType |
|
using | VirtualRadiusType = typename Superclass::VirtualSizeType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordinateRepresentationType = TInternalComputationValueType |
|
using | DimensionType = SizeValueType |
|
using | FixedInputPointType = typename FixedTransformType::InputPointType |
|
using | FixedOutputPointType = typename FixedTransformType::OutputPointType |
|
using | FixedTransformJacobianType = typename FixedTransformType::JacobianType |
|
using | FixedTransformParametersType = typename FixedTransformType::ParametersType |
|
using | FixedTransformPointer = typename FixedTransformType::Pointer |
|
using | FixedTransformType = Transform< TInternalComputationValueType, TVirtualImage::ImageDimension, TFixedDimension > |
|
using | InternalComputationValueType = TInternalComputationValueType |
|
using | JacobianType = typename FixedTransformType::JacobianType |
|
using | MetricCategoryType = typename Superclass::MetricCategoryEnum |
|
using | MovingDisplacementFieldTransformType = DisplacementFieldTransform< CoordinateRepresentationType, Self::MovingDimension > |
|
using | MovingInputPointType = typename MovingTransformType::InputPointType |
|
using | MovingOutputPointType = typename MovingTransformType::OutputPointType |
|
using | MovingTransformJacobianType = typename MovingTransformType::JacobianType |
|
using | MovingTransformParametersType = typename MovingTransformType::ParametersType |
|
using | MovingTransformPointer = typename MovingTransformType::Pointer |
|
using | MovingTransformType = Transform< TInternalComputationValueType, TVirtualImage::ImageDimension, TMovingDimension > |
|
using | ObjectType = typename Superclass::Object |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ObjectToObjectMetric |
|
using | Superclass = ObjectToObjectMetricBaseTemplate< TInternalComputationValueType > |
|
using | VirtualDirectionType = typename VirtualImageType::DirectionType |
|
using | VirtualImageConstPointer = typename VirtualImageType::ConstPointer |
|
using | VirtualImagePointer = typename VirtualImageType::Pointer |
|
using | VirtualImageType = TVirtualImage |
|
using | VirtualIndexType = typename VirtualImageType::IndexType |
|
using | VirtualOriginType = typename VirtualImageType::PointType |
|
using | VirtualPixelType = typename VirtualImageType::PixelType |
|
using | VirtualPointSetPointer = typename VirtualPointSetType::Pointer |
|
using | VirtualPointSetType = PointSet< VirtualPixelType, Self::VirtualDimension > |
|
using | VirtualPointType = typename VirtualImageType::PointType |
|
using | VirtualRadiusType = typename VirtualImageType::SizeType |
|
using | VirtualRegionType = typename VirtualImageType::RegionType |
|
using | VirtualSizeType = typename VirtualRegionType::SizeType |
|
using | VirtualSpacingType = typename VirtualImageType::SpacingType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordinateRepresentationType = TInternalComputationValueType |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | GradientSourceEnum = itk::ObjectToObjectMetricBaseTemplateEnums::GradientSource |
|
using | MetricCategoryEnum = itk::ObjectToObjectMetricBaseTemplateEnums::MetricCategory |
|
using | NumberOfParametersType = unsigned int |
|
using | ObjectConstPointer = typename ObjectType::ConstPointer |
|
using | ObjectType = Object |
|
using | ParametersValueType = TInternalComputationValueType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ObjectToObjectMetricBaseTemplate |
|
using | Superclass = SingleValuedCostFunctionv4Template< TInternalComputationValueType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DerivativeType = Array< TInternalComputationValueType > |
|
using | MeasureType = TInternalComputationValueType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = SingleValuedCostFunctionv4Template |
|
using | Superclass = CostFunctionTemplate< TInternalComputationValueType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | ParametersType = OptimizerParameters< TInternalComputationValueType > |
|
using | ParametersValueType = TInternalComputationValueType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = CostFunctionTemplate |
|
using | Superclass = Object |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = Object |
|
using | Superclass = LightObject |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = LightObject |
|
|
const char * | GetNameOfClass () const override |
|
virtual void | FinalizeThread (const ThreadIdType) |
|
void | GetDerivative (DerivativeType &) const override |
|
virtual const FixedImageType * | GetFixedImage () const |
|
MetricCategoryType | GetMetricCategory () const override |
|
virtual FixedImageGradientImageType * | GetModifiableFixedImageGradientImage () |
|
virtual FixedInterpolatorType * | GetModifiableFixedInterpolator () |
|
virtual MovingImageGradientImageType * | GetModifiableMovingImageGradientImage () |
|
virtual MovingInterpolatorType * | GetModifiableMovingInterpolator () |
|
const char * | GetNameOfClass () const override |
|
SizeValueType | GetNumberOfDomainPoints () const |
|
virtual const SizeValueType & | GetNumberOfSkippedFixedSampledPoints () const |
|
virtual ThreadIdType | GetNumberOfWorkUnitsUsed () const |
|
MeasureType | GetValue () const override |
|
void | GetValueAndDerivative (MeasureType &value, DerivativeType &derivative) const override |
|
void | Initialize () override |
|
virtual void | SetFixedImage (const FixedImageType *_arg) |
|
virtual void | SetFixedInterpolator (FixedInterpolatorType *_arg) |
|
virtual void | SetMovingInterpolator (MovingInterpolatorType *_arg) |
|
bool | SupportsArbitraryVirtualDomainSamples () const override |
|
void | SetFixedObject (const ObjectType *object) override |
|
void | SetMovingObject (const ObjectType *object) override |
|
virtual void | SetMovingImage (const MovingImageType *_arg) |
|
virtual const MovingImageType * | GetMovingImage () const |
|
virtual void | SetMovingImageMask (const MovingImageMaskType *_arg) |
|
virtual const MovingImageMaskType * | GetMovingImageMask () const |
|
virtual void | SetFixedImageMask (const FixedImageMaskType *_arg) |
|
virtual const FixedImageMaskType * | GetFixedImageMask () const |
|
virtual void | SetFixedSampledPointSet (const FixedSampledPointSetType *_arg) |
|
virtual const FixedSampledPointSetType * | GetFixedSampledPointSet () const |
|
virtual void | SetVirtualSampledPointSet (VirtualPointSetType *_arg) |
|
virtual const VirtualPointSetType * | GetVirtualSampledPointSet () const |
|
virtual void | SetUseSampledPointSet (bool _arg) |
|
virtual const bool & | GetUseSampledPointSet () const |
|
virtual void | UseSampledPointSetOn () |
|
virtual void | SetUseVirtualSampledPointSet (bool _arg) |
|
virtual const bool & | GetUseVirtualSampledPointSet () const |
|
virtual void | UseVirtualSampledPointSetOn () |
|
virtual void | SetFixedImageGradientFilter (FixedImageGradientFilterType *_arg) |
|
virtual FixedImageGradientFilterType * | GetModifiableFixedImageGradientFilter () |
|
virtual void | SetMovingImageGradientFilter (MovingImageGradientFilterType *_arg) |
|
virtual MovingImageGradientFilterType * | GetModifiableMovingImageGradientFilter () |
|
virtual void | SetFixedImageGradientCalculator (FixedImageGradientCalculatorType *_arg) |
|
virtual FixedImageGradientCalculatorType * | GetModifiableFixedImageGradientCalculator () |
|
virtual void | SetMovingImageGradientCalculator (MovingImageGradientCalculatorType *_arg) |
|
virtual MovingImageGradientCalculatorType * | GetModifiableMovingImageGradientCalculator () |
|
virtual void | SetUseFixedImageGradientFilter (bool _arg) |
|
virtual const bool & | GetUseFixedImageGradientFilter () const |
|
virtual void | UseFixedImageGradientFilterOn () |
|
virtual void | SetUseMovingImageGradientFilter (bool _arg) |
|
virtual const bool & | GetUseMovingImageGradientFilter () const |
|
virtual void | UseMovingImageGradientFilterOn () |
|
virtual void | SetMaximumNumberOfWorkUnits (const ThreadIdType number) |
|
virtual ThreadIdType | GetMaximumNumberOfWorkUnits () const |
|
virtual void | SetUseFloatingPointCorrection (bool _arg) |
|
virtual const bool & | GetUseFloatingPointCorrection () const |
|
virtual void | UseFloatingPointCorrectionOn () |
|
virtual void | SetFloatingPointCorrectionResolution (DerivativeValueType _arg) |
|
virtual DerivativeValueType | GetFloatingPointCorrectionResolution () const |
|
OffsetValueType | ComputeParameterOffsetFromVirtualIndex (const VirtualIndexType &index, const NumberOfParametersType &numberOfLocalParameters) const |
|
OffsetValueType | ComputeParameterOffsetFromVirtualPoint (const VirtualPointType &point, const NumberOfParametersType &numberOfLocalParameters) const |
|
MetricCategoryType | GetMetricCategory () const override |
|
virtual FixedTransformType * | GetModifiableFixedTransform () |
|
virtual MovingTransformType * | GetModifiableMovingTransform () |
|
virtual VirtualImageType * | GetModifiableVirtualImage () |
|
const char * | GetNameOfClass () const override |
|
NumberOfParametersType | GetNumberOfLocalParameters () const override |
|
NumberOfParametersType | GetNumberOfParameters () const override |
|
virtual SizeValueType | GetNumberOfValidPoints () const |
|
const ParametersType & | GetParameters () const override |
|
const MovingTransformType * | GetTransform () |
|
VirtualDirectionType | GetVirtualDirection () const |
|
virtual const TimeStamp & | GetVirtualDomainTimeStamp () const |
|
VirtualOriginType | GetVirtualOrigin () const |
|
const VirtualRegionType & | GetVirtualRegion () const |
|
VirtualSpacingType | GetVirtualSpacing () const |
|
bool | HasLocalSupport () const override |
|
void | Initialize () override |
|
virtual void | SetFixedTransform (FixedTransformType *_arg) |
|
virtual void | SetMovingTransform (MovingTransformType *_arg) |
|
void | SetParameters (ParametersType ¶ms) override |
|
void | SetTransform (MovingTransformType *transform) |
|
void | SetVirtualDomain (const VirtualSpacingType &spacing, const VirtualOriginType &origin, const VirtualDirectionType &direction, const VirtualRegionType ®ion) |
|
void | SetVirtualDomainFromImage (const VirtualImageType *virtualImage) |
|
void | UpdateTransformParameters (const DerivativeType &derivative, TInternalComputationValueType factor) override |
|
bool | IsInsideVirtualDomain (const VirtualPointType &point) const |
|
bool | IsInsideVirtualDomain (const VirtualIndexType &index) const |
|
MeasureType | GetCurrentValue () const |
|
virtual GradientSourceEnum | GetGradientSource () const |
|
bool | GetGradientSourceIncludesFixed () const |
|
bool | GetGradientSourceIncludesMoving () const |
|
virtual void | SetGradientSource (GradientSourceEnum _arg) |
|
virtual const ObjectType * | GetFixedObject () const |
|
virtual const ObjectType * | GetMovingObject () const |
|
unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
|
unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
|
LightObject::Pointer | CreateAnother () const override |
|
virtual void | DebugOff () const |
|
virtual void | DebugOn () const |
|
Command * | GetCommand (unsigned long tag) |
|
bool | GetDebug () const |
|
MetaDataDictionary & | GetMetaDataDictionary () |
|
const MetaDataDictionary & | GetMetaDataDictionary () const |
|
virtual ModifiedTimeType | GetMTime () const |
|
virtual const TimeStamp & | GetTimeStamp () const |
|
bool | HasObserver (const EventObject &event) const |
|
void | InvokeEvent (const EventObject &) |
|
void | InvokeEvent (const EventObject &) const |
|
virtual void | Modified () const |
|
void | Register () const override |
|
void | RemoveAllObservers () |
|
void | RemoveObserver (unsigned long tag) const |
|
void | SetDebug (bool debugFlag) const |
|
void | SetReferenceCount (int) override |
|
void | UnRegister () const noexcept override |
|
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
|
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
|
virtual void | SetObjectName (std::string _arg) |
|
virtual const std::string & | GetObjectName () const |
|
Pointer | Clone () const |
|
virtual void | Delete () |
|
virtual int | GetReferenceCount () const |
|
void | Print (std::ostream &os, Indent indent=0) const |
|
|
| CorrelationImageToImageMetricv4 () |
|
void | InitializeForIteration () const override |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~CorrelationImageToImageMetricv4 () override=default |
|
virtual void | ComputeFixedImageGradientAtPoint (const FixedImagePointType &mappedPoint, FixedImageGradientType &gradient) const |
|
virtual void | ComputeFixedImageGradientFilterImage () |
|
virtual void | ComputeMovingImageGradientAtPoint (const MovingImagePointType &mappedPoint, MovingImageGradientType &gradient) const |
|
virtual void | ComputeMovingImageGradientFilterImage () const |
|
virtual bool | GetComputeDerivative () const |
|
virtual void | GetValueAndDerivativeExecute () const |
|
| ImageToImageMetricv4 () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
bool | TransformAndEvaluateFixedPoint (const VirtualPointType &virtualPoint, FixedImagePointType &mappedFixedPoint, FixedImagePixelType &mappedFixedPixelValue) const |
|
bool | TransformAndEvaluateMovingPoint (const VirtualPointType &virtualPoint, MovingImagePointType &mappedMovingPoint, MovingImagePixelType &mappedMovingPixelValue) const |
|
| ~ImageToImageMetricv4 () override=default |
|
virtual void | InitializeDefaultFixedImageGradientFilter () |
|
virtual void | InitializeDefaultMovingImageGradientFilter () |
|
const MovingDisplacementFieldTransformType * | GetMovingDisplacementFieldTransform () const |
|
| ObjectToObjectMetric () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
bool | TransformPhysicalPointToVirtualIndex (const VirtualPointType &, VirtualIndexType &) const |
|
void | TransformVirtualIndexToPhysicalPoint (const VirtualIndexType &, VirtualPointType &) const |
|
virtual void | VerifyDisplacementFieldSizeAndPhysicalSpace () |
|
bool | VerifyNumberOfValidPoints (MeasureType &value, DerivativeType &derivative) const |
|
| ~ObjectToObjectMetric () override=default |
|
| ObjectToObjectMetricBaseTemplate () |
|
| ~ObjectToObjectMetricBaseTemplate () override=default |
|
| SingleValuedCostFunctionv4Template ()=default |
|
| ~SingleValuedCostFunctionv4Template () override=default |
|
| CostFunctionTemplate ()=default |
|
| ~CostFunctionTemplate () override=default |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
| ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|