1 #include "MultiTracker.h"
6 using namespace suanzi;
10 MultiTracker::MultiTracker(MetricsPtr m) : metrics(m)
15 MultiTracker::~MultiTracker()
20 TrackerPtr MultiTracker::createTracker(int id)
22 TrackerPtr t (new Tracker(id));
27 void MultiTracker::addTracker(TrackerPtr t)
29 trackers.push_back(t);
32 void MultiTracker::removeTracker(TrackerPtr t)
37 void MultiTracker::initNewTrackers(cv::Mat& iamge)
42 void MultiTracker::correctTrackers(MetricsPtr m, Mat& image)
46 void calculate_edistance()
50 #define MaxCost 100000
52 void MultiTracker::update(unsigned int total, const Detection* detections, const Mat& image)
55 // Generate cost matrix
56 int row = trackers.size();
58 MatrixXi cost_matrix = MatrixXi::Zero(row, col);
59 for (int i = 0; i < row; i++){
60 for (int j = 0; j < col; j++){
61 TrackerPtr tracker = trackers[i];
62 Detection det = detections[j];
67 cost_matrix(i, j) = cost;
72 VectorXi tracker_inds, bb_inds;
73 linear_sum_assignment(cost_matrix, tracker_inds, bb_inds);
76 vector<TrackerPtr> unmatched_trackers;
77 vector<Detection> unmatched_detection;
78 for (int i = 0; i < row; i++){
79 if (!(tracker_inds.array() == i).any()){
80 unmatched_trackers.push_back(trackers[i]);
83 for(int j = 0; j < col; j++){
84 if (!(bb_inds.array() == j).any()){
85 unmatched_detection.push_back(detections[j]);
90 // create new trackers for new detections