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