ITK  4.0.0
Insight Segmentation and Registration Toolkit
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Types | Private Member Functions | Private Attributes
itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage > Class Template Reference

Computes the mutual information between two images to be registered. More...

#include <itkMutualInformationImageToImageMetric.h>

Inheritance diagram for itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >:
Collaboration diagram for itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >:

List of all members.

Classes

class  SpatialSample

Public Types

typedef SmartPointer< const SelfConstPointer
typedef Superclass::DerivativeType DerivativeType
typedef
Superclass::FixedImageConstPointer 
FixedImageConstPointer
typedef FixedImageType::IndexType FixedImageIndexType
typedef
FixedImageIndexType::IndexValueType 
FixedImageIndexValueType
typedef
TransformType::InputPointType 
FixedImagePointType
typedef Superclass::FixedImageType FixedImageType
typedef
Superclass::InterpolatorType 
InterpolatorType
typedef KernelFunctionBase
< double > 
KernelFunctionType
typedef Superclass::MeasureType MeasureType
typedef
Superclass::MovingImageConstPointer 
MovingImageCosntPointer
typedef MovingImageType::IndexType MovingImageIndexType
typedef
TransformType::OutputPointType 
MovingImagePointType
typedef Superclass::MovingImageType MovingImageType
typedef Superclass::ParametersType ParametersType
typedef SmartPointer< SelfPointer
typedef
MutualInformationImageToImageMetric 
Self
typedef ImageToImageMetric
< TFixedImage, TMovingImage > 
Superclass
typedef
Superclass::TransformJacobianType 
TransformJacobianType
typedef
Superclass::TransformPointer 
TransformPointer
typedef Superclass::TransformType TransformType

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother (void) const
void GetDerivative (const ParametersType &parameters, DerivativeType &Derivative) const
virtual const char * GetNameOfClass () const
virtual const unsigned int & GetNumberOfSpatialSamples ()
MeasureType GetValue (const ParametersType &parameters) const
void GetValueAndDerivative (const ParametersType &parameters, MeasureType &Value, DerivativeType &Derivative) const
void ReinitializeSeed ()
void ReinitializeSeed (int)
void SetNumberOfSpatialSamples (unsigned int num)
virtual void SetMovingImageStandardDeviation (double _arg)
virtual const double & GetMovingImageStandardDeviation ()
virtual void SetFixedImageStandardDeviation (double _arg)
virtual double GetFixedImageStandardDeviation () const
virtual void SetKernelFunction (KernelFunctionType *_arg)
virtual KernelFunctionTypeGetKernelFunction ()

Static Public Member Functions

static Pointer New ()

Static Public Attributes

static const unsigned int MovingImageDimension = MovingImageType::ImageDimension

Protected Member Functions

 MutualInformationImageToImageMetric ()
void PrintSelf (std::ostream &os, Indent indent) const
virtual ~MutualInformationImageToImageMetric ()

Private Types

typedef
Superclass::CoordinateRepresentationType 
CoordinateRepresentationType
typedef
CentralDifferenceImageFunction
< MovingImageType,
CoordinateRepresentationType
DerivativeFunctionType
typedef std::vector
< SpatialSample
SpatialSampleContainer

Private Member Functions

void CalculateDerivatives (const FixedImagePointType &, DerivativeType &) const
 MutualInformationImageToImageMetric (const Self &)
void operator= (const Self &)
virtual void SampleFixedImageDomain (SpatialSampleContainer &samples) const

Private Attributes

DerivativeFunctionType::Pointer m_DerivativeCalculator
double m_FixedImageStandardDeviation
KernelFunctionType::Pointer m_KernelFunction
double m_MinProbability
double m_MovingImageStandardDeviation
unsigned int m_NumberOfSpatialSamples
int m_RandomSeed
bool m_ReseedIterator
SpatialSampleContainer m_SampleA
SpatialSampleContainer m_SampleB

Detailed Description

template<class TFixedImage, class TMovingImage>
class itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >

Computes the mutual information between two images to be registered.

MutualInformationImageToImageMetric 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().

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 Viola and Wells where the probability density distributions are estimated using Parzen windows.

By default a Gaussian kernel is used in the density estimation. Other option include Cauchy and spline-based. A user can specify the kernel passing in a pointer a KernelFunctionBase using the SetKernelFunction() method.

Mutual information is estimated using two sample sets: one to calculate the singular and joint pdf's and one to calculate the entropy integral. By default 50 samples points are used in each set. Other values can be set via the SetNumberOfSpatialSamples() method.

Quality of the density estimate depends on the choice of the kernel's standard deviation. Optimal choice will depend on the images. It is can be shown that around the optimal variance, the mutual information estimate is relatively insensitive to small changes of the standard deviation. In our experiments, we have found that a standard deviation of 0.4 works well for images normalized to have a mean of zero and standard deviation of 1.0. The variance can be set via methods SetFixedImageStandardDeviation() and SetMovingImageStandardDeviation().

