X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=src%2FUtils.cpp;fp=src%2FUtils.cpp;h=c174e282436f9b010a0fa55b5991f369c6cc5078;hb=d06c701dfc59f196bac017708b626f0daa92973f;hp=0000000000000000000000000000000000000000;hpb=b5f0328f4054d19fcf8a6b870d5448be8087d29c;p=trackerpp.git diff --git a/src/Utils.cpp b/src/Utils.cpp new file mode 100644 index 0000000..c174e28 --- /dev/null +++ b/src/Utils.cpp @@ -0,0 +1,45 @@ +#include "Utils.h" + +using namespace suanzi; +using namespace cv; + +double distance_cosine(const Eigen::VectorXd& u, const Eigen::VectorXd& v) +{ + return (1 - u.dot(v) / std::sqrt(u.dot(u) * v.dot(v))); +} + +double distance_euclidean(const Eigen::VectorXd& u, const Eigen::VectorXd& v) +{ + Eigen::VectorXd d = u - v; + return std::sqrt(d.dot(d)); +} + + +Rect getRectInDetection(const Detection& d) +{ + Rect r; + r.x = d.center_x - d.width / 2; + r.y = d.center_y - d.height / 2; + r.width = d.width; + r.height = d.height; + return r; +} + +double calc_iou_ratio(const Rect& r1, const Rect& r2) +{ + double iou; + Rect r_inner = r1 & r2; + Rect r_union = r1 | r2; + if (r_inner.area() > 0){ + iou = 1.0 * r_inner.area() / r_union.area(); + }else{ + Rect rr; + rr.x = min(r1.x + r1.width, r2.x + r2.width); + rr.y = min(r1.y + r1.height, r2.y + r2.height); + rr.width = max(r1.x, r2.x) - rr.x; + rr.height = max(r1.y, r2.y) - rr.y; + iou = -1.0 * rr.area() / r_union.area(); + } + return iou; + +}