diff --git a/src/centroidtracker.cpp b/src/centroidtracker.cpp index 1b1c2aa..40edc7b 100644 --- a/src/centroidtracker.cpp +++ b/src/centroidtracker.cpp @@ -35,6 +35,12 @@ vector::size_type findMin(const vector &v, vector::size_typ return (min); } +bool sortbyfirst(const pair &a, + const pair &b) +{ + return (a.first < b.first); +} + std::vector>> CentroidTracker::update(vector> boxes) { if (boxes.empty()) { auto it = this->disappeared.begin(); @@ -82,9 +88,9 @@ std::vector>> CentroidTracker::update(vector< // Calculate Distances vector> Distances; - for (int i = 0; i < objectCentroids.size(); ++i) { + for (int i = 0; i < objectCentroids.size(); i++) { vector temp_D; - for (vector>::size_type j = 0; j < inputCentroids.size(); ++j) { + for (vector>::size_type j = 0; j < inputCentroids.size(); j++) { double dist = calcDistance(objectCentroids[i].first, objectCentroids[i].second, inputCentroids[j].first, inputCentroids[j].second); @@ -94,15 +100,10 @@ std::vector>> CentroidTracker::update(vector< } // load rows and cols + vector tmp_cols; vector cols; vector rows; - //find indices for cols - for (auto v: Distances) { - auto temp = findMin(v); - cols.push_back(temp); - } - //rows calculation //sort each mat row for rows calculation vector> D_copy; @@ -110,7 +111,6 @@ std::vector>> CentroidTracker::update(vector< sort(v.begin(), v.end()); D_copy.push_back(v); } - // use cols calc to find rows // slice first elem of each column vector> temp_rows; @@ -119,11 +119,19 @@ std::vector>> CentroidTracker::update(vector< temp_rows.push_back(make_pair(i[0], k)); k++; } + sort(temp_rows.begin(), temp_rows.end(), sortbyfirst); //print sorted indices of temp_rows for (auto const &x : temp_rows) { rows.push_back(x.second); } - + //find indices for cols + for (auto v: Distances) { + auto temp = findMin(v); + tmp_cols.push_back(temp); + } + for (int i=0;i usedRows; set usedCols;