Implementaton of this class is based on: Viola, P. and Wells III, W. (1997). "Alignment by Maximization of Mutual Information" International Journal of Computer Vision, 24(2):137-154

See also:
KernelFunctionBase
GaussianKernelFunction
Wiki Examples:

Definition at line 94 of file itkMutualInformationImageToImageMetric.h.


Member Typedef Documentation

template<class TFixedImage , class TMovingImage >
typedef SmartPointer< const Self > itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ConstPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::CoordinateRepresentationType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::CoordinateRepresentationType [private]

Type used for representing point components

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 254 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef CentralDifferenceImageFunction< MovingImageType, CoordinateRepresentationType > itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::DerivativeFunctionType [private]

Typedefs for using central difference calculator.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 256 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::DerivativeType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::DerivativeType

Type of the derivative.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 117 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::FixedImageConstPointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageConstPointer
template<class TFixedImage , class TMovingImage >
typedef FixedImageType::IndexType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageIndexType

Index and Point typedef support.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 125 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef FixedImageIndexType::IndexValueType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageIndexValueType
template<class TFixedImage , class TMovingImage >
typedef TransformType::InputPointType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImagePointType
template<class TFixedImage , class TMovingImage >
typedef Superclass::FixedImageType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::FixedImageType

Type of the fixed Image.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 119 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::InterpolatorType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::InterpolatorType

Type of the Interpolator Base class

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 115 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef KernelFunctionBase<double> itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::KernelFunctionType

Definition at line 131 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::MeasureType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MeasureType

Type of the measure.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 116 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::MovingImageConstPointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageCosntPointer

Definition at line 122 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef MovingImageType::IndexType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageIndexType
template<class TFixedImage , class TMovingImage >
typedef TransformType::OutputPointType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImagePointType
template<class TFixedImage , class TMovingImage >
typedef Superclass::MovingImageType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageType

Type of the moving Image.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 120 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::ParametersType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ParametersType

Type of the parameters.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 118 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef SmartPointer< Self > itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Pointer
template<class TFixedImage , class TMovingImage >
typedef MutualInformationImageToImageMetric itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Self

Standard class typedefs.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 100 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef std::vector< SpatialSample > itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SpatialSampleContainer [private]

SpatialSampleContainer typedef support.

Definition at line 224 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef ImageToImageMetric< TFixedImage, TMovingImage > itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::Superclass
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformJacobianType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformJacobianType
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformPointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::TransformType

Types inherited from Superclass.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 109 of file itkMutualInformationImageToImageMetric.h.


Constructor & Destructor Documentation

template<class TFixedImage , class TMovingImage >
itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MutualInformationImageToImageMetric ( ) [protected]
template<class TFixedImage , class TMovingImage >
virtual itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::~MutualInformationImageToImageMetric ( ) [inline, protected, virtual]

Definition at line 199 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MutualInformationImageToImageMetric ( const Self ) [private]

Member Function Documentation

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::CalculateDerivatives ( const FixedImagePointType ,
DerivativeType  
) const [private]

Calculate the intensity derivatives at a point

