00001 /*========================================================================= 00002 00003 Library : Image Registration Toolkit (IRTK) 00004 Module : $Id: irtkLabelConsistencySimilarityMetric.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 _IRTKLABELCONSISTENCYSIMILARITYMETRIC_H 00014 00015 #define _IRTKLABELCONSISTENCYSIMILARITYMETRIC_H 00016 00022 class irtkLabelConsistencySimilarityMetric : public irtkHistogramSimilarityMetric 00023 { 00024 00025 private: 00026 00028 double _n; 00029 00031 double _match; 00032 00033 public: 00034 00036 irtkLabelConsistencySimilarityMetric(); 00037 00039 virtual void Add(int, int); 00040 00042 virtual void Delete(int, int); 00043 00045 virtual void Reset(); 00046 00048 virtual void Reset(irtkSimilarityMetric *); 00049 00051 virtual double Evaluate(); 00052 00053 }; 00054 00055 inline irtkLabelConsistencySimilarityMetric::irtkLabelConsistencySimilarityMetric() 00056 { 00057 _match = 0; 00058 _n = 0; 00059 } 00060 00061 inline void irtkLabelConsistencySimilarityMetric::Add(int x, int y) 00062 { 00063 if (x == y) _match++; 00064 _n++; 00065 } 00066 00067 inline void irtkLabelConsistencySimilarityMetric::Delete(int x, int y) 00068 { 00069 if (x == y) _match--; 00070 _n--; 00071 } 00072 00073 inline void irtkLabelConsistencySimilarityMetric::Reset() 00074 { 00075 _match = 0; 00076 _n = 0; 00077 } 00078 00079 inline void irtkLabelConsistencySimilarityMetric::Reset(irtkSimilarityMetric *metric) 00080 { 00081 irtkLabelConsistencySimilarityMetric *m = dynamic_cast<irtkLabelConsistencySimilarityMetric *>(metric); 00082 00083 if (m == NULL) { 00084 cerr << "irtkLabelConsistencySimilarityMetric::Reset: Dynamic cast failed" << endl; 00085 exit(1); 00086 } 00087 00088 _match = m->_match; 00089 _n = m->_n; 00090 } 00091 00092 inline double irtkLabelConsistencySimilarityMetric::Evaluate() 00093 { 00094 if (_n > 0) { 00095 return _match / _n; 00096 } else { 00097 cerr << "irtkLabelConsistencySimilarityMetric::Evaluate: No samples"; 00098 return 0; 00099 } 00100 } 00101 00102 #endif