00001
00015 #ifndef MDS_TETRASIMILARITYMEASURE_H
00016 #define MDS_TETRASIMILARITYMEASURE_H
00017
00018 #include "mdsTetraFeatures.h"
00019
00020
00021 #include <MDSTk/Math/mdsVectorFunctions.h>
00022
00023
00024 #include <cmath>
00025
00026
00027 namespace mds
00028 {
00029 namespace seg
00030 {
00031
00032
00036 class CTetraSimilarityMeasure
00037 {
00038 public:
00040 CTetraSimilarityMeasure(double dThreshold = 0.5) : m_dThreshold(dThreshold) {}
00041
00043 virtual ~CTetraSimilarityMeasure() {}
00044
00046 virtual double getSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2) = 0;
00047
00051 virtual bool checkSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2)
00052 {
00053 return (this->getSimilarity(v1, v2) > m_dThreshold);
00054 }
00055
00057 double getThreshold() { return m_dThreshold; }
00058
00060 void setThreshold(double dValue) { m_dThreshold = dValue; }
00061
00062 protected:
00064 double m_dThreshold;
00065 };
00066
00067
00068
00073 class CTetraMeanValueSimilarity : public CTetraSimilarityMeasure
00074 {
00075 public:
00077 static const double DEFAULT_THRESHOLD;
00078 static const double DEFAULT_RHO;
00079
00080 public:
00082 CTetraMeanValueSimilarity(double dThreshold = DEFAULT_THRESHOLD,
00083 double dRho = DEFAULT_RHO
00084 );
00085
00087 virtual ~CTetraMeanValueSimilarity() {}
00088
00090 virtual double getSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2);
00091
00092 protected:
00094 double m_dInvRho;
00095 };
00096
00097
00098
00103 class CTetraVarianceSimilarity : public CTetraSimilarityMeasure
00104 {
00105 public:
00107 static const double DEFAULT_THRESHOLD;
00108
00109 public:
00111 CTetraVarianceSimilarity(double dThreshold = DEFAULT_THRESHOLD);
00112
00114 virtual ~CTetraVarianceSimilarity() {}
00115
00117 virtual double getSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2);
00118 };
00119
00120
00121
00125 class CTetraMixtureSimilarity : public CTetraSimilarityMeasure
00126 {
00127 public:
00129 CTetraMixtureSimilarity(CTetraSimilarityMeasure& M1,
00130 CTetraSimilarityMeasure& M2,
00131 double dW1,
00132 double dW2
00133 );
00134
00136 virtual ~CTetraMixtureSimilarity() {}
00137
00139 virtual double getSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2);
00140
00142 virtual bool checkSimilarity(const CTetraFeatures& v1, const CTetraFeatures& v2);
00143
00144 protected:
00146 CTetraSimilarityMeasure& m_Measure1;
00147 CTetraSimilarityMeasure& m_Measure2;
00148
00150 double m_dW1, m_dW2;
00151 };
00152
00153
00154 }
00155 }
00156
00157 #endif // MDS_TETRASIMILARITYMEASURE_H
00158