template<class TFixedImage , class TMovingImage >
virtual::itk::LightObject::Pointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::CreateAnother ( void  ) const [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.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetDerivative ( const ParametersType parameters,
DerivativeType Derivative 
) const [virtual]

Get the derivatives of the match measure.

Implements itk::SingleValuedCostFunction.

template<class TFixedImage , class TMovingImage >
virtual double itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetFixedImageStandardDeviation ( ) const [virtual]

Set/Get the fixed image intensitiy standard deviation. This defines the kernel bandwidth used in the joint probability distribution calculation. Default value is 0.4 which works well for image intensities normalized to a mean of 0 and standard deviation of 1.0. Value is clamped to be always greater than zero.

template<class TFixedImage , class TMovingImage >
virtual KernelFunctionType* itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetKernelFunction ( ) [virtual]

Set/Get the kernel function. This is used to calculate the joint probability distribution. Default is the GaussianKernelFunction.

template<class TFixedImage , class TMovingImage >
virtual const double& itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetMovingImageStandardDeviation ( ) [virtual]

Set/Get the moving image intensitiy standard deviation. This defines the kernel bandwidth used in the joint probability distribution calculation. Default value is 0.4 which works well for image intensities normalized to a mean of 0 and standard deviation of 1.0. Value is clamped to be always greater than zero.

template<class TFixedImage , class TMovingImage >
virtual const char* itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetNameOfClass ( ) const [virtual]

Run-time type information (and related methods).

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
virtual const unsigned int& itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetNumberOfSpatialSamples ( ) [virtual]

Get the number of spatial samples.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
MeasureType itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetValue ( const ParametersType parameters) const [virtual]

Get the value.

Implements itk::SingleValuedCostFunction.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::GetValueAndDerivative ( const ParametersType parameters,
MeasureType Value,
DerivativeType Derivative 
) const [virtual]

Get the value and derivatives for single valued optimizers.

Reimplemented from itk::SingleValuedCostFunction.

template<class TFixedImage , class TMovingImage >
static Pointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::New ( ) [static]

Method for creation through the object factory.

Reimplemented from itk::Object.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::operator= ( const Self ) [private]

Mutex lock to protect modification to the reference count

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::PrintSelf ( std::ostream &  os,
Indent  indent 
) const [protected, virtual]

Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ReinitializeSeed ( int  seed)

Reinitialize the seed of the random number generator that selects the sample of pixels used for estimating the image histograms and the joint histogram. By nature, this metric is not deterministic, since at each run it may select a different set of pixels. By initializing the random number generator seed to the same value you can restore determinism. On the other hand, calling the method ReinitializeSeed() without arguments will use the clock from your machine in order to have a very random initialization of the seed. This will indeed increase the non-deterministic behavior of the metric.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::ReinitializeSeed ( )

Reinitialize the seed of the random number generator that selects the sample of pixels used for estimating the image histograms and the joint histogram. By nature, this metric is not deterministic, since at each run it may select a different set of pixels. By initializing the random number generator seed to the same value you can restore determinism. On the other hand, calling the method ReinitializeSeed() without arguments will use the clock from your machine in order to have a very random initialization of the seed. This will indeed increase the non-deterministic behavior of the metric.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
virtual void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SampleFixedImageDomain ( SpatialSampleContainer samples) const [private, virtual]

Uniformly select samples from the fixed image buffer.

Warning:
Note that this method has a different signature than the one in the base OptImageToImageMetric and therefore they are not intended to provide polymorphism. That is, this function is not overriding the one in the base class.
template<class TFixedImage , class TMovingImage >
virtual void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SetFixedImageStandardDeviation ( double  _arg) [virtual]

Set/Get the fixed image intensitiy standard deviation. This defines the kernel bandwidth used in the joint probability distribution calculation. Default value is 0.4 which works well for image intensities normalized to a mean of 0 and standard deviation of 1.0. Value is clamped to be always greater than zero.

template<class TFixedImage , class TMovingImage >
virtual void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SetKernelFunction ( KernelFunctionType _arg) [virtual]

Set/Get the kernel function. This is used to calculate the joint probability distribution. Default is the GaussianKernelFunction.

template<class TFixedImage , class TMovingImage >
virtual void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SetMovingImageStandardDeviation ( double  _arg) [virtual]

Set/Get the moving image intensitiy standard deviation. This defines the kernel bandwidth used in the joint probability distribution calculation. Default value is 0.4 which works well for image intensities normalized to a mean of 0 and standard deviation of 1.0. Value is clamped to be always greater than zero.

template<class TFixedImage , class TMovingImage >
void itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::SetNumberOfSpatialSamples ( unsigned int  num)

Set the number of spatial samples. This is the number of image samples used to calculate the joint probability distribution. The number of spatial samples is clamped to be a minimum of 1. Default value is 50.


Member Data Documentation

template<class TFixedImage , class TMovingImage >
DerivativeFunctionType::Pointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_DerivativeCalculator [private]

Pointer to central difference calculator.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 258 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
double itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_FixedImageStandardDeviation [private]

Definition at line 236 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
KernelFunctionType::Pointer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_KernelFunction [private]

Definition at line 239 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
double itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_MinProbability [private]

Definition at line 237 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
double itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_MovingImageStandardDeviation [private]

Definition at line 235 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
unsigned int itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_NumberOfSpatialSamples [private]

Definition at line 234 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
int itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_RandomSeed [private]
template<class TFixedImage , class TMovingImage >
bool itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_ReseedIterator [private]
template<class TFixedImage , class TMovingImage >
SpatialSampleContainer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_SampleA [mutable, private]

Container to store sample set A - used to approximate the probability density function (pdf).

Definition at line 228 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
SpatialSampleContainer itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::m_SampleB [mutable, private]

Container to store sample set B - used to approximate the mutual information value.

Definition at line 232 of file itkMutualInformationImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
const unsigned int itk::MutualInformationImageToImageMetric< TFixedImage, TMovingImage >::MovingImageDimension = MovingImageType::ImageDimension [static]

Enum of the moving image dimension.

Reimplemented from itk::ImageToImageMetric< TFixedImage, TMovingImage >.

Definition at line 135 of file itkMutualInformationImageToImageMetric.h.


The documentation for this class was generated from the following file: