diff --git a/include/tracker.h b/include/tracker.h index bac83d6e0dd1aa16c1b5847ecfabb373bcee1e39..1b53288747c5dec366347e1846656e02c5c8a67d 100644 --- a/include/tracker.h +++ b/include/tracker.h @@ -91,6 +91,10 @@ public: const TrackPoint &operator=(const Vec2F &v); const TrackPoint &operator+=(const Vec2F &v); const TrackPoint operator+(const Vec2F &v) const; + + static constexpr int minDetectionQual = 80; + static constexpr int bestDetectionQual = 100; + [[nodiscard]] bool isDetection() const; }; diff --git a/src/tracker.cpp b/src/tracker.cpp index e668f2ed5f4143343f4a5e5c055897b15a798706..4eb1ff784b03ca87f7285878c3b9b8cd58665fe7 100644 --- a/src/tracker.cpp +++ b/src/tracker.cpp @@ -78,6 +78,11 @@ const TrackPoint TrackPoint::operator+(const Vec2F &v) const return TrackPoint(*this) += v; // Vec2F(mX + v.mX, mY + v.mY); } +bool TrackPoint::isDetection() const +{ + return mQual > minDetectionQual; +} + //-------------------------------------------------------------------------- // the list index is the frame number plus mFirstFrame 0..mLastFrame-mFirstFrame @@ -342,11 +347,11 @@ double TrackPerson::getNearestZ(int i, int *extrapolated) const */ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, bool extrapolate) { - int i; Vec2F tmp; // ua. zur linearen Interpolation TrackPoint tp; // default: 0 = ist schlechteste qualitaet double distance; + if(frame > mLastFrame) { // lineare interpolation, wenn frames uebersprungen wurden @@ -356,7 +361,7 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, tmp.setY((point.y() - last().y()) / (frame - mLastFrame)); tp = last(); tp.setQual(0); - for(i = 0; i < frame - mLastFrame - 1; ++i) + for(int i = 0; i < frame - mLastFrame - 1; ++i) { tp += tmp; append(tp); @@ -414,7 +419,7 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, tmp.setY((point.y() - first().y()) / (mFirstFrame - frame)); tp = first(); tp.setQual(0); - for(i = 0; i < mFirstFrame - frame - 1; ++i) + for(int i = 0; i < mFirstFrame - frame - 1; ++i) { tp += tmp; prepend(tp); @@ -468,7 +473,8 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, // draufgesetzt wird!!! tp = point; - if(point.qual() < 100 && point.qual() > 80) // erkannte Person aber ohne strukturmarker + if(point.qual() < TrackPoint::bestDetectionQual && + point.isDetection()) // erkannte Person aber ohne strukturmarker { // wenn in angrenzenden Frames qual groesse 90 (100 oder durch vorheriges verschieben entstanden), dann // verschieben @@ -514,21 +520,23 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, << persNr + 1 << " in frame " << frame << "!" << std::endl; // qualitaet anpassen, da der weg zum pkt nicht der richtige gewesen sein kann // zurueck - for(anz = 1; trackPointExist(frame - anz) && (trackPointAt(frame - anz).qual() < 100); ++anz) + anz = 1; + while(trackPointExist(frame - anz) && !trackPointAt(frame - anz).isDetection()) { - ; + ++anz; } - for(i = 1; i < (anz - 1); + for(int i = 1; i < (anz - 1); ++i) // anz ist einer zu viel; zudem nur boie anz-1 , da sonst eh nur mit 1 multipliziert wuerde { (*this)[frame - mFirstFrame - i].setQual((i * trackPointAt(frame - i).qual()) / anz); } // vor - for(anz = 1; trackPointExist(frame + anz) && (trackPointAt(frame + anz).qual() < 100); ++anz) + anz = 1; + while(trackPointExist(frame + anz) && !trackPointAt(frame + anz).isDetection()) { - ; + ++anz; } - for(i = 1; i < (anz - 1); + for(int i = 1; i < (anz - 1); ++i) // anz ist einer zu viel; zudem nur boie anz-1 , da sonst eh nur mit 1 multipliziert wuerde { (*this)[frame - mFirstFrame + i].setQual((i * trackPointAt(frame + i).qual()) / anz); @@ -537,9 +545,9 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &point, int persNr, replace(frame - mFirstFrame, tp); - if(tp.qual() > 100) // manual add // after inserting, because point ist const + if(tp.qual() > TrackPoint::bestDetectionQual) // manual add // after inserting, because point ist const { - (*this)[frame - mFirstFrame].setQual(100); // so moving of a point is possible + (*this)[frame - mFirstFrame].setQual(TrackPoint::bestDetectionQual); // so moving of a point is possible } } else