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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkSimilarityMetric.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 _IRTKSIMILARITYMETRIC_H
00014 
00015 #define _IRTKSIMILARITYMETRIC_H
00016 
00026 class irtkSimilarityMetric : public irtkObject
00027 {
00028 
00029 public:
00030 
00032   irtkSimilarityMetric();
00033 
00035   virtual ~irtkSimilarityMetric();
00036 
00038   static irtkSimilarityMetric *New(irtkSimilarityMetric *);
00039 
00041   virtual void Add(int, int) = 0;
00042 
00044   virtual void Delete(int, int) = 0;
00045 
00047   virtual void Combine(irtkSimilarityMetric *) = 0;
00048 
00050   virtual void Reset() = 0;
00051 
00053   virtual void Reset(irtkSimilarityMetric *) = 0;
00054 
00056   virtual double Evaluate() = 0;
00057 
00058 };
00059 
00060 inline irtkSimilarityMetric::irtkSimilarityMetric()
00061 {
00062 }
00063 
00064 inline irtkSimilarityMetric::~irtkSimilarityMetric()
00065 {
00066 }
00067 
00068 #include <irtkSSDSimilarityMetric.h>
00069 #include <irtkCrossCorrelationSimilarityMetric.h>
00070 #include <irtkMLSimilarityMetric.h>
00071 #include <irtkHistogramSimilarityMetric.h>
00072 
00073 inline irtkSimilarityMetric *irtkSimilarityMetric::New(irtkSimilarityMetric *metric)
00074 {
00075   {
00076     irtkSSDSimilarityMetric *m = dynamic_cast<irtkSSDSimilarityMetric *>(metric);
00077     if (m != NULL) {
00078       return new irtkSSDSimilarityMetric;
00079     }
00080   }
00081   {
00082     irtkMutualInformationSimilarityMetric *m = dynamic_cast<irtkMutualInformationSimilarityMetric *>(metric);
00083     if (m != NULL) {
00084       return new irtkMutualInformationSimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00085     }
00086   }
00087   {
00088     irtkNormalisedMutualInformationSimilarityMetric *m = dynamic_cast<irtkNormalisedMutualInformationSimilarityMetric *>(metric);
00089     if (m != NULL) {
00090       return new irtkNormalisedMutualInformationSimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00091     }
00092   }
00093   {
00094     irtkJointEntropySimilarityMetric *m = dynamic_cast<irtkJointEntropySimilarityMetric *>(metric);
00095     if (m != NULL) {
00096       return new irtkJointEntropySimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00097     }
00098   }
00099   {
00100     irtkCrossCorrelationSimilarityMetric *m = dynamic_cast<irtkCrossCorrelationSimilarityMetric *>(metric);
00101     if (m != NULL) {
00102       return new irtkCrossCorrelationSimilarityMetric;
00103     }
00104   }
00105   {
00106     irtkKappaSimilarityMetric *m = dynamic_cast<irtkKappaSimilarityMetric *>(metric);
00107     if (m != NULL) {
00108       return new irtkKappaSimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00109     }
00110   }
00111   {
00112     irtkLabelConsistencySimilarityMetric *m = dynamic_cast<irtkLabelConsistencySimilarityMetric *>(metric);
00113     if (m != NULL) {
00114       return new irtkLabelConsistencySimilarityMetric;
00115     }
00116   }
00117   {
00118     irtkCorrelationRatioXYSimilarityMetric *m = dynamic_cast<irtkCorrelationRatioXYSimilarityMetric *>(metric);
00119     if (m != NULL) {
00120       return new irtkCorrelationRatioXYSimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00121     }
00122   }
00123   {
00124     irtkCorrelationRatioYXSimilarityMetric *m = dynamic_cast<irtkCorrelationRatioYXSimilarityMetric *>(metric);
00125     if (m != NULL) {
00126       return new irtkCorrelationRatioYXSimilarityMetric(m->NumberOfBinsX(), m->NumberOfBinsY());
00127     }
00128   }
00129   {
00130     irtkMLSimilarityMetric *m = dynamic_cast<irtkMLSimilarityMetric *>(metric);
00131     if (m != NULL) {
00132       return new irtkMLSimilarityMetric(m->_classification);
00133     }
00134   }
00135 
00136   cerr << "irtkSimilarityMetric::New: Failed" << endl;
00137   exit(1);
00138 }
00139 
00140 
00141 #endif