diff --git a/sdk/plugins/compare.cpp b/sdk/plugins/compare.cpp index 62b52d5..5deb254 100644 --- a/sdk/plugins/compare.cpp +++ b/sdk/plugins/compare.cpp @@ -42,7 +42,7 @@ public: INF, L1, L2, - CosineSimilarity }; + Cosine }; private: BR_PROPERTY(Metric, metric, L2) @@ -76,8 +76,8 @@ private: case L2: result = norm(a, b, NORM_L2); break; - case CosineSimilarity: - result = cosineSimilarity(a, b); + case Cosine: + result = cosine(a, b); break; default: qFatal("Invalid metric"); @@ -89,33 +89,29 @@ private: return -log(result+1); } - static float cosineSimilarity(const Mat &a, const Mat &b) + static float cosine(const Mat &a, const Mat &b) { - assert((a.type() == CV_32FC1) && (b.type() == CV_32FC1)); - assert((a.rows == b.rows) && (a.cols == b.cols)); - - float denom = 0; - float tnum = 0; - float qnum = 0; + float dot = 0; + float magA = 0; + float magB = 0; for (int row=0; row(row,col); - float query = b.at(row,col); + const float target = a.at(row,col); + const float query = b.at(row,col); - denom += target * query; - tnum += target * target; - qnum += query * query; + dot += target * query; + magA += target * target; + magB += query * query; } } - return denom / (sqrt(tnum)*sqrt(qnum)); + return dot / (sqrt(magA)*sqrt(magB)); } }; BR_REGISTER(Distance, Dist) - /*! * \ingroup distances * \brief Fast 8-bit L1 distance diff --git a/share/openbr/doc b/share/openbr/doc index 1031e9e..19d116e 160000 --- a/share/openbr/doc +++ b/share/openbr/doc @@ -1 +1 @@ -Subproject commit 1031e9e416427f5dd8e9f4e7ff4dd74632626c22 +Subproject commit 19d116e16c35c55691e68ff137a48beb1f8ebf64