/vol/vipdata/irtk/packages/registration/include/irtkHistogramSimilarityMetric.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
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