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

#include <itkKullbackLeiblerCompareHistogramImageToImageMetric.h>

+ Inheritance diagram for itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >:
+ Collaboration diagram for itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >:

List of all members.

Public Types

typedef SmartPointer< const SelfConstPointer
typedef Superclass::DerivativeType DerivativeType
typedef
Superclass::FixedImageConstPointer 
FixedImageConstPointer
typedef Superclass::FixedImageType FixedImageType
typedef
Superclass::GradientPixelType 
GradientPixelType
typedef
Superclass::HistogramFrequencyType 
HistogramFrequencyType
typedef
Superclass::HistogramIteratorType 
HistogramIteratorType
typedef
Superclass::MeasurementVectorType 
HistogramMeasurementVectorType
typedef
Superclass::HistogramPointerType 
HistogramPointerType
typedef
Superclass::HistogramSizeType 
HistogramSizeType
typedef Superclass::HistogramType HistogramType
typedef
Superclass::InterpolatorPointer 
InterpolatorPointer
typedef
Superclass::InterpolatorType 
InterpolatorType
typedef Superclass::MeasureType MeasureType
typedef
Superclass::MovingImageConstPointer 
MovingImageConstPointer
typedef Superclass::MovingImageType MovingImageType
typedef SmartPointer< SelfPointer
typedef Superclass::RealType RealType
typedef
KullbackLeiblerCompareHistogramImageToImageMetric 
Self
typedef
CompareHistogramImageToImageMetric
< TFixedImage, TMovingImage > 
Superclass
typedef Superclass::ConstPointer TransformConstPointer
typedef
Superclass::TransformJacobianType 
TransformJacobianType
typedef
Superclass::TransformParametersType 
TransformParametersType
typedef
Superclass::TransformPointer 
TransformPointer
typedef Superclass::TransformType TransformType

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother (void) const
virtual const double & GetEpsilon ()
virtual const char * GetNameOfClass () const
unsigned int GetNumberOfParameters (void) const
void Initialize () throw ( ExceptionObject )
virtual void SetEpsilon (double _arg)

Static Public Member Functions

static Pointer New ()

Protected Member Functions

virtual MeasureType EvaluateMeasure (HistogramType &histogram) const
void FormTrainingHistogram () throw ( ExceptionObject )
 KullbackLeiblerCompareHistogramImageToImageMetric ()
virtual ~KullbackLeiblerCompareHistogramImageToImageMetric ()
void PrintSelf (std::ostream &os, Indent indent) const

Protected Attributes

double m_Epsilon

Private Member Functions

 KullbackLeiblerCompareHistogramImageToImageMetric (Self const &)
void operator= (Self const &)

Detailed Description

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

Computes the Kubler Lieblach(KL) metric between the histogram of the two images to be registered and a training histogram.

This class is templated over the type of the fixed and moving images to be compared.

This class computers the KL-metric by comparing the histograms of the testing histogram formed by the overlap of intensities in the images, to a training histogram. It is based on the following paper:

Albert C.S. Chung, William M. Wells III, Alexander Norbash, and W. Eric L. Grimson, Multi-modal Image Registration by Minimising Kullback-Leibler Distance, In Medical Image Computing and Computer-Assisted Intervention - MICCAI 2002, LNCS 2489, pp. 525 - 532.

The metric is given by KL(P_test||P_train) = Sum_{i1,i2} P_test(i1,i2) vcl_log(P_test(i1,i2)/P_train(i1,i2)) where P_test and P_train are probabilities given my normalized histograms, and i1 and i2 are the intensity bins in the histogram.

