template<class TFixedImage, class TMovingImage>
class itk::ParzenWindowNormalizedMutualInformationImageToImageMetric< TFixedImage, TMovingImage >
Computes the normalized mutual information between two images to be registered using a method based on Thevenaz&Unser [3].
ParzenWindowNormalizedMutualInformationImageToImageMetric computes the normalized mutual information between a fixed and moving image to be registered. The calculations are based on the method of Mattes et al [1,2] and Thevenaz&Unser [3], where the probability density distribution are estimated using Parzen histograms. The expression for the derivative is derived following [3].
Construction of the PDFs is implemented in the superclass ParzenWindowHistogramImageToImageMetric.
This implementation of the NormalizedMutualInformation is based on the AdvancedImageToImageMetric, which means that:
- It uses the ImageSampler-framework
- It makes use of the compact support of B-splines, in case of B-spline transforms.
- Image derivatives are computed using either the B-spline interpolator's implementation or by nearest neighbor interpolation of a precomputed central difference image.
- A minimum number of samples that should map within the moving image (mask) can be specified.
Notes:
- This class returns the negative normalized mutual information value.
- This class in not thread safe due the private data structures used to the store the marginal and joint pdfs.
References:
[1] "Nonrigid multimodality image registration"
D. Mattes, D. R. Haynor, H. Vesselle, T. Lewellen and W. Eubank
Medical Imaging 2001: Image Processing, 2001, pp. 1609-1620.
[2] "PET-CT Image Registration in the Chest Using Free-form Deformations"
D. Mattes, D. R. Haynor, H. Vesselle, T. Lewellen and W. Eubank
IEEE Transactions in Medical Imaging. To Appear.
[3] "Optimization of Mutual Information for MultiResolution Image
Registration"
P. Thevenaz and M. Unser
IEEE Transactions in Image Processing, 9(12) December 2000.
- See also
- ParzenWindowHistogramImageToImageMetric
Definition at line 72 of file itkParzenWindowNormalizedMutualInformationImageToImageMetric.h.
|
using | ConstPointer = SmartPointer<const Self> |
|
using | FixedImageLimiterOutputType |
|
using | FixedImageLimiterType |
|
using | FixedImageMaskPointer |
|
using | FixedImageMaskType |
|
using | FixedImagePixelType |
|
using | ImageSampleContainerPointer |
|
using | ImageSampleContainerType |
|
using | ImageSamplerPointer |
|
using | ImageSamplerType |
|
using | MovingImageDerivativeScalesType |
|
using | MovingImageLimiterOutputType |
|
using | MovingImageLimiterType |
|
using | MovingImageMaskPointer |
|
using | MovingImageMaskType |
|
using | MovingImageRegionType |
|
using | Pointer = SmartPointer<Self> |
|
using | Self = ParzenWindowNormalizedMutualInformationImageToImageMetric |
|
using | Superclass = ParzenWindowHistogramImageToImageMetric<TFixedImage, TMovingImage> |
|
using | ConstPointer = SmartPointer<const Self> |
|
using | DerivativeValueType |
|
using | FixedImageLimiterOutputType |
|
using | FixedImageLimiterType |
|
using | FixedImageMaskPointer |
|
using | FixedImageMaskType |
|
using | FixedImagePixelType |
|
using | ImageSampleContainerPointer |
|
using | ImageSampleContainerType |
|
using | ImageSamplerPointer |
|
using | ImageSamplerType |
|
using | MovingImageDerivativeScalesType |
|
using | MovingImageLimiterOutputType |
|
using | MovingImageLimiterType |
|
using | MovingImageMaskPointer |
|
using | MovingImageMaskType |
|
using | MovingImageRegionType |
|
using | Pointer = SmartPointer<Self> |
|
using | Self = ParzenWindowHistogramImageToImageMetric |
|
using | Superclass = AdvancedImageToImageMetric<TFixedImage, TMovingImage> |
|
using | ThreadInfoType |
|
using | AdvancedTransformType = AdvancedTransform<ScalarType, FixedImageDimension, MovingImageDimension> |
|
using | BSplineOrder1TransformPointer = typename BSplineOrder1TransformType::Pointer |
|
using | BSplineOrder1TransformType = AdvancedBSplineDeformableTransform<ScalarType, FixedImageDimension, 1> |
|
using | BSplineOrder2TransformPointer = typename BSplineOrder2TransformType::Pointer |
|
using | BSplineOrder2TransformType = AdvancedBSplineDeformableTransform<ScalarType, FixedImageDimension, 2> |
|
using | BSplineOrder3TransformPointer = typename BSplineOrder3TransformType::Pointer |
|
using | BSplineOrder3TransformType = AdvancedBSplineDeformableTransform<ScalarType, FixedImageDimension, 3> |
|
using | CombinationTransformType = AdvancedCombinationTransform<ScalarType, FixedImageDimension> |
|
using | ConstPointer = SmartPointer<const Self> |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | FixedImageLimiterOutputType = typename FixedImageLimiterType::OutputType |
|
using | FixedImageLimiterPointer = typename FixedImageLimiterType::Pointer |
|
using | FixedImageLimiterType = LimiterFunctionBase<RealType, FixedImageDimension> |
|
using | FixedImageMaskConstPointer = SmartPointer<const FixedImageMaskType> |
|
using | FixedImageMaskPointer = SmartPointer<FixedImageMaskType> |
|
using | FixedImageMaskType = ImageMaskSpatialObject<Self::FixedImageDimension> |
|
using | FixedImagePixelType = typename FixedImageType::PixelType |
|
using | FixedImagePointer = typename FixedImageType::Pointer |
|
using | ImageSampleContainerPointer = typename ImageSamplerType::OutputVectorContainerPointer |
|
using | ImageSampleContainerType = typename ImageSamplerType::OutputVectorContainerType |
|
using | ImageSamplerPointer = typename ImageSamplerType::Pointer |
|
using | ImageSamplerType = ImageSamplerBase<FixedImageType> |
|
using | MovingImageDerivativeScalesType = FixedArray<double, Self::MovingImageDimension> |
|
using | MovingImageLimiterOutputType = typename MovingImageLimiterType::OutputType |
|
using | MovingImageLimiterPointer = typename MovingImageLimiterType::Pointer |
|
using | MovingImageLimiterType = LimiterFunctionBase<RealType, MovingImageDimension> |
|
using | MovingImageMaskConstPointer = SmartPointer<const MovingImageMaskType> |
|
using | MovingImageMaskPointer = SmartPointer<MovingImageMaskType> |
|
using | MovingImageMaskType = ImageMaskSpatialObject<Self::MovingImageDimension> |
|
using | MovingImagePointer = typename MovingImageType::Pointer |
|
using | MovingImageRegionType = typename MovingImageType::RegionType |
|
using | NumberOfParametersType = typename AdvancedTransformType::NumberOfParametersType |
|
using | Pointer = SmartPointer<Self> |
|
using | ScalarType = typename TransformType::ScalarType |
|
using | Self = AdvancedImageToImageMetric |
|
using | Superclass = ImageToImageMetric<TFixedImage, TMovingImage> |
|
using | ThreadInfoType = MultiThreaderBase::WorkUnitInfo |
|
|
virtual const char * | GetClassName () const |
|
MeasureType | GetValue (const ParametersType ¶meters) const override |
|
void | GetValueAndDerivative (const ParametersType ¶meters, MeasureType &Value, DerivativeType &Derivative) const override |
|
| ITK_DISALLOW_COPY_AND_MOVE (ParzenWindowNormalizedMutualInformationImageToImageMetric) |
|
| itkStaticConstMacro (FixedImageDimension, unsigned int, FixedImageType::ImageDimension) |
|
| itkStaticConstMacro (MovingImageDimension, unsigned int, MovingImageType::ImageDimension) |
|
void | GetDerivative (const ParametersType ¶meters, DerivativeType &Derivative) const override |
|
virtual double | GetFiniteDifferencePerturbation () const |
|
virtual unsigned int | GetFixedKernelBSplineOrder () const |
|
virtual unsigned int | GetMovingKernelBSplineOrder () const |
|
virtual unsigned long | GetNumberOfFixedHistogramBins () const |
|
virtual unsigned long | GetNumberOfMovingHistogramBins () const |
|
virtual bool | GetUseDerivative () const |
|
virtual const bool & | GetUseExplicitPDFDerivatives () |
|
virtual bool | GetUseFiniteDifferenceDerivative () const |
|
void | GetValueAndDerivative (const ParametersType ¶meters, MeasureType &value, DerivativeType &derivative) const override |
|
void | Initialize () override |
|
| ITK_DISALLOW_COPY_AND_MOVE (ParzenWindowHistogramImageToImageMetric) |
|
| itkStaticConstMacro (FixedImageDimension, unsigned int, FixedImageType::ImageDimension) |
|
| itkStaticConstMacro (MovingImageDimension, unsigned int, MovingImageType::ImageDimension) |
|
virtual void | SetFiniteDifferencePerturbation (double _arg) |
|
virtual void | SetFixedKernelBSplineOrder (unsigned int _arg) |
|
virtual void | SetMovingKernelBSplineOrder (unsigned int _arg) |
|
virtual void | SetNumberOfFixedHistogramBins (unsigned long _arg) |
|
virtual void | SetNumberOfMovingHistogramBins (unsigned long _arg) |
|
virtual void | SetUseDerivative (bool _arg) |
|
virtual void | SetUseExplicitPDFDerivatives (bool _arg) |
|
virtual void | SetUseFiniteDifferenceDerivative (bool _arg) |
|
virtual void | UseExplicitPDFDerivativesOff () |
|
virtual void | UseExplicitPDFDerivativesOn () |
|
virtual void | BeforeThreadedGetValueAndDerivative (const TransformParametersType ¶meters) const |
|
virtual const FixedImageLimiterType * | GetFixedImageLimiter () |
|
const FixedImageMaskType * | GetFixedImageMask () const override |
|
virtual double | GetFixedLimitRangeRatio () const |
|
ImageSamplerType * | GetImageSampler () const |
|
virtual const MovingImageDerivativeScalesType & | GetMovingImageDerivativeScales () |
|
virtual const MovingImageLimiterType * | GetMovingImageLimiter () |
|
const MovingImageMaskType * | GetMovingImageMask () const override |
|
virtual double | GetMovingLimitRangeRatio () const |
|
virtual double | GetRequiredRatioOfValidSamples () const |
|
virtual bool | GetScaleGradientWithRespectToMovingImageOrientation () const |
|
const AdvancedTransformType * | GetTransform () const override |
|
AdvancedTransformType * | GetTransform () override |
|
virtual bool | GetUseFixedImageLimiter () const |
|
virtual bool | GetUseImageSampler () const |
|
virtual const bool & | GetUseMetricSingleThreaded () |
|
virtual bool | GetUseMovingImageDerivativeScales () const |
|
virtual bool | GetUseMovingImageLimiter () const |
|
virtual const bool & | GetUseMultiThread () |
|
void | Initialize () override |
|
| ITK_DISALLOW_COPY_AND_MOVE (AdvancedImageToImageMetric) |
|
| itkStaticConstMacro (FixedImageDimension, unsigned int, TFixedImage::ImageDimension) |
|
| itkStaticConstMacro (MovingImageDimension, unsigned int, TMovingImage::ImageDimension) |
|
virtual void | SetFixedImageLimiter (FixedImageLimiterType *_arg) |
|
virtual void | SetFixedImageMask (const FixedImageMaskType *const arg) |
|
virtual void | SetFixedLimitRangeRatio (double _arg) |
|
virtual void | SetImageSampler (ImageSamplerType *_arg) |
|
virtual void | SetMovingImageDerivativeScales (MovingImageDerivativeScalesType _arg) |
|
virtual void | SetMovingImageLimiter (MovingImageLimiterType *_arg) |
|
virtual void | SetMovingImageMask (const MovingImageMaskType *const arg) |
|
virtual void | SetMovingLimitRangeRatio (double _arg) |
|
virtual void | SetRequiredRatioOfValidSamples (double _arg) |
|
virtual void | SetScaleGradientWithRespectToMovingImageOrientation (bool _arg) |
|
virtual void | SetTransform (AdvancedTransformType *arg) |
|
virtual void | SetUseMetricSingleThreaded (bool _arg) |
|
virtual void | SetUseMovingImageDerivativeScales (bool _arg) |
|
virtual void | SetUseMultiThread (bool _arg) |
|
virtual void | UseMetricSingleThreadedOff () |
|
virtual void | UseMetricSingleThreadedOn () |
|
virtual void | UseMultiThreadOff () |
|
virtual void | UseMultiThreadOn () |
|
|
virtual void | ComputeLogMarginalPDF (MarginalPDFType &pdf) const |
|
virtual MeasureType | ComputeNormalizedMutualInformation (MeasureType &jointEntropy) const |
|
| ParzenWindowNormalizedMutualInformationImageToImageMetric ()=default |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~ParzenWindowNormalizedMutualInformationImageToImageMetric () override=default |
|
void | AfterThreadedComputePDFs () const |
|
virtual void | ComputeIncrementalMarginalPDFs (const JointPDFDerivativesType *incrementalPDF, IncrementalMarginalPDFType *fixedIncrementalMarginalPDF, IncrementalMarginalPDFType *movingIncrementalMarginalPDF) const |
|
void | ComputeMarginalPDF (const JointPDFType *jointPDF, MarginalPDFType &marginalPDF, const unsigned int direction) const |
|
virtual void | ComputePDFs (const ParametersType ¶meters) const |
|
virtual void | ComputePDFsAndIncrementalPDFs (const ParametersType ¶meters) const |
|
virtual void | ComputePDFsAndPDFDerivatives (const ParametersType ¶meters) const |
|
virtual void | ComputePDFsSingleThreaded (const ParametersType ¶meters) const |
|
virtual void | GetValueAndAnalyticDerivative (const ParametersType &, MeasureType &, DerivativeType &) const |
|
virtual void | GetValueAndFiniteDifferenceDerivative (const ParametersType &, MeasureType &, DerivativeType &) const |
|
virtual void | InitializeHistograms () |
|
virtual void | InitializeKernels () |
|
void | InitializeThreadingParameters () const override |
|
void | LaunchComputePDFsThreaderCallback () const |
|
void | NormalizeJointPDF (JointPDFType *pdf, const double factor) const |
|
void | NormalizeJointPDFDerivatives (JointPDFDerivativesType *pdf, const double factor) const |
|
| ParzenWindowHistogramImageToImageMetric () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
void | ThreadedComputePDFs (ThreadIdType threadId) |
|
virtual void | UpdateJointPDFAndDerivatives (const RealType fixedImageValue, const RealType movingImageValue, const DerivativeType *imageJacobian, const NonZeroJacobianIndicesType *nzji, JointPDFType *jointPDF) const |
|
virtual void | UpdateJointPDFAndIncrementalPDFs (RealType fixedImageValue, RealType movingImageValue, RealType movingMaskValue, const DerivativeType &movingImageValuesRight, const DerivativeType &movingImageValuesLeft, const DerivativeType &movingMaskValuesRight, const DerivativeType &movingMaskValuesLeft, const NonZeroJacobianIndicesType &nzji) const |
|
void | UpdateJointPDFDerivatives (const JointPDFIndexType &pdfIndex, double factor, const DerivativeType &imageJacobian, const NonZeroJacobianIndicesType &nzji) const |
|
| ~ParzenWindowHistogramImageToImageMetric () override=default |
|
| AdvancedImageToImageMetric () |
|
virtual void | AfterThreadedGetValue (MeasureType &) const |
|
virtual void | AfterThreadedGetValueAndDerivative (MeasureType &, DerivativeType &) const |
|
void | CheckForAdvancedTransform () |
|
void | CheckForBSplineInterpolator () |
|
void | CheckForBSplineTransform () const |
|
void | CheckNumberOfSamples (unsigned long wanted, unsigned long found) const |
|
virtual bool | EvaluateMovingImageValueAndDerivative (const MovingImagePointType &mappedPoint, RealType &movingImageValue, MovingImageDerivativeType *gradient) const |
|
bool | EvaluateTransformJacobian (const FixedImagePointType &fixedImagePoint, TransformJacobianType &jacobian, NonZeroJacobianIndicesType &nzji) const |
|
virtual void | EvaluateTransformJacobianInnerProduct (const TransformJacobianType &jacobian, const MovingImageDerivativeType &movingImageDerivative, DerivativeType &imageJacobian) const |
|
bool | FastEvaluateMovingImageValueAndDerivative (const MovingImagePointType &mappedPoint, RealType &movingImageValue, MovingImageDerivativeType *gradient, const ThreadIdType threadId) const |
|
virtual void | InitializeImageSampler () |
|
void | InitializeLimiters () |
|
virtual bool | IsInsideMovingMask (const MovingImagePointType &point) const |
|
| itkAlignedTypedef (ITK_CACHE_LINE_ALIGNMENT, PaddedGetValueAndDerivativePerThreadStruct, AlignedGetValueAndDerivativePerThreadStruct) |
|
| itkPadStruct (ITK_CACHE_LINE_ALIGNMENT, GetValueAndDerivativePerThreadStruct, PaddedGetValueAndDerivativePerThreadStruct) |
|
void | LaunchGetValueAndDerivativeThreaderCallback () const |
|
void | LaunchGetValueThreaderCallback () const |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
void | SetFixedImageMask (const typename Superclass::FixedImageMaskType *) final |
|
void | SetFixedImageMask (typename Superclass::FixedImageMaskType *) final |
|
void | SetMovingImageMask (const typename Superclass::MovingImageMaskType *) final |
|
void | SetMovingImageMask (typename Superclass::MovingImageMaskType *) final |
|
virtual void | SetUseFixedImageLimiter (bool _arg) |
|
virtual void | SetUseImageSampler (bool _arg) |
|
virtual void | SetUseMovingImageLimiter (bool _arg) |
|
virtual void | ThreadedGetValue (ThreadIdType) const |
|
virtual void | ThreadedGetValueAndDerivative (ThreadIdType) const |
|
MovingImagePointType | TransformPoint (const FixedImagePointType &fixedImagePoint) const |
|
| ~AdvancedImageToImageMetric () override=default |
|