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

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