template<typename TFixedImage, typename 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) std::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.
|
virtual MeasureType | EvaluateMeasure (HistogramType &histogram) const override |
|
void | FormTrainingHistogram () |
|
|
| KullbackLeiblerCompareHistogramImageToImageMetric () |
|
virtual | ~KullbackLeiblerCompareHistogramImageToImageMetric () override |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
void | FormTrainingHistogram () |
|
| CompareHistogramImageToImageMetric () |
|
virtual | ~CompareHistogramImageToImageMetric () override |
|
void | ComputeHistogram (const TransformParametersType ¶meters, HistogramType &histogram) const |
|
void | ComputeHistogram (const TransformParametersType ¶meters, unsigned int parameter, double step, HistogramType &histogram) const |
|
void | CopyHistogram (HistogramType &target, HistogramType &source) const |
|
| HistogramImageToImageMetric () |
|
virtual | ~HistogramImageToImageMetric () override |
|
virtual void | ComputeImageDerivatives (const MovingImagePointType &mappedPoint, ImageDerivativesType &gradient, ThreadIdType threadId) const |
|
void | GetValueAndDerivativeMultiThreadedInitiate () const |
|
void | GetValueAndDerivativeMultiThreadedPostProcessInitiate () const |
|
void | GetValueAndDerivativeMultiThreadedPreProcessInitiate () 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 |
|
void | GetValueMultiThreadedInitiate () const |
|
void | GetValueMultiThreadedPostProcessInitiate () const |
|
void | GetValueMultiThreadedPreProcessInitiate () const |
|
virtual void | GetValueThread (ThreadIdType threadId) const |
|
virtual void | GetValueThreadPostProcess (ThreadIdType, bool) const |
|
virtual void | GetValueThreadPreProcess (ThreadIdType, bool) const |
|
virtual bool | GetValueThreadProcessSample (ThreadIdType, SizeValueType, const MovingImagePointType &, double) const |
|
| ImageToImageMetric () |
|
virtual void | PreComputeTransformValues () |
|
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 &sampleWithinSupportRegion, double &movingImageValue, ThreadIdType threadId) const |
|
virtual void | TransformPointWithDerivatives (unsigned int sampleNumber, MovingImagePointType &mappedPoint, bool &sampleWithinSupportRegion, double &movingImageValue, ImageDerivativesType &gradient, ThreadIdType threadId) const |
|
virtual | ~ImageToImageMetric () override |
|
| SingleValuedCostFunction () |
|
virtual | ~SingleValuedCostFunction () override |
|
| CostFunctionTemplate () |
|
virtual | ~CostFunctionTemplate () override |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &time) |
|
virtual | ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|