From: Tae-Young Chung Date: Wed, 3 Jul 2024 04:23:02 +0000 (+0900) Subject: Add Euclidean distance to be stable for tracking points X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=da429ae23f27b0adf690f893238a7e949a8df59c;p=platform%2Fcore%2Fapi%2Fsingleo.git Add Euclidean distance to be stable for tracking points Change-Id: I11452a96c639aafb6d25fde1405f3b7c1f3b1802 Signed-off-by: Tae-Young Chung --- diff --git a/inference/backends/private/include/PointsTracker.h b/inference/backends/private/include/PointsTracker.h index f44f20e..b561f25 100644 --- a/inference/backends/private/include/PointsTracker.h +++ b/inference/backends/private/include/PointsTracker.h @@ -30,7 +30,9 @@ class PointsTracker : protected AbstractTracker { private: int _numberOfPoints; std::vector _points; + float _distanceThresValue; + float distanceValue(std::tuple pt1, std::tuple pt2); public: PointsTracker(const int numbers); virtual ~PointsTracker(); diff --git a/inference/backends/private/src/PointsTracker.cpp b/inference/backends/private/src/PointsTracker.cpp index 6fdd182..ace9fa9 100644 --- a/inference/backends/private/src/PointsTracker.cpp +++ b/inference/backends/private/src/PointsTracker.cpp @@ -27,6 +27,7 @@ namespace inference PointsTracker::PointsTracker(const int numbers) : AbstractTracker(numbers) { _numberOfPoints = numbers; + _distanceThresValue = sqrt(2.f); } PointsTracker::~PointsTracker() @@ -34,6 +35,14 @@ PointsTracker::~PointsTracker() } +float PointsTracker::distanceValue(std::tuple pt1, std::tuple pt2) +{ + float diffX = get<0>(pt1) - get<0>(pt2); + float diffY = get<1>(pt1) - get<1>(pt2); + + return sqrt(diffX * diffX + diffY * diffY); +} + void PointsTracker::init(vector &points) { if (points.size() != _filters.size()) { @@ -56,6 +65,11 @@ vector &PointsTracker::predict() for (auto &point : _points) { auto newPoint = _filters[index]->predict(); + if (distanceValue({static_cast(point.x), static_cast(point.y)}, newPoint) <= _distanceThresValue) { + index++; + continue; + } + point.x = get<0>(newPoint); point.y = get<1>(newPoint); index++; @@ -72,8 +86,12 @@ vector &PointsTracker::update(vector &points) _filters[index]->update(point.x, point.y); auto newPoint = _filters[index]->get(); - _points[index].x = static_cast(get<0>(newPoint)); - _points[index].y = static_cast(get<1>(newPoint)); + if (distanceValue({static_cast(point.x), static_cast(point.y)}, newPoint) <= _distanceThresValue) { + _filters[index]->update(_points[index].x, _points[index].y); + } else { + _points[index].x = static_cast(get<0>(newPoint)); + _points[index].y = static_cast(get<1>(newPoint)); + } index++; }