00001 //============================================================================== 00015 #ifndef MDS_TRISIMILARITYMEASURE_H 00016 #define MDS_TRISIMILARITYMEASURE_H 00017 00018 #include "mdsTriFeatures.h" 00019 00020 // MDSTk 00021 #include <MDSTk/Math/mdsVectorFunctions.h> 00022 00023 // STL 00024 #include <cmath> 00025 00026 00027 namespace mds 00028 { 00029 namespace seg 00030 { 00031 00032 //============================================================================== 00036 class CTriSimilarityMeasure 00037 { 00038 public: 00040 CTriSimilarityMeasure(double dThreshold = 0.5) : m_dThreshold(dThreshold) {} 00041 00043 virtual ~CTriSimilarityMeasure() {} 00044 00046 virtual double getSimilarity(const CTriFeatures& v1, const CTriFeatures& v2) = 0; 00047 00048 00052 bool checkSimilarity(const CTriFeatures& v1, const CTriFeatures& v2) 00053 { 00054 return (this->getSimilarity(v1, v2) > m_dThreshold); 00055 } 00056 00058 double getThreshold() { return m_dThreshold; } 00059 00061 void setThreshold(double dValue) { m_dThreshold = dValue; } 00062 00063 protected: 00065 double m_dThreshold; 00066 }; 00067 00068 00069 //============================================================================== 00074 class CTriMeanValueSimilarity : public CTriSimilarityMeasure 00075 { 00076 public: 00078 static const double DEFAULT_THRESHOLD; 00079 static const double DEFAULT_RHO; 00080 00081 public: 00083 CTriMeanValueSimilarity(double dThreshold = DEFAULT_THRESHOLD, 00084 double dRho = DEFAULT_RHO 00085 ); 00086 00088 virtual ~CTriMeanValueSimilarity() {} 00089 00091 virtual double getSimilarity(const CTriFeatures& v1, const CTriFeatures& v2); 00092 00093 protected: 00095 double m_dInvRho; 00096 }; 00097 00098 00099 } // namespace seg 00100 } // namespace mds 00101 00102 #endif // MDS_TRISIMILARITYMEASURE_H 00103