ITK
5.2.0
Insight Toolkit
|
#include <itkMattesMutualInformationImageToImageMetric.h>
Classes | |
struct | MMIMetricPerThreadStruct |
Static Public Member Functions | |
static Pointer | New () |
Static Public Member Functions inherited from itk::Object | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool val) |
Static Public Member Functions inherited from itk::LightObject | |
static void | BreakOnError () |
static Pointer | New () |
Computes the mutual information between two images to be registered using the method of Mattes et al.
MattesMutualInformationImageToImageMetric computes the mutual information between a fixed and moving image to be registered.
This class is templated over the FixedImage type and the MovingImage type.
The fixed and moving images are set via methods SetFixedImage() and SetMovingImage(). This metric makes use of user specified Transform and Interpolator. The Transform is used to map points from the fixed image to the moving image domain. The Interpolator is used to evaluate the image intensity at user specified geometric points in the moving image. The Transform and Interpolator are set via methods SetTransform() and SetInterpolator().
If a BSplineInterpolationFunction is used, this class obtain image derivatives from the BSpline interpolator. Otherwise, image derivatives are computed using central differencing.
The method GetValue() computes of the mutual information while method GetValueAndDerivative() computes both the mutual information and its derivatives with respect to the transform parameters.
The calculations are based on the method of Mattes et al [1,2] where the probability density distribution are estimated using Parzen histograms. Since the fixed image PDF does not contribute to the derivatives, it does not need to be smooth. Hence, a zero order (box car) BSpline kernel is used for the fixed image intensity PDF. On the other hand, to ensure smoothness a third order BSpline kernel is used for the moving image intensity PDF.
On Initialize(), the FixedImage is uniformly sampled within the FixedImageRegion. The number of samples used can be set via SetNumberOfSpatialSamples(). Typically, the number of spatial samples used should increase with the image size.
The option UseAllPixelOn() disables the random sampling and uses all the pixels of the FixedImageRegion in order to estimate the joint intensity PDF.
During each call of GetValue(), GetDerivatives(), GetValueAndDerivatives(), marginal and joint intensity PDF's values are estimated at discrete position or bins. The number of bins used can be set via SetNumberOfHistogramBins(). To handle data with arbitrary magnitude and dynamic range, the image intensity is scale such that any contribution to the histogram will fall into a valid bin.
One the PDF's have been constructed, the mutual information is obtained by doubling summing over the discrete PDF values.
Notes:
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. Vol.22, No.1, January 2003. pp.120-128. [3] "Optimization of Mutual Information for MultiResolution Image Registration" P. Thevenaz and M. Unser IEEE Transactions in Image Processing, 9(12) December 2000.
Definition at line 116 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::BSplineTransformIndexArrayType = typename Superclass::BSplineTransformIndexArrayType |
Definition at line 148 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::BSplineTransformWeightsType = typename Superclass::BSplineTransformWeightsType |
Definition at line 147 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ConstPointer = SmartPointer<const Self> |
Definition at line 126 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::CoordinateRepresentationType = typename Superclass::CoordinateRepresentationType |
Definition at line 150 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 282 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
Typedefs for BSpline kernel and derivative functions.
Definition at line 281 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::DerivativeType = typename Superclass::DerivativeType |
Definition at line 140 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageConstPointer = typename Superclass::FixedImageConstPointer |
Definition at line 145 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageSampleContainer = typename Superclass::FixedImageSampleContainer |
Definition at line 151 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageType = typename Superclass::FixedImageType |
Definition at line 142 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ImageDerivativesType = typename Superclass::ImageDerivativesType |
Definition at line 152 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::IndexValueType = typename Superclass::IndexValueType |
Definition at line 154 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::InterpolatorType = typename Superclass::InterpolatorType |
Definition at line 138 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 275 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 277 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 278 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::JointPDFDerivativesType = Image<PDFValueType, 3> |
The marginal PDFs are stored as std::vector.
Definition at line 230 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 276 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 271 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 273 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 274 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::JointPDFType = Image<PDFValueType, 2> |
Typedef for the joint PDF and PDF derivatives are stored as ITK Images.
Definition at line 229 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 272 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The moving image marginal PDF.
Definition at line 341 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MeasureType = typename Superclass::MeasureType |
Definition at line 139 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageConstPointer = typename Superclass::MovingImageConstPointer |
Definition at line 146 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImagePointType = typename Superclass::MovingImagePointType |
Definition at line 144 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageType = typename Superclass::MovingImageType |
Definition at line 143 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::OffsetValueType = typename FixedImageType::OffsetValueType |
Definition at line 156 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ParametersType = typename Superclass::ParametersType |
Definition at line 141 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::PDFValueType = double |
The marginal PDFs are stored as std::vector.
Definition at line 225 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Pointer = SmartPointer<Self> |
Definition at line 125 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 336 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
Helper array for storing the values of the JointPDF ratios.
Definition at line 335 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Self = MattesMutualInformationImageToImageMetric |
Standard class type aliases.
Definition at line 123 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Superclass = ImageToImageMetric<TFixedImage, TMovingImage> |
Definition at line 124 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformJacobianType = typename Superclass::TransformJacobianType |
Definition at line 137 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformPointer = typename Superclass::TransformPointer |
Definition at line 136 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformType = typename Superclass::TransformType |
Types inherited from Superclass.
Definition at line 135 of file itkMattesMutualInformationImageToImageMetric.h.
using itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >::WeightsValueType = typename Superclass::WeightsValueType |
Definition at line 153 of file itkMattesMutualInformationImageToImageMetric.h.
|
protected |
The marginal PDFs are stored as std::vector.
|
overrideprotected |
The marginal PDFs are stored as std::vector.
|
private |
Precompute fixed image parzen window indices.
|
private |
Compute PDF derivative contribution for each parameter.
|
virtual |
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::Object.
|
overridevirtual |
Get the derivatives of the match measure.
Implements itk::SingleValuedCostFunction.
|
inline |
Get the internal JointPDF image that was used in creating the metric value.
Definition at line 237 of file itkMattesMutualInformationImageToImageMetric.h.
|
inline |
Get the internal JointPDFDeriviative image that was used in creating the metric derivative value. This is only created when UseExplicitPDFDerivatives is ON, and derivatives are requested.
Definition at line 254 of file itkMattesMutualInformationImageToImageMetric.h.
|
virtual |
Run-time type information (and related methods).
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
virtual |
The marginal PDFs are stored as std::vector.
|
virtual |
The marginal PDFs are stored as std::vector.
|
overridevirtual |
Get the value.
Implements itk::SingleValuedCostFunction.
|
overridevirtual |
Get the value and derivatives for single valued optimizers.
Reimplemented from itk::SingleValuedCostFunction.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overrideprivatevirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
overridevirtual |
Initialize the Metric by (1) making sure that all the components are present and plugged together correctly, (2) uniformly select NumberOfSpatialSamples within the FixedImageRegion, and (3) allocate memory for pdf data structures.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
private |
The marginal PDFs are stored as std::vector.
|
private |
The marginal PDFs are stored as std::vector.
|
static |
Method for creation through the object factory.
|
overrideprotectedvirtual |
The marginal PDFs are stored as std::vector.
Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.
|
virtual |
Number of bins to used in the histogram. According to Mattes et al the optimum value is 50. The minimum value is 5 due to the padding required by the Parzen windowing with a cubic-BSpline kernel. Note that even if the metric is used on binary images, the number of bins should at least be equal to five.
|
virtual |
This variable selects the method to be used for computing the Metric derivatives with respect to the Transform parameters. Two modes of computation are available. The choice between one and the other is a trade-off between computation speed and memory allocations. The two modes are described in detail below:
UseExplicitPDFDerivatives = True will compute the Metric derivative by first calculating the derivatives of each one of the Joint PDF bins with respect to each one of the Transform parameters and then accumulating these contributions in the final metric derivative array by using a bin-specific weight. The memory required for storing the intermediate derivatives is a 3D array of floating point values with size equals to the product of (number of histogram bins)^2 times number of transform parameters. This method is well suited for Transform with a small number of parameters.
UseExplicitPDFDerivatives = False will compute the Metric derivative by first computing the weights for each one of the Joint PDF bins and caching them into an array. Then it will revisit each one of the PDF bins for computing its weighted contribution to the full derivative array. In this method an extra 2D array is used for storing the weights of each one of the PDF bins. This is an array of floating point values with size equals to (number of histogram bins)^2. This method is well suited for Transforms with a large number of parameters, such as, BSplineTransforms.
|
virtual |
The marginal PDFs are stored as std::vector.
|
virtual |
The marginal PDFs are stored as std::vector.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 332 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
Cubic BSpline kernel for computing Parzen histograms.
Definition at line 331 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 327 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 322 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 324 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 323 of file itkMattesMutualInformationImageToImageMetric.h.
|
mutableprivate |
The marginal PDFs are stored as std::vector.
Definition at line 375 of file itkMattesMutualInformationImageToImageMetric.h.
|
mutableprivate |
The marginal PDFs are stored as std::vector.
Definition at line 371 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 328 of file itkMattesMutualInformationImageToImageMetric.h.
|
mutableprivate |
The marginal PDFs are stored as std::vector.
Definition at line 342 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 321 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 326 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 325 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
Variables to define the marginal and joint histograms.
Definition at line 320 of file itkMattesMutualInformationImageToImageMetric.h.
|
mutableprivate |
The marginal PDFs are stored as std::vector.
Definition at line 338 of file itkMattesMutualInformationImageToImageMetric.h.
|
private |
The marginal PDFs are stored as std::vector.
Definition at line 374 of file itkMattesMutualInformationImageToImageMetric.h.
|
staticconstexpr |
The moving image dimension.
Definition at line 159 of file itkMattesMutualInformationImageToImageMetric.h.