From df7b1c5707efae3a6304211db4f375650f77d193 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Wed, 8 Feb 2017 17:10:39 +0300 Subject: [PATCH 1/3] MedianFlow: fix status not erased in filterPointsInVectors --- modules/tracking/src/trackerMedianFlow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/tracking/src/trackerMedianFlow.cpp b/modules/tracking/src/trackerMedianFlow.cpp index 388ad3a3d..512425cfe 100644 --- a/modules/tracking/src/trackerMedianFlow.cpp +++ b/modules/tracking/src/trackerMedianFlow.cpp @@ -192,6 +192,7 @@ size_t filterPointsInVectors(std::vector& status, std::vector& vec1, } vec1.erase(vec1.begin() + first_bad_idx, vec1.end()); vec2.erase(vec2.begin() + first_bad_idx, vec2.end()); + status.erase(status.begin() + first_bad_idx, status.end()); return first_bad_idx; } From 2c33cb45d88fa5b293d0934f3b18eca53c8e1bfe Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 9 Feb 2017 11:54:55 +0300 Subject: [PATCH 2/3] MedianFlow: update thresholds in tests --- modules/tracking/test/test_trackers.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tracking/test/test_trackers.cpp b/modules/tracking/test/test_trackers.cpp index 5cbf19f52..4b8031294 100644 --- a/modules/tracking/test/test_trackers.cpp +++ b/modules/tracking/test/test_trackers.cpp @@ -461,7 +461,7 @@ PARAM_TEST_CASE(DistanceAndOverlap, string) TEST_P(DistanceAndOverlap, MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 120, .2f, NoTransform, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 35, .55f, NoTransform, 1, 1); test.run(); } @@ -486,7 +486,7 @@ TEST_P(DistanceAndOverlap, TLD) //Tests with shifted initial window TEST_P(DistanceAndOverlap, Shifted_Data_MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 120, .2f, CenterShiftLeft, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 80, .3f, CenterShiftLeft, 1, 1); test.run(); } @@ -511,7 +511,7 @@ TEST_P(DistanceAndOverlap, Shifted_Data_TLD) //Tests with scaled initial window TEST_P(DistanceAndOverlap, Scaled_Data_MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 120, .2f, Scale_1_1, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 25, .45f, Scale_1_1, 1, 1); test.run(); } From 8016ed28517afb974efb3c75641aa6522f5786fd Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 9 Feb 2017 15:36:58 +0300 Subject: [PATCH 3/3] tracking: fix overlap calculation --- modules/tracking/test/test_trackers.cpp | 56 ++++++++----------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/modules/tracking/test/test_trackers.cpp b/modules/tracking/test/test_trackers.cpp index 4b8031294..09a8a6d71 100644 --- a/modules/tracking/test/test_trackers.cpp +++ b/modules/tracking/test/test_trackers.cpp @@ -83,8 +83,8 @@ class TrackerTest { public: - TrackerTest(Ptr _tracker, string _video, float _overlapThreshold, - float _distanceThreshold, int _shift = NoTransform, int _segmentIdx = 1, int _numSegments = 10 ); + TrackerTest(Ptr _tracker, string _video, float _distanceThreshold, + float _overlapThreshold, int _shift = NoTransform, int _segmentIdx = 1, int _numSegments = 10 ); virtual ~TrackerTest(); virtual void run(); @@ -117,12 +117,12 @@ class TrackerTest }; -TrackerTest::TrackerTest(Ptr _tracker, string _video, float _overlapThreshold, - float _distanceThreshold, int _shift, int _segmentIdx, int _numSegments ) : +TrackerTest::TrackerTest(Ptr _tracker, string _video, float _distanceThreshold, + float _overlapThreshold, int _shift, int _segmentIdx, int _numSegments ) : tracker( _tracker ), video( _video ), - overlapThreshold( _distanceThreshold ), - distanceThreshold( _overlapThreshold ), + overlapThreshold( _overlapThreshold ), + distanceThreshold( _distanceThreshold ), segmentIdx(_segmentIdx), shift(_shift), numSegments(_numSegments) @@ -156,30 +156,8 @@ float TrackerTest::calcDistance( Rect a, Rect b ) float TrackerTest::calcOverlap( Rect a, Rect b ) { - float aArea = (float)(a.width * a.height); - float bArea = (float)(b.width * b.height); - - if( aArea < bArea ) - { - a.x -= ( b.width - a.width ) / 2; - a.y -= ( b.height - a.height ) / 2; - a.width = b.width; - a.height = b.height; - } - else - { - b.x -= ( a.width - b.width ) / 2; - b.y -= ( a.height - b.height ) / 2; - b.width = a.width; - b.height = a.height; - } - - Rect rectIntersection = a & b; - Rect rectUnion = a | b; - float iArea = (float)(rectIntersection.width * rectIntersection.height); - float uArea = (float)(rectUnion.width * rectUnion.height); - float overlap = iArea / uArea; - return overlap; + float rectIntersectionArea = (float)(a & b).area(); + return rectIntersectionArea / (a.area() + b.area() - rectIntersectionArea); } Rect TrackerTest::applyShift(Rect bb) @@ -461,19 +439,19 @@ PARAM_TEST_CASE(DistanceAndOverlap, string) TEST_P(DistanceAndOverlap, MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 35, .55f, NoTransform, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 35, .5f, NoTransform, 1, 1); test.run(); } TEST_P(DistanceAndOverlap, MIL) { - TrackerTest test( Tracker::create( "MIL" ), dataset, 30, 0.65f, NoTransform); + TrackerTest test( Tracker::create( "MIL" ), dataset, 30, .65f, NoTransform); test.run(); } TEST_P(DistanceAndOverlap, Boosting) { - TrackerTest test( Tracker::create( "BOOSTING" ), dataset, 70, .65f, NoTransform); + TrackerTest test( Tracker::create( "BOOSTING" ), dataset, 70, .7f, NoTransform); test.run(); } @@ -486,13 +464,13 @@ TEST_P(DistanceAndOverlap, TLD) //Tests with shifted initial window TEST_P(DistanceAndOverlap, Shifted_Data_MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 80, .3f, CenterShiftLeft, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 80, .2f, CenterShiftLeft, 1, 1); test.run(); } TEST_P(DistanceAndOverlap, Shifted_Data_MIL) { - TrackerTest test( Tracker::create( "MIL" ), dataset, 30, 0.65f, CenterShiftLeft); + TrackerTest test( Tracker::create( "MIL" ), dataset, 30, .6f, CenterShiftLeft); test.run(); } @@ -511,25 +489,25 @@ TEST_P(DistanceAndOverlap, Shifted_Data_TLD) //Tests with scaled initial window TEST_P(DistanceAndOverlap, Scaled_Data_MedianFlow) { - TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 25, .45f, Scale_1_1, 1, 1); + TrackerTest test( Tracker::create( "MEDIANFLOW" ), dataset, 25, .5f, Scale_1_1, 1, 1); test.run(); } TEST_P(DistanceAndOverlap, Scaled_Data_MIL) { - TrackerTest test( Tracker::create( "MIL" ), dataset, 30, 0.65f, Scale_1_1); + TrackerTest test( Tracker::create( "MIL" ), dataset, 30, .7f, Scale_1_1); test.run(); } TEST_P(DistanceAndOverlap, Scaled_Data_Boosting) { - TrackerTest test( Tracker::create( "BOOSTING" ), dataset, 80, .65f, Scale_1_1); + TrackerTest test( Tracker::create( "BOOSTING" ), dataset, 80, .7f, Scale_1_1); test.run(); } TEST_P(DistanceAndOverlap, Scaled_Data_TLD) { - TrackerTest test( Tracker::create( "TLD" ), dataset, 120, .4f, Scale_1_1); + TrackerTest test( Tracker::create( "TLD" ), dataset, 120, .45f, Scale_1_1); test.run(); }