X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=mtp.git;a=blobdiff_plain;f=mtp_tracker.cc;h=b91a000ef3f84846d4c2967c7aea78056d61efe5;hp=b4e70abd6dad1e01362eb4a47cb16e0ba1016f56;hb=2bee794949c48671540bc70690d0b77c9168f953;hpb=c7d5cdf1982dacc5451f79599041b2e95524d3f7 diff --git a/mtp_tracker.cc b/mtp_tracker.cc index b4e70ab..b91a000 100644 --- a/mtp_tracker.cc +++ b/mtp_tracker.cc @@ -33,8 +33,8 @@ void MTPTracker::free() { delete _graph; deallocate_array(detection_scores); deallocate_array(allowed_motion); - delete[] exits; - delete[] entrances; + deallocate_array(exits); + deallocate_array(entrances); } void MTPTracker::allocate(int t, int l) { @@ -46,12 +46,10 @@ void MTPTracker::allocate(int t, int l) { detection_scores = allocate_array(nb_time_steps, nb_locations); allowed_motion = allocate_array(nb_locations, nb_locations); - entrances = new int[nb_locations]; - exits = new int[nb_locations]; + entrances = allocate_array(nb_time_steps, nb_locations); + exits = allocate_array(nb_time_steps, nb_locations); for(int l = 0; l < nb_locations; l++) { - entrances[l] = 0; - exits[l] = 0; for(int m = 0; m < nb_locations; m++) { allowed_motion[l][m] = 0; } @@ -60,12 +58,11 @@ void MTPTracker::allocate(int t, int l) { for(int t = 0; t < nb_time_steps; t++) { for(int l = 0; l < nb_locations; l++) { detection_scores[t][l] = 0.0; + entrances[t][l] = 0; + exits[t][l] = 0; } } - force_empty_first_frame = 0; - force_empty_last_frame = 0; - _edge_lengths = 0; _graph = 0; } @@ -84,20 +81,20 @@ void MTPTracker::write(ostream *os) { (*os) << endl; - (*os) << force_empty_first_frame << " " << force_empty_last_frame << endl; - - (*os) << endl; - - for(int l = 0; l < nb_locations; l++) { - (*os) << entrances[l]; - if(l < nb_locations - 1) (*os) << " "; else (*os) << endl; + for(int t = 0; t < nb_time_steps; t++) { + for(int l = 0; l < nb_locations; l++) { + (*os) << entrances[t][l]; + if(l < nb_locations - 1) (*os) << " "; else (*os) << endl; + } } (*os) << endl; - for(int l = 0; l < nb_locations; l++) { - (*os) << exits[l]; - if(l < nb_locations - 1) (*os) << " "; else (*os) << endl; + for(int t = 0; t < nb_time_steps; t++) { + for(int l = 0; l < nb_locations; l++) { + (*os) << exits[t][l]; + if(l < nb_locations - 1) (*os) << " "; else (*os) << endl; + } } (*os) << endl; @@ -123,14 +120,16 @@ void MTPTracker::read(istream *is) { } } - (*is) >> force_empty_first_frame >> force_empty_last_frame; - - for(int l = 0; l < nb_locations; l++) { - (*is) >> entrances[l]; + for(int t = 0; t < nb_time_steps; t++) { + for(int l = 0; l < nb_locations; l++) { + (*is) >> entrances[t][l]; + } } - for(int l = 0; l < nb_locations; l++) { - (*is) >> exits[l]; + for(int t = 0; t < nb_time_steps; t++) { + for(int l = 0; l < nb_locations; l++) { + (*is) >> exits[t][l]; + } } for(int t = 0; t < nb_time_steps; t++) { @@ -173,8 +172,8 @@ MTPTracker::~MTPTracker() { delete _graph; deallocate_array(detection_scores); deallocate_array(allowed_motion); - delete[] exits; - delete[] entrances; + deallocate_array(entrances); + deallocate_array(exits); } int MTPTracker::early_pair_node(int t, int l) { @@ -193,8 +192,10 @@ void MTPTracker::build_graph() { int nb_motions = 0, nb_exits = 0, nb_entrances = 0; for(int l = 0; l < nb_locations; l++) { - if(exits[l]) nb_exits++; - if(entrances[l]) nb_entrances++; + for(int t = 0; t < nb_time_steps; t++) { + if(exits[t][l]) nb_exits++; + if(entrances[t][l]) nb_entrances++; + } for(int m = 0; m < nb_locations; m++) { if(allowed_motion[l][m]) nb_motions++; } @@ -204,28 +205,13 @@ void MTPTracker::build_graph() { int nb_edges = // The edges from the source to the entrances and from 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) + + // to the sink + nb_exits + nb_entrances + // 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; - // Edges from the source to the first frame - if(force_empty_first_frame) { - nb_edges += nb_entrances; - } else { - nb_edges += nb_locations; - } - - // Edges from the last frame to the sink - if(force_empty_last_frame) { - nb_edges += nb_exits; - } else { - nb_edges += nb_locations; - } - int *node_from = new int[nb_edges]; int *node_to = new int[nb_edges]; @@ -246,28 +232,6 @@ void MTPTracker::build_graph() { } } - // The edges from the source to the first time frame - - for(int l = 0; l < nb_locations; l++) { - if(!force_empty_first_frame || entrances[l]) { - node_from[e] = source; - node_to[e] = 1 + l + 0 * nb_locations; - _edge_lengths[e] = 0.0; - e++; - } - } - - // The edges from the last frame to the sink - - for(int l = 0; l < nb_locations; l++) { - if(!force_empty_last_frame || exits[l]) { - node_from[e] = late_pair_node(nb_time_steps - 1, l); - node_to[e] = sink; - _edge_lengths[e] = 0.0; - e++; - } - } - // The edges between frames, corresponding to allowed motions for(int t = 0; t < nb_time_steps - 1; t++) { @@ -288,13 +252,13 @@ void MTPTracker::build_graph() { for(int t = 0; t < nb_time_steps; t++) { for(int l = 0; l < nb_locations; l++) { - if(t > 0 && entrances[l]) { + if(entrances[t][l]) { node_from[e] = source; node_to[e] = early_pair_node(t, l); _edge_lengths[e] = 0.0; e++; } - if(t < nb_time_steps - 1 && exits[l]) { + if(exits[t][l]) { node_from[e] = late_pair_node(t, l); node_to[e] = sink; _edge_lengths[e] = 0.0;