diff --git a/include/tracker.h b/include/tracker.h index 4f4bddc16de3875291efad3647f67c7866e1f6f4..50f2225a9cd6f4af4d83da761f640743707fc3c3 100644 --- a/include/tracker.h +++ b/include/tracker.h @@ -318,6 +318,7 @@ public: // gibt -1 zurueck, wenn frame oder naechster frame nicht existiert // entfernung ist absolut double distanceToNextFrame(int frame) const; + void syncTrackPersonMarkerID(TrackPoint &tp); }; //mHeightCount wird nicht e3xportiert und auch nicht wieder eingelesen -> nach import auf 0 obwohl auf height ein wert steht, daher immer mheight auf -1 testen!!! @@ -489,6 +490,7 @@ public: void purge(int frame); + private: bool tryMergeTrajectories(const TrackPoint& v, size_t i, int frame); @@ -499,4 +501,6 @@ private: void preCalculateImagePyramids(int level); }; + + #endif diff --git a/src/tracker.cpp b/src/tracker.cpp index b9a45baaf7bb7982e63ec50b6242a49107b16b7c..46d6b7119d210ea7ea80139eb58719956fbeef1b 100644 --- a/src/tracker.cpp +++ b/src/tracker.cpp @@ -464,8 +464,9 @@ bool TrackPerson::insertAtFrame(int frame, const TrackPoint &p, int persNr, bool for (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); } - + syncTrackPersonMarkerID(tp); // Funktion sucht, wie markerID von TrackPoint ist und macht Dinge abhängig davon und vom vorherigen TrackPoint replace(frame-mFirstFrame, tp); + if (tp.qual() > 100) // manual add // after inserting, because p ist const (*this)[frame-mFirstFrame].setQual(100); // so moving of a point is possible //debout << "Warning: frame exists already in trajectory!" << endl; @@ -1075,7 +1076,11 @@ bool Tracker::addPoint(TrackPoint &p, int frame, QSet<int> onlyVisible, int *per if (pers != NULL) *pers = iNearest; + + syncTrackPersonMarkerID(p); + (*this)[iNearest].setNewReco(true); + } //--i; @@ -2075,17 +2080,17 @@ void Tracker::purge(int frame) // Brief: Synchronize TrackPoint.mMarkerID with TrackPerson.mMarkerID // set PersonMarkerID from TrackPointMarkerID if MarkerID == -1 and check if not other "real ID" was detected - trigger warning otherwise // Zu entscheiden: nutzung als funktion mit input+output oder als aufruf mit (*this)[i] -// wie setTrackPersonHeight() ???? -void Tracker::syncTrackPersonMarkerID(QList<TrackPoint> &pL) // usage of &pL für PointList oder &p für Point ??? +void TrackPerson::syncTrackPersonMarkerID(TrackPoint &tp) // usage of &pL für PointList oder &p für Point ??? { - for (int i = 0; i < size(); ++i) // ueber TrackPerson + int tpMarkerID = tp.markerID(); //MarkerID of currently handled trackpoint + + if (tpMarkerID != -1) { - if (TrackPoint.mMarkerID[i]!=-1) // first time a Person is found but marker is not detected + if (mMarkerID == -1) // first time a Person is found { - TrackPerson.mMarkerID = TrackPoint.mMarkerID; + mMarkerID = tpMarkerID; // set TrackPerson MarkerID equal to TrackPoint MarkerID //pL[i].markerID(); } - // else if (TrackPerson.mMarkerID == TrackPoint.mMarkerID){// do nothin all is fine} - else if (TrackPerson.mMarkerID != TrackPoint.mMarkerID) + else if (mMarkerID != tpMarkerID) { cout << "ERROR: Two MarkerIDs were found for one trajectory." << endl; }