X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=tracker.cc;fp=tracker.cc;h=ce4dfc219a6534f47b6fc8c40229dc65ade90fb4;hb=14eafbcbbc5cb10464f39596b34eebce0a6922ed;hp=0e6ed6a4de53b86414da5e5208e473842b3005a0;hpb=924a2d8b5313d1bbe84515fc262db3c7e7d50355;p=mtp.git diff --git a/tracker.cc b/tracker.cc index 0e6ed6a..ce4dfc2 100644 --- a/tracker.cc +++ b/tracker.cc @@ -82,11 +82,12 @@ void Tracker::set_detection_score(int time, int location, scalar_t score) { } void Tracker::build_graph() { - // Delete existing graph + // Delete existing graph if there was one delete[] _edge_lengths; delete _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++; @@ -98,14 +99,22 @@ void Tracker::build_graph() { int nb_vertices = 2 + 2 * _nb_time_steps * _nb_locations; int nb_edges = + // The edges from the source to the first frame, and from the last + // 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 and last) (_nb_time_steps - 2) * (nb_exits + nb_entrances) + + // The edges for the motions, between every pair of successive + // frames (_nb_time_steps - 1) * nb_motions + + // The edges inside the duplicated nodes _nb_locations * _nb_time_steps; - int source = 0, sink = nb_vertices - 1; int *node_from = new int[nb_edges]; int *node_to = new int[nb_edges]; + + int source = 0, sink = nb_vertices - 1; int e = 0; _edge_lengths = new scalar_t[nb_edges];