X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=tracker.cc;h=d3397cf4736a9c14c5aaa1b3d8bf5335f267a1ed;hb=24d311902f1367ea7de57ce8f737c12934234577;hp=eafce846a00d58399d87aa265ecdd5ca90f12192;hpb=47873546df7b75c49b3973c9b0def619b7bcec46;p=mtp.git diff --git a/tracker.cc b/tracker.cc index eafce84..d3397cf 100644 --- a/tracker.cc +++ b/tracker.cc @@ -59,8 +59,16 @@ Tracker::~Tracker() { delete[] entrances; } +int Tracker::early_pair_node(int t, int l) { + return 1 + (2 * (t + 0) + 0) * _nb_locations + l; +} + +int Tracker::late_pair_node(int t, int l) { + return 1 + (2 * (t + 0) + 1) * _nb_locations + l; +} + void Tracker::build_graph() { - // Delete existing graph if there was one + // Delete the existing graph if there was one delete[] _edge_lengths; delete _graph; @@ -81,11 +89,10 @@ void Tracker::build_graph() { // frame to the sink _nb_locations * 2 + // The edges from the source to the entrances and from the exists - // to the sink (in every time frames but the first for the source, - // and last for the exits) + // to the sink (in every time frames but the first for the + // entrances, and last for the exits) (_nb_time_steps - 1) * (nb_exits + nb_entrances) + - // The edges for the motions, between every pair of successive - // frames + // The edges for the motions, between every successive frames (_nb_time_steps - 1) * nb_motions + // The edges inside the duplicated nodes _nb_locations * _nb_time_steps; @@ -99,13 +106,13 @@ void Tracker::build_graph() { _edge_lengths = new scalar_t[nb_edges]; // We put the in-node edges first, since these are the ones whose - // lengths we will have to set later, according to the detection - // scores + // lengths we will have to change before tracking, according to the + // detection scores for(int t = 0; t < _nb_time_steps; t++) { for(int l = 0; l < _nb_locations; l++) { - node_from[e] = 1 + (2 * (t + 0) + 0) * _nb_locations + l; - node_to[e] = 1 + (2 * (t + 0) + 1) * _nb_locations + l; + node_from[e] = early_pair_node(t, l); + node_to[e] = late_pair_node(t, l); e++; } } @@ -120,15 +127,15 @@ void Tracker::build_graph() { for(int t = 0; t < _nb_time_steps; t++) { for(int l = 0; l < _nb_locations; l++) { if(t == _nb_time_steps - 1) { - node_from[e] = 1 + (2 * (t + 0) + 1) * _nb_locations + l; + node_from[e] = late_pair_node(t, l); node_to[e] = sink; _edge_lengths[e] = 0.0; e++; } else { for(int k = 0; k < _nb_locations; k++) { if(allowed_motion[l][k]) { - node_from[e] = 1 + (2 * (t + 0) + 1) * _nb_locations + l; - node_to[e] = 1 + (2 * (t + 1) + 0) * _nb_locations + k; + node_from[e] = late_pair_node(t, l); + node_to[e] = early_pair_node(t+1, k); _edge_lengths[e] = 0.0; e++; } @@ -141,12 +148,12 @@ void Tracker::build_graph() { for(int l = 0; l < _nb_locations; l++) { if(t > 0 && entrances[l]) { node_from[e] = source; - node_to[e] = 1 + (2 * (t + 0) + 0) * _nb_locations + l; + node_to[e] = early_pair_node(t, l); _edge_lengths[e] = 0.0; e++; } if(t < _nb_time_steps - 1 && exits[l]) { - node_from[e] = 1 + (2 * (t + 0) + 1) * _nb_locations + l; + node_from[e] = late_pair_node(t, l); node_to[e] = sink; _edge_lengths[e] = 0.0; e++;