PARAMETERS
Epsilon is added to every bin in both histograms. This prevents division by zero problems. Epsilon should generally be set to a number smaller than one divided by the total number bins in the histogram. So, for a 256 by 256 histogram, Epsilon should be much less than 1e-5. Tests have shown that choices of epsilon are not very important as long as it is small enough. The default is 1e-12. I doubt you will need to change it.
Author:
Samson Timoner
SUPPORT
This work was supported by the Functional Imaging Research in Schizophrenia Testbed (FIRST) Biomedical Informatics Research Network (BIRN, http://www.birncommunity.org/), which is funded by the National Center for Research Resources at the National Institutes of Health (NIH). This work is also funded by the Neuroimage Analysis Center (P41 RR13218).

Definition at line 72 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.


Member Typedef Documentation

template<class TFixedImage , class TMovingImage >
typedef SmartPointer< const Self > itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::ConstPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::DerivativeType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::DerivativeType
template<class TFixedImage , class TMovingImage >
typedef Superclass::FixedImageConstPointer itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::FixedImageConstPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::FixedImageType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::FixedImageType
template<class TFixedImage , class TMovingImage >
typedef Superclass::GradientPixelType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::GradientPixelType

Gaussian filter to compute the gradient of the Moving Image

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

Definition at line 97 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::HistogramFrequencyType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramFrequencyType
template<class TFixedImage , class TMovingImage >
typedef Superclass::HistogramIteratorType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramIteratorType
template<class TFixedImage , class TMovingImage >
typedef Superclass::MeasurementVectorType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramMeasurementVectorType
template<class TFixedImage , class TMovingImage >
typedef Superclass::HistogramPointerType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramPointerType
template<class TFixedImage , class TMovingImage >
typedef Superclass::HistogramSizeType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramSizeType
template<class TFixedImage , class TMovingImage >
typedef Superclass::HistogramType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::HistogramType

Typedefs for histogram. This should have been defined as Histogram<RealType,2> but a bug in VC++7 produced an internal compiler error with such declaration.

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

Definition at line 107 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

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

Type of the Interpolator Base class

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

Definition at line 115 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef Superclass::MeasureType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::MeasureType
template<class TFixedImage , class TMovingImage >
typedef Superclass::MovingImageConstPointer itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::MovingImageConstPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::MovingImageType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::MovingImageType
template<class TFixedImage , class TMovingImage >
typedef SmartPointer< Self > itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::Pointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::RealType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::RealType

Types transferred from the base class

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

Definition at line 88 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
typedef KullbackLeiblerCompareHistogramImageToImageMetric itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::Self
template<class TFixedImage , class TMovingImage >
typedef CompareHistogramImageToImageMetric< TFixedImage, TMovingImage > itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::Superclass
template<class TFixedImage , class TMovingImage >
typedef Superclass::ConstPointer itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::TransformConstPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformJacobianType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::TransformJacobianType
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformParametersType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::TransformParametersType
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformPointer itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::TransformPointer
template<class TFixedImage , class TMovingImage >
typedef Superclass::TransformType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::TransformType

Constructor & Destructor Documentation

template<class TFixedImage , class TMovingImage >
itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::KullbackLeiblerCompareHistogramImageToImageMetric ( ) [protected]

Constructor is protected to ensure that New() function is used to create instances.

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

Constructor is protected to ensure that New() function is used to create instances.

Definition at line 138 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

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

Member Function Documentation

template<class TFixedImage , class TMovingImage >
virtual::itk::LightObject::Pointer itk::KullbackLeiblerCompareHistogramImageToImageMetric< 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 >
virtual MeasureType itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::EvaluateMeasure ( HistogramType histogram) const [protected, virtual]

Evaluates the mutual information from the histogram.

Implements itk::CompareHistogramImageToImageMetric< TFixedImage, TMovingImage >.

template<class TFixedImage , class TMovingImage >
void itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::FormTrainingHistogram ( ) throw ( ExceptionObject ) [protected]

Form the Histogram for the Training data

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

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

Get epsilon, the histogram frequency to use if the frequency is 0

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

Run-time type information (and related methods).

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

template<class TFixedImage , class TMovingImage >
unsigned int itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::GetNumberOfParameters ( void  ) const [inline, virtual]

Return the number of parameters required by the Transform

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

Definition at line 125 of file itkKullbackLeiblerCompareHistogramImageToImageMetric.h.

template<class TFixedImage , class TMovingImage >
void itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::Initialize ( ) throw ( ExceptionObject ) [virtual]

Forms the histogram of the training images to prepare to evaluate the metric. Must set all parameters first

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

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

Method for creation through the object factory.

Reimplemented from itk::Object.

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

Mutex lock to protect modification to the reference count

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

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

Constructor is protected to ensure that New() function is used to create instances.

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

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

Set epsilon, which is added to each bin in both Histogram


Member Data Documentation

template<class TFixedImage , class TMovingImage >
double itk::KullbackLeiblerCompareHistogramImageToImageMetric< TFixedImage, TMovingImage >::m_Epsilon [protected]

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