/vol/vipdata/irtk/packages/registration/include/irtkHistogramSimilarityMetric.h

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkHistogramSimilarityMetric.h 2 2008-12-23 12:40:14Z dr $
00005   Copyright : Imperial College, Department of Computing
00006               Visual Information Processing (VIP), 2008 onwards
00007   Date      : $Date: 2008-12-23 12:40:14 +0000 (Tue, 23 Dec 2008) $
00008   Version   : $Revision: 2 $
00009   Changes   : $Author: dr $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef _IRTKHISTOGRAMSIMILARITYMETRIC_H
00014 
00015 #define _IRTKHISTOGRAMSIMILARITYMETRIC_H
00016 
00025 class irtkHistogramSimilarityMetric : public irtkSimilarityMetric
00026 {
00027 
00028 protected:
00029 
00031   irtkHistogram_2D *_histogram;
00032 
00033 public:
00034 
00036   irtkHistogramSimilarityMetric(int = 64, int = 64);
00037 
00039   ~irtkHistogramSimilarityMetric();
00040 
00042   virtual void Add(int, int);
00043 
00045   virtual void Delete(int, int);
00046 
00048   virtual void Combine(irtkSimilarityMetric *);
00049 
00051   virtual void Reset();
00052 
00054   virtual void Reset(irtkSimilarityMetric *);
00055 
00057   int NumberOfBinsX();
00058 
00060   int NumberOfBinsY();
00061 
00062 };
00063 
00064 inline irtkHistogramSimilarityMetric::irtkHistogramSimilarityMetric(int nbins_x, int nbins_y)
00065 {
00066   _histogram = new irtkHistogram_2D(nbins_x, nbins_y);
00067 }
00068 
00069 inline irtkHistogramSimilarityMetric::~irtkHistogramSimilarityMetric()
00070 {
00071   delete _histogram;
00072 }
00073 
00074 inline void irtkHistogramSimilarityMetric::Add(int x, int y)
00075 {
00076   _histogram->Add(x, y);
00077 }
00078 
00079 inline void irtkHistogramSimilarityMetric::Delete(int x, int y)
00080 {
00081   _histogram->Delete(x, y);
00082 }
00083 
00084 inline void irtkHistogramSimilarityMetric::Combine(irtkSimilarityMetric *metric)
00085 {
00086   int i, j;
00087   irtkHistogramSimilarityMetric *m = dynamic_cast<irtkHistogramSimilarityMetric *>(metric);
00088 
00089   if (m == NULL) {
00090     cerr << "irtkHistogramSimilarityMetric::Combine: Dynamic cast failed" << endl;
00091     exit(1);
00092   }
00093 
00094   if ((_histogram->GetNumberOfBinsX() != m->_histogram->GetNumberOfBinsX()) ||
00095       (_histogram->GetNumberOfBinsY() != m->_histogram->GetNumberOfBinsY())) {
00096     cerr << "irtkHistogramSimilarityMetric::Combine: Number of bins differs" << endl;
00097     exit(1);
00098   }
00099   for (j = 0; j < _histogram->GetNumberOfBinsY(); j++) {
00100     for (i = 0; i < _histogram->GetNumberOfBinsX(); i++) {
00101       _histogram->Add(i, j, m->_histogram->irtkHistogram_2D::operator()(i, j));
00102     }
00103   }
00104 }
00105 
00106 inline void irtkHistogramSimilarityMetric::Reset()
00107 {
00108   _histogram->Reset();
00109 }
00110 
00111 inline void irtkHistogramSimilarityMetric::Reset(irtkSimilarityMetric *metric)
00112 {
00113   irtkHistogramSimilarityMetric *m = dynamic_cast<irtkHistogramSimilarityMetric *>(metric);
00114 
00115   if (m == NULL) {
00116     cerr << "irtkHistogramSimilarityMetric::Reset: Dynamic cast failed" << endl;
00117     exit(1);
00118   }
00119 
00120   _histogram->Reset(*m->_histogram);
00121 }
00122 
00123 inline int irtkHistogramSimilarityMetric::NumberOfBinsX()
00124 {
00125   return _histogram->GetNumberOfBinsX();
00126 }
00127 
00128 inline int irtkHistogramSimilarityMetric::NumberOfBinsY()
00129 {
00130   return _histogram->GetNumberOfBinsY();
00131 }
00132 
00133 #include <irtkGenericHistogramSimilarityMetric.h>
00134 #include <irtkMutualInformationSimilarityMetric.h>
00135 #include <irtkNormalisedMutualInformationSimilarityMetric.h>
00136 #include <irtkJointEntropySimilarityMetric.h>
00137 #include <irtkCorrelationRatioXYSimilarityMetric.h>
00138 #include <irtkCorrelationRatioYXSimilarityMetric.h>
00139 #include <irtkKappaSimilarityMetric.h>
00140 #include <irtkLabelConsistencySimilarityMetric.h>
00141 
00142 #endif