template<typename TFixedImage, typename TMovingImage>
class itk::MattesMutualInformationImageToImageMetric< TFixedImage, TMovingImage >
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.
- Warning
- This metric assumes that the moving image has already been connected to the interpolator outside of this class.
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 scaled such that any contribution to the histogram will fall into a valid bin.
Once the PDF's have been constructed, the mutual information is obtained by double summing over the discrete PDF values.
Notes:
- This class returns the negative mutual information value.
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.
- ITK Sphinx Examples:
-
- Examples
- Examples/RegistrationITKv4/DeformableRegistration13.cxx, Examples/RegistrationITKv4/DeformableRegistration14.cxx, Examples/RegistrationITKv4/DeformableRegistration15.cxx, Examples/RegistrationITKv4/ImageRegistration16.cxx, Examples/RegistrationITKv4/MultiResImageRegistration2.cxx, and Examples/RegistrationITKv4/MultiResImageRegistration3.cxx.
Definition at line 117 of file itkMattesMutualInformationImageToImageMetric.h.
|
void | GetDerivative (const ParametersType ¶meters, DerivativeType &derivative) const override |
|
const char * | GetNameOfClass () const override |
|
MeasureType | GetValue (const ParametersType ¶meters) const override |
|
void | GetValueAndDerivative (const ParametersType ¶meters, MeasureType &value, DerivativeType &derivative) const override |
|
void | Initialize () override |
|
|
virtual void | SetNumberOfHistogramBins (SizeValueType _arg) |
|
virtual const SizeValueType & | GetNumberOfHistogramBins () const |
|
|
virtual void | SetUseExplicitPDFDerivatives (bool _arg) |
|
virtual const bool & | GetUseExplicitPDFDerivatives () const |
|
virtual void | UseExplicitPDFDerivativesOn () |
|
|
const JointPDFType::Pointer | GetJointPDF () const |
|
|
const JointPDFDerivativesType::Pointer | GetJointPDFDerivatives () const |
|
virtual void | ComputeGradient () |
|
virtual const FixedImageRegionType & | GetFixedImageRegion () const |
|
virtual const FixedImagePixelType & | GetFixedImageSamplesIntensityThreshold () const |
|
virtual GradientImageType * | GetModifiableGradientImage () |
|
virtual InterpolatorType * | GetModifiableInterpolator () |
|
virtual TransformType * | GetModifiableTransform () |
|
const char * | GetNameOfClass () const override |
|
SizeValueType | GetNumberOfMovingImageSamples () |
|
unsigned int | GetNumberOfParameters () const override |
|
virtual const SizeValueType & | GetNumberOfPixelsCounted () const |
|
SizeValueType | GetNumberOfSpatialSamples () |
|
virtual const bool & | GetUseAllPixels () const |
|
virtual const bool & | GetUseFixedImageIndexes () const |
|
virtual const bool & | GetUseFixedImageSamplesIntensityThreshold () const |
|
virtual const bool & | GetUseSequentialSampling () const |
|
virtual void | Initialize () |
|
virtual void | MultiThreadingInitialize () |
|
void | SetFixedImageIndexes (const FixedImageIndexContainer &indexes) |
|
virtual void | SetFixedImageRegion (const FixedImageRegionType reg) |
|
void | SetFixedImageSamplesIntensityThreshold (const FixedImagePixelType &thresh) |
|
virtual void | SetInterpolator (InterpolatorType *_arg) |
|
void | SetNumberOfSpatialSamples (SizeValueType num) |
|
virtual void | SetTransform (TransformType *_arg) |
|
void | SetTransformParameters (const ParametersType ¶meters) const |
|
void | SetUseAllPixels (bool useAllPixels) |
|
void | SetUseFixedImageIndexes (bool useIndexes) |
|
void | SetUseFixedImageSamplesIntensityThreshold (bool useThresh) |
|
void | SetUseSequentialSampling (bool useSequential) |
|
void | UseAllPixelsOff () |
|
void | UseAllPixelsOn () |
|
virtual void | SetFixedImage (const FixedImageType *_arg) |
|
virtual const FixedImageType * | GetFixedImage () const |
|
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 |
|
void | SetNumberOfWorkUnits (ThreadIdType numberOfThreads) |
|
virtual const ThreadIdType & | GetNumberOfWorkUnits () const |
|
virtual void | SetComputeGradient (bool _arg) |
|
virtual const bool & | GetComputeGradient () const |
|
virtual void | ComputeGradientOn () |
|
virtual void | SetNumberOfFixedImageSamples (SizeValueType numSamples) |
|
virtual const SizeValueType & | GetNumberOfFixedImageSamples () const |
|
void | ReinitializeSeed () |
|
void | ReinitializeSeed (int seed) |
|
virtual void | SetUseCachingOfBSplineWeights (bool _arg) |
|
virtual const bool & | GetUseCachingOfBSplineWeights () const |
|
virtual void | UseCachingOfBSplineWeightsOn () |
|
virtual MultiThreaderType * | GetModifiableThreader () |
|
const TransformPointer * | GetThreaderTransform () |
|
virtual void | GetDerivative (const ParametersType ¶meters, DerivativeType &derivative) const =0 |
|
const char * | GetNameOfClass () const override |
|
virtual MeasureType | GetValue (const ParametersType ¶meters) const =0 |
|
virtual void | GetValueAndDerivative (const ParametersType ¶meters, MeasureType &value, DerivativeType &derivative) const |
|
const char * | GetNameOfClass () const override |
|
virtual unsigned int | GetNumberOfParameters () const=0 |
|
unsigned long | AddObserver (const EventObject &event, Command *) |
|
unsigned long | AddObserver (const EventObject &event, Command *) 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 |
|
const char * | GetNameOfClass () const override |
|
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) |
|
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 Pointer | CreateAnother () const |
|
virtual void | Delete () |
|
virtual const char * | GetNameOfClass () const |
|
virtual int | GetReferenceCount () const |
|
void | Print (std::ostream &os, Indent indent=0) const |
|
virtual void | Register () const |
|
virtual void | SetReferenceCount (int) |
|
virtual void | UnRegister () const noexcept |
|
|
| MattesMutualInformationImageToImageMetric () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~MattesMutualInformationImageToImageMetric () override=default |
|
virtual void | ComputeImageDerivatives (const MovingImagePointType &mappedPoint, ImageDerivativesType &gradient, ThreadIdType threadId) const |
|
void | GetValueAndDerivativeMultiThreadedInitiate () const |
|
void | GetValueAndDerivativeMultiThreadedPostProcessInitiate () const |
|
virtual void | GetValueAndDerivativeThread (ThreadIdType threadId) const |
|
virtual void | GetValueAndDerivativeThreadPostProcess (ThreadIdType, bool) const |
|
virtual void | GetValueAndDerivativeThreadPreProcess (ThreadIdType, bool) const |
|
virtual bool | GetValueAndDerivativeThreadProcessSample (ThreadIdType, SizeValueType, const MovingImagePointType &, double, const ImageDerivativesType &) const |
|
| ImageToImageMetric () |
|
virtual void | PreComputeTransformValues () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
virtual void | SampleFixedImageIndexes (FixedImageSampleContainer &samples) const |
|
virtual void | SampleFixedImageRegion (FixedImageSampleContainer &samples) const |
|
virtual void | SampleFullFixedImageRegion (FixedImageSampleContainer &samples) const |
|
virtual void | SynchronizeTransforms () const |
|
virtual void | TransformPoint (unsigned int sampleNumber, MovingImagePointType &mappedPoint, bool &sampleOk, double &movingImageValue, ThreadIdType threadId) const |
|
virtual void | TransformPointWithDerivatives (unsigned int sampleNumber, MovingImagePointType &mappedPoint, bool &sampleOk, double &movingImageValue, ImageDerivativesType &movingImageGradient, ThreadIdType threadId) const |
|
| ~ImageToImageMetric () override=default |
|
void | GetValueMultiThreadedInitiate () const |
|
void | GetValueMultiThreadedPostProcessInitiate () const |
|
virtual void | GetValueThread (ThreadIdType threadId) const |
|
| SingleValuedCostFunction ()=default |
|
| ~SingleValuedCostFunction () override |
|
| CostFunctionTemplate ()=default |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~CostFunctionTemplate () override=default |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
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 | PrintSelf (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|