Oups, some renaming of variables was a bit too brutal. Fixed.
[mtp.git] / README.txt
index 8c38d68..793710b 100644 (file)
@@ -1,14 +1,50 @@
-This is a very simple implementation of the KSP applied to
-multi-target tracking. It is dubbed Multi-Tracked Path.
+
+* INTRODUCTION
+
+This is a very simple implementation of a variant of KSP applied to
+multi-target tracking dubbed "Multi-Tracked Paths" (MTP).
+
+It works with negative edge length and stops when it can not find any
+path of negative total length, instead of fixing the total number of
+paths to a constant K.
+
+* INSTALLATION
+
+This source code should compile with any C++ compiler. Just execute
+
+  make
+  ./mtp_example
+
+It will create a synthetic dummy example, save its description in
+tracker.dat, and print the optimal detected trajectories.
+
+If you now execute
+
+  ./mtp tracker.dat
+
+It will load the tracker.dat example, run the detection, save the
+detected trajectories in result.trj, and the underlying graph with
+occupied edges in graph.dot. You can produce a pdf from the latter
+with the dot command from graphviz:
+
+  dot < graph.dot -T pdf -o graph.pdf
+
+* IMPLEMENTATION
 
 The two main classes are MTPGraph and Tracker.
 
-MTPGraph allows to define a directed acyclic graph (DAG), to associate
-a length to each of its edge (which can be negative), and to compute
-the family of paths in this graph that minimize the sum of the length
-of their edges.
+The MTPGraph class stores a directed acyclic graph (DAG), with a
+length for each edge -- which can be negative -- and can compute the
+family of paths in this graph that minimizes the sum of edge lengths.
+
+This means that it will iteratively add paths as long as it can find
+some with negative length. If there are no such path, it will compute
+no path at all. Note that the solution it finds is globally
+optimal. Note that the procedure is similar to that of KSP, in the
+sense that the family it computes eventually is globally optimal, even
+if the procedure is iterative.
 
-Tracker allows
+The Tracker class allows
 
  (1) to define a spatial topology composed of
 
@@ -20,14 +56,27 @@ Tracker allows
 
  (2) to define a number of time steps
 
- (3) to set for every location and time a detection score
+ (3) to set for every location and time a detection score, which
+ should be equal to log(P(Y = 1 | X)/P(Y = 0 | X)) where Y stands for
+ the location occupancy and X for the observations.
 
-From this input, it computes the best set of disjoint trajectories
+From this setting, it computes the best set of disjoint trajectories
 consistent with the topology, which maximizes the overall detection
 score (i.e. the sum of the detection scores of the nodes visited by
 the trajectories)
 
-The file mtp.cc gives a very simple example.
+The Tracker class uses the MTPGraph. From the definition of the
+spatial topology, it builds a graph with one source, one sink, and two
+nodes per location and time. This structure ensures the trajectories
+computed by the tracker to be node-disjoint by forcing the paths
+computed by the MTPGraph to be edge-disjoint. The edges from the
+source or to the sink, or between these pairs, are of length zero, and
+the edge between the two nodes of such a pair has a length equal to
+the opposite of the detection score.
+
+The file mtp.cc gives a very simple usage example of the Tracker
+class.
 
+--
 François Fleuret
 August 2012