Browse Source

added the k-shortest-paths algorithm
outsourced the graph definitions into an separate file

Helge Wrede 10 years ago
parent
commit
d167ff8e05
81 changed files with 1229 additions and 394 deletions
  1. 14 24
      CMakeLists.txt
  2. 0 0
      Documentation/html/DetectionSequence_8h_source.html
  3. 0 0
      Documentation/html/FileIO_8h_source.html
  4. 0 0
      Documentation/html/Logger_8h_source.html
  5. 0 0
      Documentation/html/MyMath_8h_source.html
  6. 0 0
      Documentation/html/ObjectData3D_8h_source.html
  7. 0 0
      Documentation/html/ObjectDataAngular_8h_source.html
  8. 0 0
      Documentation/html/ObjectDataMap_8h_source.html
  9. 0 0
      Documentation/html/ObjectData_8h_source.html
  10. 0 0
      Documentation/html/Parser_8h_source.html
  11. 0 0
      Documentation/html/Tracklet_8h_source.html
  12. 0 0
      Documentation/html/TwoStage_8h_source.html
  13. 14 13
      Documentation/html/annotated.html
  14. 1 1
      Documentation/html/classalgo_1_1TwoStage-members.html
  15. 4 4
      Documentation/html/classalgo_1_1TwoStage.html
  16. 13 13
      Documentation/html/classes.html
  17. 4 2
      Documentation/html/classutil_1_1FileIO-members.html
  18. 110 10
      Documentation/html/classutil_1_1FileIO.html
  19. 4 4
      Documentation/html/classutil_1_1Parser-members.html
  20. 16 16
      Documentation/html/classutil_1_1Parser.html
  21. 12 13
      Documentation/html/files.html
  22. 28 6
      Documentation/html/functions.html
  23. 28 6
      Documentation/html/functions_func.html
  24. 10 9
      Documentation/html/hierarchy.html
  25. 1 1
      Documentation/html/search/all_1.js
  26. 2 6
      Documentation/html/search/all_7.js
  27. 7 1
      Documentation/html/search/all_8.js
  28. 1 10
      Documentation/html/search/all_9.js
  29. 10 5
      Documentation/html/search/all_a.js
  30. 5 1
      Documentation/html/search/all_b.js
  31. 2 7
      Documentation/html/search/all_c.js
  32. 7 4
      Documentation/html/search/all_d.js
  33. 4 1
      Documentation/html/search/all_e.js
  34. 1 1
      Documentation/html/search/classes_2.js
  35. 1 1
      Documentation/html/search/classes_3.js
  36. 1 4
      Documentation/html/search/classes_4.js
  37. 4 1
      Documentation/html/search/classes_5.js
  38. 1 2
      Documentation/html/search/classes_6.js
  39. 1 1
      Documentation/html/search/functions_1.js
  40. 1 5
      Documentation/html/search/functions_7.js
  41. 6 5
      Documentation/html/search/functions_8.js
  42. 5 4
      Documentation/html/search/functions_9.js
  43. 4 1
      Documentation/html/search/functions_a.js
  44. 2 7
      Documentation/html/search/functions_b.js
  45. 7 2
      Documentation/html/search/functions_c.js
  46. 2 1
      Documentation/html/search/functions_d.js
  47. 3 3
      Documentation/html/search/searchdata.js
  48. 1 0
      Documentation/latex/annotated.tex
  49. 4 4
      Documentation/latex/classalgo_1_1TwoStage.tex
  50. BIN
      Documentation/latex/classcore_1_1ObjectData.pdf
  51. BIN
      Documentation/latex/classcore_1_1ObjectData3D.pdf
  52. BIN
      Documentation/latex/classcore_1_1ObjectDataAngular.pdf
  53. BIN
      Documentation/latex/classcore_1_1ObjectDataMap.pdf
  54. BIN
      Documentation/latex/classcore_1_1Tracklet.pdf
  55. 50 10
      Documentation/latex/classutil_1_1FileIO.tex
  56. 16 16
      Documentation/latex/classutil_1_1Parser.tex
  57. 1 0
      Documentation/latex/hierarchy.tex
  58. 1 0
      Documentation/latex/refman.tex
  59. 0 36
      algo/Definitions.h
  60. 336 0
      algo/KShortestPaths.cpp
  61. 156 0
      algo/KShortestPaths.h
  62. 12 11
      algo/TwoStage.cpp
  63. 9 8
      algo/TwoStage.h
  64. 0 28
      core/Definitions.h
  65. 0 1
      core/DetectionSequence.h
  66. 4 1
      core/ObjectData.h
  67. 2 2
      core/ObjectData3D.cpp
  68. 3 0
      core/ObjectData3D.h
  69. 1 3
      core/ObjectDataAngular.cpp
  70. 3 0
      core/ObjectDataAngular.h
  71. 3 0
      core/ObjectDataMap.h
  72. 3 0
      core/Tracklet.h
  73. 39 0
      graph/Definitions.h
  74. 127 12
      main/main.cpp
  75. 1 1
      main/preview.cpp
  76. 68 4
      util/FileIO.cpp
  77. 33 5
      util/FileIO.h
  78. 6 7
      util/Parser.cpp
  79. 11 12
      util/Parser.h
  80. 3 28
      visual/Visualizer.cpp
  81. 0 10
      visual/Visualizer.h

+ 14 - 24
CMakeLists.txt

@@ -8,30 +8,20 @@ include_directories(${HOME_LOCAL}/include)
 
 set(SOURCE_FILES
         main/main.cpp
-        core/DetectionSequence.cpp
-        core/DetectionSequence.h
-        core/ObjectData.cpp
-        core/ObjectData.h
-        core/ObjectDataMap.cpp
-        core/ObjectDataMap.h
-        core/Definitions.h
-        core/Tracklet.cpp
-        core/Tracklet.h
-        util/FileIO.cpp
-        util/FileIO.h
-        util/Parser.cpp
-        util/Parser.h
-        algo/TwoStage.cpp
-        algo/TwoStage.h
-        algo/Definitions.h
-        util/MyMath.cpp
-        util/MyMath.h
-        core/ObjectData3D.cpp
-        core/ObjectData3D.h
-        visual/Visualizer.cpp
-        visual/Visualizer.h
-        util/Logger.cpp
-        util/Logger.h core/ObjectDataAngular.cpp core/ObjectDataAngular.h)
+        core/DetectionSequence.cpp core/DetectionSequence.h
+        core/ObjectData.cpp core/ObjectData.h
+        core/ObjectDataMap.cpp core/ObjectDataMap.h
+        core/Tracklet.cpp core/Tracklet.h
+        util/FileIO.cpp util/FileIO.h
+        util/Parser.cpp util/Parser.h
+        algo/TwoStage.cpp algo/TwoStage.h
+        util/MyMath.cpp util/MyMath.h
+        core/ObjectData3D.cpp core/ObjectData3D.h
+        visual/Visualizer.cpp visual/Visualizer.h
+        util/Logger.cpp util/Logger.h
+        core/ObjectDataAngular.cpp core/ObjectDataAngular.h
+        algo/KShortestPaths.cpp algo/KShortestPaths.h
+        graph/Definitions.h)
 
 find_package(Doxygen)
 

File diff suppressed because it is too large
+ 0 - 0
Documentation/html/DetectionSequence_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/FileIO_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/Logger_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/MyMath_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/ObjectData3D_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/ObjectDataAngular_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/ObjectDataMap_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/ObjectData_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/Parser_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/Tracklet_8h_source.html


File diff suppressed because it is too large
+ 0 - 0
Documentation/html/TwoStage_8h_source.html


+ 14 - 13
Documentation/html/annotated.html

@@ -90,19 +90,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
 <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
 <tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>algo</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1TwoStage.html" target="_self">TwoStage</a></td><td class="desc"></td></tr>
-<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>core</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1DetectionSequence.html" target="_self">DetectionSequence</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData.html" target="_self">ObjectData</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData3D.html" target="_self">ObjectData3D</a></td><td class="desc"></td></tr>
-<tr id="row_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataAngular.html" target="_self">ObjectDataAngular</a></td><td class="desc"></td></tr>
-<tr id="row_1_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataMap.html" target="_self">ObjectDataMap</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1Tracklet.html" target="_self">Tracklet</a></td><td class="desc"></td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>util</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1FileIO.html" target="_self">FileIO</a></td><td class="desc"></td></tr>
-<tr id="row_2_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Logger.html" target="_self">Logger</a></td><td class="desc"></td></tr>
-<tr id="row_2_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1MyMath.html" target="_self">MyMath</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Parser.html" target="_self">Parser</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1KShortestPaths.html" target="_self">KShortestPaths</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1TwoStage.html" target="_self">TwoStage</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>core</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1DetectionSequence.html" target="_self">DetectionSequence</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData.html" target="_self">ObjectData</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData3D.html" target="_self">ObjectData3D</a></td><td class="desc"></td></tr>
+<tr id="row_1_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataAngular.html" target="_self">ObjectDataAngular</a></td><td class="desc"></td></tr>
+<tr id="row_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataMap.html" target="_self">ObjectDataMap</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1Tracklet.html" target="_self">Tracklet</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>util</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1FileIO.html" target="_self">FileIO</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Logger.html" target="_self">Logger</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1MyMath.html" target="_self">MyMath</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Parser.html" target="_self">Parser</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 1 - 1
Documentation/html/classalgo_1_1TwoStage-members.html

@@ -94,7 +94,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">CreateObjectGraph</a>(DirectedGraph &amp;graph, core::DetectionSequence &amp;detections)</td><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a">CreateObjectGraph</a>(DirectedGraph &amp;graph, const core::DetectionSequence &amp;detections)</td><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">CreateTrackletGraph</a>(DirectedGraph &amp;obj_graph, DirectedGraph &amp;tlt_graph, size_t frame_count)</td><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38">ExtractTracks</a>(DirectedGraph &amp;tlt_graph, size_t depth, std::vector&lt; core::TrackletPtr &gt; &amp;tracks)</td><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7">TwoStage</a>(size_t max_frame_skip, double penalty_value, size_t max_tracklet_count)</td><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html">algo::TwoStage</a></td><td class="entry"></td></tr>

+ 4 - 4
Documentation/html/classalgo_1_1TwoStage.html

@@ -101,8 +101,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 Public Member Functions</h2></td></tr>
 <tr class="memitem:ae302f9ea93d56155a9dbd0be060500f7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7">TwoStage</a> (size_t max_frame_skip, double penalty_value, size_t max_tracklet_count)</td></tr>
 <tr class="separator:ae302f9ea93d56155a9dbd0be060500f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa2b03f5bc30427ec5d0a7ca703e25e11"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">CreateObjectGraph</a> (DirectedGraph &amp;graph, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;detections)</td></tr>
-<tr class="separator:aa2b03f5bc30427ec5d0a7ca703e25e11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02dfe4e3fb244ecad13f676ce53d689a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a">CreateObjectGraph</a> (DirectedGraph &amp;graph, const <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;detections)</td></tr>
+<tr class="separator:a02dfe4e3fb244ecad13f676ce53d689a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae14cf79859b4275c862d6750b6bc6837"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">CreateTrackletGraph</a> (DirectedGraph &amp;obj_graph, DirectedGraph &amp;tlt_graph, size_t frame_count)</td></tr>
 <tr class="separator:ae14cf79859b4275c862d6750b6bc6837"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a09168d0ace15d689c9d594ca16b93c38"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38">ExtractTracks</a> (DirectedGraph &amp;tlt_graph, size_t depth, std::vector&lt; core::TrackletPtr &gt; &amp;tracks)</td></tr>
@@ -152,7 +152,7 @@ Public Member Functions</h2></td></tr>
 </div>
 </div>
 <h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="aa2b03f5bc30427ec5d0a7ca703e25e11"></a>
+<a class="anchor" id="a02dfe4e3fb244ecad13f676ce53d689a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
@@ -165,7 +165,7 @@ Public Member Functions</h2></td></tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;&#160;</td>
+          <td class="paramtype">const <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;&#160;</td>
           <td class="paramname"><em>detections</em>&#160;</td>
         </tr>
         <tr>

+ 13 - 13
Documentation/html/classes.html

@@ -87,25 +87,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="title">Class Index</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
+<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_K">K</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
 <table class="classindex">
 <tr><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;D&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_K"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;K&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="classcore_1_1ObjectData3D.html">ObjectData3D</a> (core)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;&#160;</div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="classcore_1_1ObjectDataAngular.html">ObjectDataAngular</a> (core)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classcore_1_1DetectionSequence.html">DetectionSequence</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classalgo_1_1KShortestPaths.html">KShortestPaths</a> (algo)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1MyMath.html">MyMath</a> (util)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classcore_1_1ObjectDataMap.html">ObjectDataMap</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classcore_1_1Tracklet.html">Tracklet</a> (core)&#160;&#160;&#160;</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
 </td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;L&#160;&#160;</div></td></tr></table>
 </td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classcore_1_1ObjectDataMap.html">ObjectDataMap</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classalgo_1_1TwoStage.html">TwoStage</a> (algo)&#160;&#160;&#160;</td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;P&#160;&#160;</div></td></tr></table>
-</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classcore_1_1DetectionSequence.html">DetectionSequence</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1Logger.html">Logger</a> (util)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> (core)&#160;&#160;&#160;</td><td></td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classcore_1_1ObjectData3D.html">ObjectData3D</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1Parser.html">Parser</a> (util)&#160;&#160;&#160;</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classcore_1_1ObjectDataAngular.html">ObjectDataAngular</a> (core)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;&#160;</div></td></tr></table>
-</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classutil_1_1FileIO.html">FileIO</a> (util)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1MyMath.html">MyMath</a> (util)&#160;&#160;&#160;</td><td></td><td></td></tr>
-<tr><td></td><td></td><td></td><td valign="top"><a class="el" href="classcore_1_1Tracklet.html">Tracklet</a> (core)&#160;&#160;&#160;</td><td></td></tr>
+</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;P&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="classalgo_1_1TwoStage.html">TwoStage</a> (algo)&#160;&#160;&#160;</td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="classutil_1_1FileIO.html">FileIO</a> (util)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1Logger.html">Logger</a> (util)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> (core)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classutil_1_1Parser.html">Parser</a> (util)&#160;&#160;&#160;</td><td></td></tr>
 <tr><td></td><td></td><td></td><td></td><td></td></tr>
 </table>
-<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
+<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_K">K</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 4 - 2
Documentation/html/classutil_1_1FileIO-members.html

@@ -94,8 +94,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classutil_1_1FileIO.html">util::FileIO</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">ReadCSV</a>(core::Vector3d &amp;values, const std::string &amp;filename, const char &amp;delimiter=';')</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classutil_1_1FileIO.html#a5d145cb872989165f76d00c343170bc5">ReadCSV</a>(core::Vector2d &amp;values, const std::string &amp;filename, const char &amp;delimiter=';')</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa">ListFiles</a>(const std::string &amp;folder, std::vector&lt; std::string &gt; &amp;file_names, bool sort=true)</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677">ReadCSV</a>(Vector3d &amp;values, const std::string &amp;filename, char delimiter=';')</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1FileIO.html#a264c9b694fd7218635c8a783956d2c1e">ReadCSV</a>(Vector2d &amp;values, const std::string &amp;filename, char delimiter=';')</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classutil_1_1FileIO.html#a862586aced240e732ecd35773b57c267">WriteCSVMatlab</a>(DirectedGraph &amp;graph, const std::string &amp;file_name, char delimiter=';')</td><td class="entry"><a class="el" href="classutil_1_1FileIO.html">util::FileIO</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 110 - 10
Documentation/html/classutil_1_1FileIO.html

@@ -99,15 +99,67 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:acfce3977f435f2b024984da05408dfb4"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">ReadCSV</a> (core::Vector3d &amp;values, const std::string &amp;filename, const char &amp;delimiter=';')</td></tr>
-<tr class="separator:acfce3977f435f2b024984da05408dfb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5d145cb872989165f76d00c343170bc5"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#a5d145cb872989165f76d00c343170bc5">ReadCSV</a> (core::Vector2d &amp;values, const std::string &amp;filename, const char &amp;delimiter=';')</td></tr>
-<tr class="separator:a5d145cb872989165f76d00c343170bc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af42c183525923014e142a10a626d3677"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677">ReadCSV</a> (Vector3d &amp;values, const std::string &amp;filename, char delimiter=';')</td></tr>
+<tr class="separator:af42c183525923014e142a10a626d3677"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a264c9b694fd7218635c8a783956d2c1e"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#a264c9b694fd7218635c8a783956d2c1e">ReadCSV</a> (Vector2d &amp;values, const std::string &amp;filename, char delimiter=';')</td></tr>
+<tr class="separator:a264c9b694fd7218635c8a783956d2c1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e290e22083d49619b757bfca96a51fa"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa">ListFiles</a> (const std::string &amp;folder, std::vector&lt; std::string &gt; &amp;file_names, bool sort=true)</td></tr>
+<tr class="separator:a6e290e22083d49619b757bfca96a51fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a862586aced240e732ecd35773b57c267"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#a862586aced240e732ecd35773b57c267">WriteCSVMatlab</a> (DirectedGraph &amp;graph, const std::string &amp;file_name, char delimiter=';')</td></tr>
+<tr class="separator:a862586aced240e732ecd35773b57c267"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Utility class for file in- and output. </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="acfce3977f435f2b024984da05408dfb4"></a>
+<a class="anchor" id="a6e290e22083d49619b757bfca96a51fa"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void util::FileIO::ListFiles </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>folder</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">std::vector&lt; std::string &gt; &amp;&#160;</td>
+          <td class="paramname"><em>file_names</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>sort</em> = <code>true</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Lists all file names in the given folder. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">folder</td><td>The folder to look into </td></tr>
+    <tr><td class="paramname">file_names</td><td>The vector to store the file names into </td></tr>
+    <tr><td class="paramname">sort</td><td>True, if the files should be sorted alphabetically </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="af42c183525923014e142a10a626d3677"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -117,7 +169,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::FileIO::ReadCSV </td>
           <td>(</td>
-          <td class="paramtype">core::Vector3d &amp;&#160;</td>
+          <td class="paramtype">Vector3d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
@@ -129,7 +181,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char &amp;&#160;</td>
+          <td class="paramtype">char&#160;</td>
           <td class="paramname"><em>delimiter</em> = <code>';'</code>&#160;</td>
         </tr>
         <tr>
@@ -155,7 +207,7 @@ Static Public Member Functions</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a5d145cb872989165f76d00c343170bc5"></a>
+<a class="anchor" id="a264c9b694fd7218635c8a783956d2c1e"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -165,7 +217,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::FileIO::ReadCSV </td>
           <td>(</td>
-          <td class="paramtype">core::Vector2d &amp;&#160;</td>
+          <td class="paramtype">Vector2d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
@@ -177,7 +229,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char &amp;&#160;</td>
+          <td class="paramtype">char&#160;</td>
           <td class="paramname"><em>delimiter</em> = <code>';'</code>&#160;</td>
         </tr>
         <tr>
@@ -201,6 +253,54 @@ Static Public Member Functions</h2></td></tr>
   </dd>
 </dl>
 
+</div>
+</div>
+<a class="anchor" id="a862586aced240e732ecd35773b57c267"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void util::FileIO::WriteCSVMatlab </td>
+          <td>(</td>
+          <td class="paramtype">DirectedGraph &amp;&#160;</td>
+          <td class="paramname"><em>graph</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>file_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char&#160;</td>
+          <td class="paramname"><em>delimiter</em> = <code>';'</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Writes the given graph into a CSV file with an format readable by Matlab. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">graph</td><td>The graph to write </td></tr>
+    <tr><td class="paramname">file_name</td><td>The name of the file to write into </td></tr>
+    <tr><td class="paramname">delimiter</td><td>The delimiter to use </td></tr>
+  </table>
+  </dd>
+</dl>
+
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following files:<ul>

+ 4 - 4
Documentation/html/classutil_1_1Parser-members.html

@@ -94,10 +94,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classutil_1_1Parser.html">util::Parser</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92">ParseObjectData3D</a>(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">ParseObjectDataAngular</a>(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1Parser.html#a5a4c53339551dbf67bd351fd0fe2c087">ParseObjectDataAngular</a>(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">ParseObjectDataMap</a>(const std::vector&lt; std::string &gt; &amp;keys, const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298">ParseObjectData3D</a>(const Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c">ParseObjectDataAngular</a>(const Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classutil_1_1Parser.html#a0f2ad399b88036840fa206704253cb56">ParseObjectDataAngular</a>(const Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classutil_1_1Parser.html#a25a262843b391df324db620205a13156">ParseObjectDataMap</a>(const std::vector&lt; std::string &gt; &amp;keys, const Vector3d &amp;values, core::DetectionSequence &amp;sequence)</td><td class="entry"><a class="el" href="classutil_1_1Parser.html">util::Parser</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 16 - 16
Documentation/html/classutil_1_1Parser.html

@@ -99,19 +99,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:ac2095e8699706079dde135098f30de0a"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">ParseObjectDataMap</a> (const std::vector&lt; std::string &gt; &amp;keys, const core::Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
-<tr class="separator:ac2095e8699706079dde135098f30de0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afbc0421d8672a418284efb5a9b6cec92"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92">ParseObjectData3D</a> (const core::Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
-<tr class="separator:afbc0421d8672a418284efb5a9b6cec92"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a314cfd3ebd16ab18cd132e7d8dd4c04a"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">ParseObjectDataAngular</a> (const core::Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
-<tr class="separator:a314cfd3ebd16ab18cd132e7d8dd4c04a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a4c53339551dbf67bd351fd0fe2c087"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#a5a4c53339551dbf67bd351fd0fe2c087">ParseObjectDataAngular</a> (const core::Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)</td></tr>
-<tr class="separator:a5a4c53339551dbf67bd351fd0fe2c087"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25a262843b391df324db620205a13156"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#a25a262843b391df324db620205a13156">ParseObjectDataMap</a> (const std::vector&lt; std::string &gt; &amp;keys, const Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
+<tr class="separator:a25a262843b391df324db620205a13156"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4372acb257c7c0292439f1c863287298"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298">ParseObjectData3D</a> (const Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
+<tr class="separator:a4372acb257c7c0292439f1c863287298"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acad67e4a565fb4a008a2d85fa9ea215c"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c">ParseObjectDataAngular</a> (const Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence)</td></tr>
+<tr class="separator:acad67e4a565fb4a008a2d85fa9ea215c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f2ad399b88036840fa206704253cb56"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1Parser.html#a0f2ad399b88036840fa206704253cb56">ParseObjectDataAngular</a> (const Vector3d &amp;values, <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)</td></tr>
+<tr class="separator:a0f2ad399b88036840fa206704253cb56"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Utility class for parsing diverse objects. </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="afbc0421d8672a418284efb5a9b6cec92"></a>
+<a class="anchor" id="a4372acb257c7c0292439f1c863287298"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -121,7 +121,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::Parser::ParseObjectData3D </td>
           <td>(</td>
-          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramtype">const Vector3d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
@@ -152,7 +152,7 @@ Static Public Member Functions</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a314cfd3ebd16ab18cd132e7d8dd4c04a"></a>
+<a class="anchor" id="acad67e4a565fb4a008a2d85fa9ea215c"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -162,7 +162,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::Parser::ParseObjectDataAngular </td>
           <td>(</td>
-          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramtype">const Vector3d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
@@ -193,7 +193,7 @@ Static Public Member Functions</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a5a4c53339551dbf67bd351fd0fe2c087"></a>
+<a class="anchor" id="a0f2ad399b88036840fa206704253cb56"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -203,7 +203,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::Parser::ParseObjectDataAngular </td>
           <td>(</td>
-          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramtype">const Vector3d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
@@ -255,7 +255,7 @@ Static Public Member Functions</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="ac2095e8699706079dde135098f30de0a"></a>
+<a class="anchor" id="a25a262843b391df324db620205a13156"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -271,7 +271,7 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramtype">const Vector3d &amp;&#160;</td>
           <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>

+ 12 - 13
Documentation/html/files.html

@@ -87,21 +87,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
 <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
 <tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_14879d16547af1f036be9d5915ae128f.html" target="_self">algo</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="algo_2Definitions_8h_source.html"><span class="icondoc"></span></a><b>Definitions.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="KShortestPaths_8h_source.html"><span class="icondoc"></span></a><b>KShortestPaths.h</b></td><td class="desc"></td></tr>
 <tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="TwoStage_8h_source.html"><span class="icondoc"></span></a><b>TwoStage.h</b></td><td class="desc"></td></tr>
 <tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html" target="_self">core</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="core_2Definitions_8h_source.html"><span class="icondoc"></span></a><b>Definitions.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="DetectionSequence_8h_source.html"><span class="icondoc"></span></a><b>DetectionSequence.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectData_8h_source.html"><span class="icondoc"></span></a><b>ObjectData.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectData3D_8h_source.html"><span class="icondoc"></span></a><b>ObjectData3D.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectDataAngular_8h_source.html"><span class="icondoc"></span></a><b>ObjectDataAngular.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectDataMap_8h_source.html"><span class="icondoc"></span></a><b>ObjectDataMap.h</b></td><td class="desc"></td></tr>
-<tr id="row_1_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Tracklet_8h_source.html"><span class="icondoc"></span></a><b>Tracklet.h</b></td><td class="desc"></td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')">&#160;</span><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html" target="_self">util</a></td><td class="desc"></td></tr>
-<tr id="row_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="FileIO_8h_source.html"><span class="icondoc"></span></a><b>FileIO.h</b></td><td class="desc"></td></tr>
-<tr id="row_2_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Logger_8h_source.html"><span class="icondoc"></span></a><b>Logger.h</b></td><td class="desc"></td></tr>
-<tr id="row_2_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="MyMath_8h_source.html"><span class="icondoc"></span></a><b>MyMath.h</b></td><td class="desc"></td></tr>
-<tr id="row_2_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Parser_8h_source.html"><span class="icondoc"></span></a><b>Parser.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="DetectionSequence_8h_source.html"><span class="icondoc"></span></a><b>DetectionSequence.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectData_8h_source.html"><span class="icondoc"></span></a><b>ObjectData.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectData3D_8h_source.html"><span class="icondoc"></span></a><b>ObjectData3D.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectDataAngular_8h_source.html"><span class="icondoc"></span></a><b>ObjectDataAngular.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="ObjectDataMap_8h_source.html"><span class="icondoc"></span></a><b>ObjectDataMap.h</b></td><td class="desc"></td></tr>
+<tr id="row_1_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Tracklet_8h_source.html"><span class="icondoc"></span></a><b>Tracklet.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')">&#160;</span><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html" target="_self">util</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="FileIO_8h_source.html"><span class="icondoc"></span></a><b>FileIO.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Logger_8h_source.html"><span class="icondoc"></span></a><b>Logger.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="MyMath_8h_source.html"><span class="icondoc"></span></a><b>MyMath.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="Parser_8h_source.html"><span class="icondoc"></span></a><b>Parser.h</b></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 28 - 6
Documentation/html/functions.html

@@ -83,13 +83,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="#index_f"><span>f</span></a></li>
       <li><a href="#index_g"><span>g</span></a></li>
       <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_k"><span>k</span></a></li>
       <li><a href="#index_l"><span>l</span></a></li>
       <li><a href="#index_o"><span>o</span></a></li>
       <li><a href="#index_p"><span>p</span></a></li>
       <li><a href="#index_r"><span>r</span></a></li>
       <li><a href="#index_s"><span>s</span></a></li>
       <li><a href="#index_t"><span>t</span></a></li>
-      <li class="current"><a href="#index_v"><span>v</span></a></li>
+      <li><a href="#index_v"><span>v</span></a></li>
+      <li class="current"><a href="#index_w"><span>w</span></a></li>
     </ul>
   </div>
 </div><!-- top -->
@@ -135,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 , <a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">core::Tracklet</a>
 </li>
 <li>CreateObjectGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a">algo::TwoStage</a>
 </li>
 <li>CreateTrackletGraph()
 : <a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">algo::TwoStage</a>
@@ -251,10 +253,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </ul>
 
 
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KShortestPaths()
+: <a class="el" href="classalgo_1_1KShortestPaths.html#a2805f56b9abb112f10c752d125d623d8">algo::KShortestPaths</a>
+</li>
+</ul>
+
+
 <h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
 <li>Lerp()
 : <a class="el" href="classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1">util::MyMath</a>
 </li>
+<li>ListFiles()
+: <a class="el" href="classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa">util::FileIO</a>
+</li>
 <li>LogDebug()
 : <a class="el" href="classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee">util::Logger</a>
 </li>
@@ -295,13 +307,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>ParseObjectData3D()
-: <a class="el" href="classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298">util::Parser</a>
 </li>
 <li>ParseObjectDataAngular()
-: <a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c">util::Parser</a>
 </li>
 <li>ParseObjectDataMap()
-: <a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#a25a262843b391df324db620205a13156">util::Parser</a>
 </li>
 <li>Put()
 : <a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">core::ObjectDataMap</a>
@@ -311,7 +323,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>ReadCSV()
-: <a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">util::FileIO</a>
+: <a class="el" href="classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677">util::FileIO</a>
+</li>
+<li>Run()
+: <a class="el" href="classalgo_1_1KShortestPaths.html#ae77137136462303e951f631ba7db6adf">algo::KShortestPaths</a>
 </li>
 </ul>
 
@@ -360,6 +375,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 , <a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">core::Tracklet</a>
 </li>
 </ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>WriteCSVMatlab()
+: <a class="el" href="classutil_1_1FileIO.html#a862586aced240e732ecd35773b57c267">util::FileIO</a>
+</li>
+</ul>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 28 - 6
Documentation/html/functions_func.html

@@ -83,13 +83,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="#index_f"><span>f</span></a></li>
       <li><a href="#index_g"><span>g</span></a></li>
       <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_k"><span>k</span></a></li>
       <li><a href="#index_l"><span>l</span></a></li>
       <li><a href="#index_o"><span>o</span></a></li>
       <li><a href="#index_p"><span>p</span></a></li>
       <li><a href="#index_r"><span>r</span></a></li>
       <li><a href="#index_s"><span>s</span></a></li>
       <li><a href="#index_t"><span>t</span></a></li>
-      <li class="current"><a href="#index_v"><span>v</span></a></li>
+      <li><a href="#index_v"><span>v</span></a></li>
+      <li class="current"><a href="#index_w"><span>w</span></a></li>
     </ul>
   </div>
 </div><!-- top -->
@@ -135,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 , <a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">core::Tracklet</a>
 </li>
 <li>CreateObjectGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a">algo::TwoStage</a>
 </li>
 <li>CreateTrackletGraph()
 : <a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">algo::TwoStage</a>
@@ -251,10 +253,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </ul>
 
 
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KShortestPaths()
+: <a class="el" href="classalgo_1_1KShortestPaths.html#a2805f56b9abb112f10c752d125d623d8">algo::KShortestPaths</a>
+</li>
+</ul>
+
+
 <h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
 <li>Lerp()
 : <a class="el" href="classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1">util::MyMath</a>
 </li>
+<li>ListFiles()
+: <a class="el" href="classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa">util::FileIO</a>
+</li>
 <li>LogDebug()
 : <a class="el" href="classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee">util::Logger</a>
 </li>
@@ -291,13 +303,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
 <li>ParseObjectData3D()
-: <a class="el" href="classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298">util::Parser</a>
 </li>
 <li>ParseObjectDataAngular()
-: <a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c">util::Parser</a>
 </li>
 <li>ParseObjectDataMap()
-: <a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">util::Parser</a>
+: <a class="el" href="classutil_1_1Parser.html#a25a262843b391df324db620205a13156">util::Parser</a>
 </li>
 <li>Put()
 : <a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">core::ObjectDataMap</a>
@@ -307,7 +319,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>ReadCSV()
-: <a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">util::FileIO</a>
+: <a class="el" href="classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677">util::FileIO</a>
+</li>
+<li>Run()
+: <a class="el" href="classalgo_1_1KShortestPaths.html#ae77137136462303e951f631ba7db6adf">algo::KShortestPaths</a>
 </li>
 </ul>
 
@@ -356,6 +371,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 , <a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">core::Tracklet</a>
 </li>
 </ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>WriteCSVMatlab()
+: <a class="el" href="classutil_1_1FileIO.html#a862586aced240e732ecd35773b57c267">util::FileIO</a>
+</li>
+</ul>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 10 - 9
Documentation/html/hierarchy.html

@@ -91,15 +91,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1DetectionSequence.html" target="_self">core::DetectionSequence</a></td><td class="desc"></td></tr>
 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1FileIO.html" target="_self">util::FileIO</a></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Logger.html" target="_self">util::Logger</a></td><td class="desc"></td></tr>
-<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1MyMath.html" target="_self">util::MyMath</a></td><td class="desc"></td></tr>
-<tr id="row_4_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData.html" target="_self">core::ObjectData</a></td><td class="desc"></td></tr>
-<tr id="row_4_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_4_0_" class="arrow" onclick="toggleFolder('4_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData3D.html" target="_self">core::ObjectData3D</a></td><td class="desc"></td></tr>
-<tr id="row_4_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataAngular.html" target="_self">core::ObjectDataAngular</a></td><td class="desc"></td></tr>
-<tr id="row_4_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataMap.html" target="_self">core::ObjectDataMap</a></td><td class="desc"></td></tr>
-<tr id="row_4_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1Tracklet.html" target="_self">core::Tracklet</a></td><td class="desc"></td></tr>
-<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Parser.html" target="_self">util::Parser</a></td><td class="desc"></td></tr>
-<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1TwoStage.html" target="_self">algo::TwoStage</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1KShortestPaths.html" target="_self">algo::KShortestPaths</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Logger.html" target="_self">util::Logger</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1MyMath.html" target="_self">util::MyMath</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData.html" target="_self">core::ObjectData</a></td><td class="desc"></td></tr>
+<tr id="row_5_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_5_0_" class="arrow" onclick="toggleFolder('5_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectData3D.html" target="_self">core::ObjectData3D</a></td><td class="desc"></td></tr>
+<tr id="row_5_0_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataAngular.html" target="_self">core::ObjectDataAngular</a></td><td class="desc"></td></tr>
+<tr id="row_5_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1ObjectDataMap.html" target="_self">core::ObjectDataMap</a></td><td class="desc"></td></tr>
+<tr id="row_5_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcore_1_1Tracklet.html" target="_self">core::Tracklet</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classutil_1_1Parser.html" target="_self">util::Parser</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classalgo_1_1TwoStage.html" target="_self">algo::TwoStage</a></td><td class="desc"></td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 1 - 1
Documentation/html/search/all_1.js

@@ -3,6 +3,6 @@ var searchData=
   ['clamp',['Clamp',['../classutil_1_1MyMath.html#a367a261dc52a85cc97ba376799ed13a3',1,'util::MyMath']]],
   ['clear',['Clear',['../classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892',1,'core::DetectionSequence']]],
   ['compareto',['CompareTo',['../classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6',1,'core::ObjectData::CompareTo()'],['../classcore_1_1ObjectData3D.html#abef3e4e7a0dc121d8a403d91964be576',1,'core::ObjectData3D::CompareTo()'],['../classcore_1_1ObjectDataAngular.html#a2932240c6c082b76f2c04723cdf3e4f9',1,'core::ObjectDataAngular::CompareTo()'],['../classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74',1,'core::ObjectDataMap::CompareTo()'],['../classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2',1,'core::Tracklet::CompareTo()']]],
-  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11',1,'algo::TwoStage']]],
+  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a',1,'algo::TwoStage']]],
   ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837',1,'algo::TwoStage']]]
 ];

+ 2 - 6
Documentation/html/search/all_7.js

@@ -1,9 +1,5 @@
 var searchData=
 [
-  ['lerp',['Lerp',['../classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1',1,'util::MyMath']]],
-  ['logdebug',['LogDebug',['../classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee',1,'util::Logger']]],
-  ['logerror',['LogError',['../classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8',1,'util::Logger']]],
-  ['logger',['Logger',['../classutil_1_1Logger.html',1,'util']]],
-  ['logger',['Logger',['../classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12',1,'util::Logger']]],
-  ['loginfo',['LogInfo',['../classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea',1,'util::Logger']]]
+  ['kshortestpaths',['KShortestPaths',['../classalgo_1_1KShortestPaths.html',1,'algo']]],
+  ['kshortestpaths',['KShortestPaths',['../classalgo_1_1KShortestPaths.html#a2805f56b9abb112f10c752d125d623d8',1,'algo::KShortestPaths']]]
 ];

+ 7 - 1
Documentation/html/search/all_8.js

@@ -1,4 +1,10 @@
 var searchData=
 [
-  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
+  ['lerp',['Lerp',['../classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1',1,'util::MyMath']]],
+  ['listfiles',['ListFiles',['../classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa',1,'util::FileIO']]],
+  ['logdebug',['LogDebug',['../classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee',1,'util::Logger']]],
+  ['logerror',['LogError',['../classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8',1,'util::Logger']]],
+  ['logger',['Logger',['../classutil_1_1Logger.html',1,'util']]],
+  ['logger',['Logger',['../classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12',1,'util::Logger']]],
+  ['loginfo',['LogInfo',['../classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea',1,'util::Logger']]]
 ];

+ 1 - 10
Documentation/html/search/all_9.js

@@ -1,13 +1,4 @@
 var searchData=
 [
-  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html',1,'core']]],
-  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9',1,'core::ObjectData::ObjectData()'],['../classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b',1,'core::ObjectData::ObjectData(std::size_t frame_index)']]],
-  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html',1,'core']]],
-  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699',1,'core::ObjectData3D']]],
-  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle)'],['../classcore_1_1ObjectDataAngular.html#ae2c40f53f5dc630d610cf513bf4cd767',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle, double temporal_weight, double spatial_weight, double angular_weight)']]],
-  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html',1,'core']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index)'],['../classcore_1_1ObjectDataMap.html#a573add8d73646e6c5f183a9a0c159596',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list)'],['../classcore_1_1ObjectDataMap.html#a5727c237d73f3f16c94a748c1b9b0c74',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list, std::vector&lt; double &gt; weight_list)'],['../classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; std::pair&lt; double, double &gt;&gt; value_weight_list)']]],
-  ['operator_3c_3c',['operator&lt;&lt;',['../classcore_1_1DetectionSequence.html#a557132cfbb170daf47f5a890a0c5bac0',1,'core::DetectionSequence::operator&lt;&lt;()'],['../classcore_1_1ObjectData.html#a56fc9b6184428bf4d80826bbb9fe4c6f',1,'core::ObjectData::operator&lt;&lt;()']]],
-  ['operator_3d',['operator=',['../classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de',1,'util::Logger']]]
+  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
 ];

+ 10 - 5
Documentation/html/search/all_a.js

@@ -1,8 +1,13 @@
 var searchData=
 [
-  ['parseobjectdata3d',['ParseObjectData3D',['../classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92',1,'util::Parser']]],
-  ['parseobjectdataangular',['ParseObjectDataAngular',['../classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a',1,'util::Parser::ParseObjectDataAngular(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence)'],['../classutil_1_1Parser.html#a5a4c53339551dbf67bd351fd0fe2c087',1,'util::Parser::ParseObjectDataAngular(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)']]],
-  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a',1,'util::Parser']]],
-  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]],
-  ['put',['Put',['../classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5',1,'core::ObjectDataMap::Put(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1',1,'core::ObjectDataMap::Put(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
+  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html',1,'core']]],
+  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9',1,'core::ObjectData::ObjectData()'],['../classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b',1,'core::ObjectData::ObjectData(std::size_t frame_index)']]],
+  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html',1,'core']]],
+  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699',1,'core::ObjectData3D']]],
+  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle)'],['../classcore_1_1ObjectDataAngular.html#ae2c40f53f5dc630d610cf513bf4cd767',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle, double temporal_weight, double spatial_weight, double angular_weight)']]],
+  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html',1,'core']]],
+  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]],
+  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index)'],['../classcore_1_1ObjectDataMap.html#a573add8d73646e6c5f183a9a0c159596',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list)'],['../classcore_1_1ObjectDataMap.html#a5727c237d73f3f16c94a748c1b9b0c74',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list, std::vector&lt; double &gt; weight_list)'],['../classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; std::pair&lt; double, double &gt;&gt; value_weight_list)']]],
+  ['operator_3c_3c',['operator&lt;&lt;',['../classcore_1_1DetectionSequence.html#a557132cfbb170daf47f5a890a0c5bac0',1,'core::DetectionSequence::operator&lt;&lt;()'],['../classcore_1_1ObjectData.html#a56fc9b6184428bf4d80826bbb9fe4c6f',1,'core::ObjectData::operator&lt;&lt;()']]],
+  ['operator_3d',['operator=',['../classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de',1,'util::Logger']]]
 ];

+ 5 - 1
Documentation/html/search/all_b.js

@@ -1,4 +1,8 @@
 var searchData=
 [
-  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4',1,'util::FileIO::ReadCSV(core::Vector3d &amp;values, const std::string &amp;filename, const char &amp;delimiter=&apos;;&apos;)'],['../classutil_1_1FileIO.html#a5d145cb872989165f76d00c343170bc5',1,'util::FileIO::ReadCSV(core::Vector2d &amp;values, const std::string &amp;filename, const char &amp;delimiter=&apos;;&apos;)']]]
+  ['parseobjectdata3d',['ParseObjectData3D',['../classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298',1,'util::Parser']]],
+  ['parseobjectdataangular',['ParseObjectDataAngular',['../classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c',1,'util::Parser::ParseObjectDataAngular(const Vector3d &amp;values, core::DetectionSequence &amp;sequence)'],['../classutil_1_1Parser.html#a0f2ad399b88036840fa206704253cb56',1,'util::Parser::ParseObjectDataAngular(const Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)']]],
+  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#a25a262843b391df324db620205a13156',1,'util::Parser']]],
+  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]],
+  ['put',['Put',['../classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5',1,'core::ObjectDataMap::Put(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1',1,'core::ObjectDataMap::Put(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
 ];

+ 2 - 7
Documentation/html/search/all_c.js

@@ -1,10 +1,5 @@
 var searchData=
 [
-  ['setangularweight',['SetAngularWeight',['../classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853',1,'core::ObjectDataAngular']]],
-  ['setdebug',['SetDebug',['../classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869',1,'util::Logger']]],
-  ['setdetectionscore',['SetDetectionScore',['../classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8',1,'core::ObjectData']]],
-  ['setframeindex',['SetFrameIndex',['../classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148',1,'core::ObjectData']]],
-  ['setinfo',['SetInfo',['../classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41',1,'util::Logger']]],
-  ['setspatialweight',['SetSpatialWeight',['../classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6',1,'core::ObjectData3D']]],
-  ['settemporalweight',['SetTemporalWeight',['../classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597',1,'core::ObjectData3D']]]
+  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677',1,'util::FileIO::ReadCSV(Vector3d &amp;values, const std::string &amp;filename, char delimiter=&apos;;&apos;)'],['../classutil_1_1FileIO.html#a264c9b694fd7218635c8a783956d2c1e',1,'util::FileIO::ReadCSV(Vector2d &amp;values, const std::string &amp;filename, char delimiter=&apos;;&apos;)']]],
+  ['run',['Run',['../classalgo_1_1KShortestPaths.html#ae77137136462303e951f631ba7db6adf',1,'algo::KShortestPaths']]]
 ];

+ 7 - 4
Documentation/html/search/all_d.js

@@ -1,7 +1,10 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html',1,'core']]],
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html',1,'algo']]]
+  ['setangularweight',['SetAngularWeight',['../classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853',1,'core::ObjectDataAngular']]],
+  ['setdebug',['SetDebug',['../classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869',1,'util::Logger']]],
+  ['setdetectionscore',['SetDetectionScore',['../classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8',1,'core::ObjectData']]],
+  ['setframeindex',['SetFrameIndex',['../classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148',1,'core::ObjectData']]],
+  ['setinfo',['SetInfo',['../classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41',1,'util::Logger']]],
+  ['setspatialweight',['SetSpatialWeight',['../classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6',1,'core::ObjectData3D']]],
+  ['settemporalweight',['SetTemporalWeight',['../classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597',1,'core::ObjectData3D']]]
 ];

+ 4 - 1
Documentation/html/search/all_e.js

@@ -1,4 +1,7 @@
 var searchData=
 [
-  ['visualize',['Visualize',['../classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961',1,'core::ObjectData::Visualize()'],['../classcore_1_1ObjectData3D.html#a86216fae3dc86f1107eb1b4530b574d2',1,'core::ObjectData3D::Visualize()'],['../classcore_1_1ObjectDataAngular.html#acb4265f6de511238460df118148bc85c',1,'core::ObjectDataAngular::Visualize()'],['../classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac',1,'core::ObjectDataMap::Visualize()'],['../classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181',1,'core::Tracklet::Visualize(cv::Mat &amp;image, cv::Scalar &amp;color) const override'],['../classcore_1_1Tracklet.html#a3a2b241939559e47aef701d2e2c4d4bd',1,'core::Tracklet::Visualize(cv::Mat &amp;image, cv::Scalar &amp;color, size_t frame, size_t predecessor_count, size_t successor_count) const']]]
+  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html',1,'core']]],
+  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet']]],
+  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]],
+  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html',1,'algo']]]
 ];

+ 1 - 1
Documentation/html/search/classes_2.js

@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['logger',['Logger',['../classutil_1_1Logger.html',1,'util']]]
+  ['kshortestpaths',['KShortestPaths',['../classalgo_1_1KShortestPaths.html',1,'algo']]]
 ];

+ 1 - 1
Documentation/html/search/classes_3.js

@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
+  ['logger',['Logger',['../classutil_1_1Logger.html',1,'util']]]
 ];

+ 1 - 4
Documentation/html/search/classes_4.js

@@ -1,7 +1,4 @@
 var searchData=
 [
-  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html',1,'core']]],
-  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html',1,'core']]],
-  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html',1,'core']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]]
+  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
 ];

+ 4 - 1
Documentation/html/search/classes_5.js

@@ -1,4 +1,7 @@
 var searchData=
 [
-  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]]
+  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html',1,'core']]],
+  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html',1,'core']]],
+  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html',1,'core']]],
+  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]]
 ];

+ 1 - 2
Documentation/html/search/classes_6.js

@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html',1,'core']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html',1,'algo']]]
+  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]]
 ];

+ 1 - 1
Documentation/html/search/functions_1.js

@@ -3,6 +3,6 @@ var searchData=
   ['clamp',['Clamp',['../classutil_1_1MyMath.html#a367a261dc52a85cc97ba376799ed13a3',1,'util::MyMath']]],
   ['clear',['Clear',['../classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892',1,'core::DetectionSequence']]],
   ['compareto',['CompareTo',['../classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6',1,'core::ObjectData::CompareTo()'],['../classcore_1_1ObjectData3D.html#abef3e4e7a0dc121d8a403d91964be576',1,'core::ObjectData3D::CompareTo()'],['../classcore_1_1ObjectDataAngular.html#a2932240c6c082b76f2c04723cdf3e4f9',1,'core::ObjectDataAngular::CompareTo()'],['../classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74',1,'core::ObjectDataMap::CompareTo()'],['../classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2',1,'core::Tracklet::CompareTo()']]],
-  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11',1,'algo::TwoStage']]],
+  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#a02dfe4e3fb244ecad13f676ce53d689a',1,'algo::TwoStage']]],
   ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837',1,'algo::TwoStage']]]
 ];

+ 1 - 5
Documentation/html/search/functions_7.js

@@ -1,8 +1,4 @@
 var searchData=
 [
-  ['lerp',['Lerp',['../classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1',1,'util::MyMath']]],
-  ['logdebug',['LogDebug',['../classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee',1,'util::Logger']]],
-  ['logerror',['LogError',['../classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8',1,'util::Logger']]],
-  ['logger',['Logger',['../classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12',1,'util::Logger']]],
-  ['loginfo',['LogInfo',['../classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea',1,'util::Logger']]]
+  ['kshortestpaths',['KShortestPaths',['../classalgo_1_1KShortestPaths.html#a2805f56b9abb112f10c752d125d623d8',1,'algo::KShortestPaths']]]
 ];

+ 6 - 5
Documentation/html/search/functions_8.js

@@ -1,8 +1,9 @@
 var searchData=
 [
-  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9',1,'core::ObjectData::ObjectData()'],['../classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b',1,'core::ObjectData::ObjectData(std::size_t frame_index)']]],
-  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699',1,'core::ObjectData3D']]],
-  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle)'],['../classcore_1_1ObjectDataAngular.html#ae2c40f53f5dc630d610cf513bf4cd767',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle, double temporal_weight, double spatial_weight, double angular_weight)']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index)'],['../classcore_1_1ObjectDataMap.html#a573add8d73646e6c5f183a9a0c159596',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list)'],['../classcore_1_1ObjectDataMap.html#a5727c237d73f3f16c94a748c1b9b0c74',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list, std::vector&lt; double &gt; weight_list)'],['../classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; std::pair&lt; double, double &gt;&gt; value_weight_list)']]],
-  ['operator_3d',['operator=',['../classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de',1,'util::Logger']]]
+  ['lerp',['Lerp',['../classutil_1_1MyMath.html#ae68f361889a9929767b0c85ad7a010f1',1,'util::MyMath']]],
+  ['listfiles',['ListFiles',['../classutil_1_1FileIO.html#a6e290e22083d49619b757bfca96a51fa',1,'util::FileIO']]],
+  ['logdebug',['LogDebug',['../classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee',1,'util::Logger']]],
+  ['logerror',['LogError',['../classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8',1,'util::Logger']]],
+  ['logger',['Logger',['../classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12',1,'util::Logger']]],
+  ['loginfo',['LogInfo',['../classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea',1,'util::Logger']]]
 ];

+ 5 - 4
Documentation/html/search/functions_9.js

@@ -1,7 +1,8 @@
 var searchData=
 [
-  ['parseobjectdata3d',['ParseObjectData3D',['../classutil_1_1Parser.html#afbc0421d8672a418284efb5a9b6cec92',1,'util::Parser']]],
-  ['parseobjectdataangular',['ParseObjectDataAngular',['../classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a',1,'util::Parser::ParseObjectDataAngular(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence)'],['../classutil_1_1Parser.html#a5a4c53339551dbf67bd351fd0fe2c087',1,'util::Parser::ParseObjectDataAngular(const core::Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)']]],
-  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a',1,'util::Parser']]],
-  ['put',['Put',['../classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5',1,'core::ObjectDataMap::Put(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1',1,'core::ObjectDataMap::Put(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
+  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9',1,'core::ObjectData::ObjectData()'],['../classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b',1,'core::ObjectData::ObjectData(std::size_t frame_index)']]],
+  ['objectdata3d',['ObjectData3D',['../classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699',1,'core::ObjectData3D']]],
+  ['objectdataangular',['ObjectDataAngular',['../classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle)'],['../classcore_1_1ObjectDataAngular.html#ae2c40f53f5dc630d610cf513bf4cd767',1,'core::ObjectDataAngular::ObjectDataAngular(size_t frame_index, const cv::Point3d &amp;position, double angle, double temporal_weight, double spatial_weight, double angular_weight)']]],
+  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index)'],['../classcore_1_1ObjectDataMap.html#a573add8d73646e6c5f183a9a0c159596',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list)'],['../classcore_1_1ObjectDataMap.html#a5727c237d73f3f16c94a748c1b9b0c74',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list, std::vector&lt; double &gt; weight_list)'],['../classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6',1,'core::ObjectDataMap::ObjectDataMap(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; std::pair&lt; double, double &gt;&gt; value_weight_list)']]],
+  ['operator_3d',['operator=',['../classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de',1,'util::Logger']]]
 ];

+ 4 - 1
Documentation/html/search/functions_a.js

@@ -1,4 +1,7 @@
 var searchData=
 [
-  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4',1,'util::FileIO::ReadCSV(core::Vector3d &amp;values, const std::string &amp;filename, const char &amp;delimiter=&apos;;&apos;)'],['../classutil_1_1FileIO.html#a5d145cb872989165f76d00c343170bc5',1,'util::FileIO::ReadCSV(core::Vector2d &amp;values, const std::string &amp;filename, const char &amp;delimiter=&apos;;&apos;)']]]
+  ['parseobjectdata3d',['ParseObjectData3D',['../classutil_1_1Parser.html#a4372acb257c7c0292439f1c863287298',1,'util::Parser']]],
+  ['parseobjectdataangular',['ParseObjectDataAngular',['../classutil_1_1Parser.html#acad67e4a565fb4a008a2d85fa9ea215c',1,'util::Parser::ParseObjectDataAngular(const Vector3d &amp;values, core::DetectionSequence &amp;sequence)'],['../classutil_1_1Parser.html#a0f2ad399b88036840fa206704253cb56',1,'util::Parser::ParseObjectDataAngular(const Vector3d &amp;values, core::DetectionSequence &amp;sequence, double temporal_weight, double spatial_weight, double angular_weight)']]],
+  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#a25a262843b391df324db620205a13156',1,'util::Parser']]],
+  ['put',['Put',['../classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5',1,'core::ObjectDataMap::Put(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1',1,'core::ObjectDataMap::Put(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
 ];

+ 2 - 7
Documentation/html/search/functions_b.js

@@ -1,10 +1,5 @@
 var searchData=
 [
-  ['setangularweight',['SetAngularWeight',['../classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853',1,'core::ObjectDataAngular']]],
-  ['setdebug',['SetDebug',['../classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869',1,'util::Logger']]],
-  ['setdetectionscore',['SetDetectionScore',['../classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8',1,'core::ObjectData']]],
-  ['setframeindex',['SetFrameIndex',['../classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148',1,'core::ObjectData']]],
-  ['setinfo',['SetInfo',['../classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41',1,'util::Logger']]],
-  ['setspatialweight',['SetSpatialWeight',['../classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6',1,'core::ObjectData3D']]],
-  ['settemporalweight',['SetTemporalWeight',['../classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597',1,'core::ObjectData3D']]]
+  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#af42c183525923014e142a10a626d3677',1,'util::FileIO::ReadCSV(Vector3d &amp;values, const std::string &amp;filename, char delimiter=&apos;;&apos;)'],['../classutil_1_1FileIO.html#a264c9b694fd7218635c8a783956d2c1e',1,'util::FileIO::ReadCSV(Vector2d &amp;values, const std::string &amp;filename, char delimiter=&apos;;&apos;)']]],
+  ['run',['Run',['../classalgo_1_1KShortestPaths.html#ae77137136462303e951f631ba7db6adf',1,'algo::KShortestPaths']]]
 ];

+ 7 - 2
Documentation/html/search/functions_c.js

@@ -1,5 +1,10 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]]
+  ['setangularweight',['SetAngularWeight',['../classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853',1,'core::ObjectDataAngular']]],
+  ['setdebug',['SetDebug',['../classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869',1,'util::Logger']]],
+  ['setdetectionscore',['SetDetectionScore',['../classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8',1,'core::ObjectData']]],
+  ['setframeindex',['SetFrameIndex',['../classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148',1,'core::ObjectData']]],
+  ['setinfo',['SetInfo',['../classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41',1,'util::Logger']]],
+  ['setspatialweight',['SetSpatialWeight',['../classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6',1,'core::ObjectData3D']]],
+  ['settemporalweight',['SetTemporalWeight',['../classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597',1,'core::ObjectData3D']]]
 ];

+ 2 - 1
Documentation/html/search/functions_d.js

@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['visualize',['Visualize',['../classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961',1,'core::ObjectData::Visualize()'],['../classcore_1_1ObjectData3D.html#a86216fae3dc86f1107eb1b4530b574d2',1,'core::ObjectData3D::Visualize()'],['../classcore_1_1ObjectDataAngular.html#acb4265f6de511238460df118148bc85c',1,'core::ObjectDataAngular::Visualize()'],['../classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac',1,'core::ObjectDataMap::Visualize()'],['../classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181',1,'core::Tracklet::Visualize(cv::Mat &amp;image, cv::Scalar &amp;color) const override'],['../classcore_1_1Tracklet.html#a3a2b241939559e47aef701d2e2c4d4bd',1,'core::Tracklet::Visualize(cv::Mat &amp;image, cv::Scalar &amp;color, size_t frame, size_t predecessor_count, size_t successor_count) const']]]
+  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet']]],
+  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]]
 ];

+ 3 - 3
Documentation/html/search/searchdata.js

@@ -1,8 +1,8 @@
 var indexSectionsWithContent =
 {
-  0: "acdefgilmoprstv",
-  1: "dflmopt",
-  2: "acdefgiloprstv",
+  0: "acdefgiklmoprstvw",
+  1: "dfklmopt",
+  2: "acdefgikloprstvw",
   3: "o"
 };
 

+ 1 - 0
Documentation/latex/annotated.tex

@@ -2,6 +2,7 @@
 Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
 \item\contentsline{section}{\hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} }{\pageref{classcore_1_1DetectionSequence}}{}
 \item\contentsline{section}{\hyperlink{classutil_1_1FileIO}{util\+::\+File\+IO} }{\pageref{classutil_1_1FileIO}}{}
+\item\contentsline{section}{\hyperlink{classalgo_1_1KShortestPaths}{algo\+::\+K\+Shortest\+Paths} }{\pageref{classalgo_1_1KShortestPaths}}{}
 \item\contentsline{section}{\hyperlink{classutil_1_1Logger}{util\+::\+Logger} }{\pageref{classutil_1_1Logger}}{}
 \item\contentsline{section}{\hyperlink{classutil_1_1MyMath}{util\+::\+My\+Math} }{\pageref{classutil_1_1MyMath}}{}
 \item\contentsline{section}{\hyperlink{classcore_1_1ObjectData}{core\+::\+Object\+Data} }{\pageref{classcore_1_1ObjectData}}{}

+ 4 - 4
Documentation/latex/classalgo_1_1TwoStage.tex

@@ -9,7 +9,7 @@
 \item 
 \hyperlink{classalgo_1_1TwoStage_ae302f9ea93d56155a9dbd0be060500f7}{Two\+Stage} (size\+\_\+t max\+\_\+frame\+\_\+skip, double penalty\+\_\+value, size\+\_\+t max\+\_\+tracklet\+\_\+count)
 \item 
-void \hyperlink{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}{Create\+Object\+Graph} (Directed\+Graph \&graph, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&detections)
+void \hyperlink{classalgo_1_1TwoStage_a02dfe4e3fb244ecad13f676ce53d689a}{Create\+Object\+Graph} (Directed\+Graph \&graph, const \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&detections)
 \item 
 void \hyperlink{classalgo_1_1TwoStage_ae14cf79859b4275c862d6750b6bc6837}{Create\+Tracklet\+Graph} (Directed\+Graph \&obj\+\_\+graph, Directed\+Graph \&tlt\+\_\+graph, size\+\_\+t frame\+\_\+count)
 \item 
@@ -44,12 +44,12 @@ Initializes the algorithm wih the given values.
 \subsection{Member Function Documentation}
 \index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Create\+Object\+Graph@{Create\+Object\+Graph}}
 \index{Create\+Object\+Graph@{Create\+Object\+Graph}!algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}}
-\subsubsection[{\texorpdfstring{Create\+Object\+Graph(\+Directed\+Graph \&graph, core\+::\+Detection\+Sequence \&detections)}{CreateObjectGraph(DirectedGraph \&graph, core::DetectionSequence \&detections)}}]{\setlength{\rightskip}{0pt plus 5cm}void algo\+::\+Two\+Stage\+::\+Create\+Object\+Graph (
+\subsubsection[{\texorpdfstring{Create\+Object\+Graph(\+Directed\+Graph \&graph, const core\+::\+Detection\+Sequence \&detections)}{CreateObjectGraph(DirectedGraph \&graph, const core::DetectionSequence \&detections)}}]{\setlength{\rightskip}{0pt plus 5cm}void algo\+::\+Two\+Stage\+::\+Create\+Object\+Graph (
 \begin{DoxyParamCaption}
 \item[{Directed\+Graph \&}]{graph, }
-\item[{{\bf core\+::\+Detection\+Sequence} \&}]{detections}
+\item[{const {\bf core\+::\+Detection\+Sequence} \&}]{detections}
 \end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}{}\label{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}
+)}\hypertarget{classalgo_1_1TwoStage_a02dfe4e3fb244ecad13f676ce53d689a}{}\label{classalgo_1_1TwoStage_a02dfe4e3fb244ecad13f676ce53d689a}
 Creates a graph with vertices for every detected object 
 \begin{DoxyParams}{Parameters}
 {\em graph} & The graph to write into \\

BIN
Documentation/latex/classcore_1_1ObjectData.pdf


BIN
Documentation/latex/classcore_1_1ObjectData3D.pdf


BIN
Documentation/latex/classcore_1_1ObjectDataAngular.pdf


BIN
Documentation/latex/classcore_1_1ObjectDataMap.pdf


BIN
Documentation/latex/classcore_1_1Tracklet.pdf


+ 50 - 10
Documentation/latex/classutil_1_1FileIO.tex

@@ -7,9 +7,13 @@
 \subsection*{Static Public Member Functions}
 \begin{DoxyCompactItemize}
 \item 
-static void \hyperlink{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}{Read\+C\+SV} (core\+::\+Vector3d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})
+static void \hyperlink{classutil_1_1FileIO_af42c183525923014e142a10a626d3677}{Read\+C\+SV} (Vector3d \&values, const std\+::string \&filename, char delimiter=\textquotesingle{};\textquotesingle{})
 \item 
-static void \hyperlink{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}{Read\+C\+SV} (core\+::\+Vector2d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})
+static void \hyperlink{classutil_1_1FileIO_a264c9b694fd7218635c8a783956d2c1e}{Read\+C\+SV} (Vector2d \&values, const std\+::string \&filename, char delimiter=\textquotesingle{};\textquotesingle{})
+\item 
+static void \hyperlink{classutil_1_1FileIO_a6e290e22083d49619b757bfca96a51fa}{List\+Files} (const std\+::string \&folder, std\+::vector$<$ std\+::string $>$ \&file\+\_\+names, bool sort=true)
+\item 
+static void \hyperlink{classutil_1_1FileIO_a862586aced240e732ecd35773b57c267}{Write\+C\+S\+V\+Matlab} (Directed\+Graph \&graph, const std\+::string \&file\+\_\+name, char delimiter=\textquotesingle{};\textquotesingle{})
 \end{DoxyCompactItemize}
 
 
@@ -17,15 +21,33 @@ static void \hyperlink{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}{Re
 Utility class for file in-\/ and output. 
 
 \subsection{Member Function Documentation}
+\index{util\+::\+File\+IO@{util\+::\+File\+IO}!List\+Files@{List\+Files}}
+\index{List\+Files@{List\+Files}!util\+::\+File\+IO@{util\+::\+File\+IO}}
+\subsubsection[{\texorpdfstring{List\+Files(const std\+::string \&folder, std\+::vector$<$ std\+::string $>$ \&file\+\_\+names, bool sort=true)}{ListFiles(const std::string \&folder, std::vector< std::string > \&file\_names, bool sort=true)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+List\+Files (
+\begin{DoxyParamCaption}
+\item[{const std\+::string \&}]{folder, }
+\item[{std\+::vector$<$ std\+::string $>$ \&}]{file\+\_\+names, }
+\item[{bool}]{sort = {\ttfamily true}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_a6e290e22083d49619b757bfca96a51fa}{}\label{classutil_1_1FileIO_a6e290e22083d49619b757bfca96a51fa}
+Lists all file names in the given folder. 
+\begin{DoxyParams}{Parameters}
+{\em folder} & The folder to look into \\
+\hline
+{\em file\+\_\+names} & The vector to store the file names into \\
+\hline
+{\em sort} & True, if the files should be sorted alphabetically \\
+\hline
+\end{DoxyParams}
 \index{util\+::\+File\+IO@{util\+::\+File\+IO}!Read\+C\+SV@{Read\+C\+SV}}
 \index{Read\+C\+SV@{Read\+C\+SV}!util\+::\+File\+IO@{util\+::\+File\+IO}}
-\subsubsection[{\texorpdfstring{Read\+C\+S\+V(core\+::\+Vector3d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})}{ReadCSV(core::Vector3d \&values, const std::string \&filename, const char \&delimiter=';')}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
+\subsubsection[{\texorpdfstring{Read\+C\+S\+V(\+Vector3d \&values, const std\+::string \&filename, char delimiter=\textquotesingle{};\textquotesingle{})}{ReadCSV(Vector3d \&values, const std::string \&filename, char delimiter=';')}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
 \begin{DoxyParamCaption}
-\item[{core\+::\+Vector3d \&}]{values, }
+\item[{Vector3d \&}]{values, }
 \item[{const std\+::string \&}]{filename, }
-\item[{const char \&}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
+\item[{char}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}{}\label{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_af42c183525923014e142a10a626d3677}{}\label{classutil_1_1FileIO_af42c183525923014e142a10a626d3677}
 Reads a C\+SV file and stores the values in a 3D array. The first dimension is the first value of each row, used as a index to bundle multiple rows with the same first value into a single vector. The second dimension is the row in the row bundle. The third dimension is the value in that row. 
 \begin{DoxyParams}{Parameters}
 {\em values} & The 3D array of values to store the read values in \\
@@ -37,13 +59,13 @@ Reads a C\+SV file and stores the values in a 3D array. The first dimension is t
 \end{DoxyParams}
 \index{util\+::\+File\+IO@{util\+::\+File\+IO}!Read\+C\+SV@{Read\+C\+SV}}
 \index{Read\+C\+SV@{Read\+C\+SV}!util\+::\+File\+IO@{util\+::\+File\+IO}}
-\subsubsection[{\texorpdfstring{Read\+C\+S\+V(core\+::\+Vector2d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})}{ReadCSV(core::Vector2d \&values, const std::string \&filename, const char \&delimiter=';')}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
+\subsubsection[{\texorpdfstring{Read\+C\+S\+V(\+Vector2d \&values, const std\+::string \&filename, char delimiter=\textquotesingle{};\textquotesingle{})}{ReadCSV(Vector2d \&values, const std::string \&filename, char delimiter=';')}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
 \begin{DoxyParamCaption}
-\item[{core\+::\+Vector2d \&}]{values, }
+\item[{Vector2d \&}]{values, }
 \item[{const std\+::string \&}]{filename, }
-\item[{const char \&}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
+\item[{char}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}{}\label{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_a264c9b694fd7218635c8a783956d2c1e}{}\label{classutil_1_1FileIO_a264c9b694fd7218635c8a783956d2c1e}
 Reads a C\+SV file and stores the values in a 2D array. The first dimension is the row and the second the value in that row. 
 \begin{DoxyParams}{Parameters}
 {\em values} & The 2D array of values to store the read values in \\
@@ -53,6 +75,24 @@ Reads a C\+SV file and stores the values in a 2D array. The first dimension is t
 {\em delimiter} & The delimiter used to separate the values in the file \\
 \hline
 \end{DoxyParams}
+\index{util\+::\+File\+IO@{util\+::\+File\+IO}!Write\+C\+S\+V\+Matlab@{Write\+C\+S\+V\+Matlab}}
+\index{Write\+C\+S\+V\+Matlab@{Write\+C\+S\+V\+Matlab}!util\+::\+File\+IO@{util\+::\+File\+IO}}
+\subsubsection[{\texorpdfstring{Write\+C\+S\+V\+Matlab(\+Directed\+Graph \&graph, const std\+::string \&file\+\_\+name, char delimiter=\textquotesingle{};\textquotesingle{})}{WriteCSVMatlab(DirectedGraph \&graph, const std::string \&file\_name, char delimiter=';')}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Write\+C\+S\+V\+Matlab (
+\begin{DoxyParamCaption}
+\item[{Directed\+Graph \&}]{graph, }
+\item[{const std\+::string \&}]{file\+\_\+name, }
+\item[{char}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_a862586aced240e732ecd35773b57c267}{}\label{classutil_1_1FileIO_a862586aced240e732ecd35773b57c267}
+Writes the given graph into a C\+SV file with an format readable by Matlab. 
+\begin{DoxyParams}{Parameters}
+{\em graph} & The graph to write \\
+\hline
+{\em file\+\_\+name} & The name of the file to write into \\
+\hline
+{\em delimiter} & The delimiter to use \\
+\hline
+\end{DoxyParams}
 
 
 The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}

+ 16 - 16
Documentation/latex/classutil_1_1Parser.tex

@@ -7,13 +7,13 @@
 \subsection*{Static Public Member Functions}
 \begin{DoxyCompactItemize}
 \item 
-static void \hyperlink{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}{Parse\+Object\+Data\+Map} (const std\+::vector$<$ std\+::string $>$ \&keys, const core\+::\+Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
+static void \hyperlink{classutil_1_1Parser_a25a262843b391df324db620205a13156}{Parse\+Object\+Data\+Map} (const std\+::vector$<$ std\+::string $>$ \&keys, const Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
 \item 
-static void \hyperlink{classutil_1_1Parser_afbc0421d8672a418284efb5a9b6cec92}{Parse\+Object\+Data3D} (const core\+::\+Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
+static void \hyperlink{classutil_1_1Parser_a4372acb257c7c0292439f1c863287298}{Parse\+Object\+Data3D} (const Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
 \item 
-static void \hyperlink{classutil_1_1Parser_a314cfd3ebd16ab18cd132e7d8dd4c04a}{Parse\+Object\+Data\+Angular} (const core\+::\+Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
+static void \hyperlink{classutil_1_1Parser_acad67e4a565fb4a008a2d85fa9ea215c}{Parse\+Object\+Data\+Angular} (const Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence)
 \item 
-static void \hyperlink{classutil_1_1Parser_a5a4c53339551dbf67bd351fd0fe2c087}{Parse\+Object\+Data\+Angular} (const core\+::\+Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence, double temporal\+\_\+weight, double spatial\+\_\+weight, double angular\+\_\+weight)
+static void \hyperlink{classutil_1_1Parser_a0f2ad399b88036840fa206704253cb56}{Parse\+Object\+Data\+Angular} (const Vector3d \&values, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&sequence, double temporal\+\_\+weight, double spatial\+\_\+weight, double angular\+\_\+weight)
 \end{DoxyCompactItemize}
 
 
@@ -23,12 +23,12 @@ Utility class for parsing diverse objects.
 \subsection{Member Function Documentation}
 \index{util\+::\+Parser@{util\+::\+Parser}!Parse\+Object\+Data3D@{Parse\+Object\+Data3D}}
 \index{Parse\+Object\+Data3D@{Parse\+Object\+Data3D}!util\+::\+Parser@{util\+::\+Parser}}
-\subsubsection[{\texorpdfstring{Parse\+Object\+Data3\+D(const core\+::\+Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectData3D(const core::Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data3D (
+\subsubsection[{\texorpdfstring{Parse\+Object\+Data3\+D(const Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectData3D(const Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data3D (
 \begin{DoxyParamCaption}
-\item[{const core\+::\+Vector3d \&}]{values, }
+\item[{const Vector3d \&}]{values, }
 \item[{{\bf core\+::\+Detection\+Sequence} \&}]{sequence}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_afbc0421d8672a418284efb5a9b6cec92}{}\label{classutil_1_1Parser_afbc0421d8672a418284efb5a9b6cec92}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_a4372acb257c7c0292439f1c863287298}{}\label{classutil_1_1Parser_a4372acb257c7c0292439f1c863287298}
 Parses the values into a Detection\+Sequence of Object\+Data3D 
 \begin{DoxyParams}{Parameters}
 {\em values} & A 3D vector of values \\
@@ -38,12 +38,12 @@ Parses the values into a Detection\+Sequence of Object\+Data3D
 \end{DoxyParams}
 \index{util\+::\+Parser@{util\+::\+Parser}!Parse\+Object\+Data\+Angular@{Parse\+Object\+Data\+Angular}}
 \index{Parse\+Object\+Data\+Angular@{Parse\+Object\+Data\+Angular}!util\+::\+Parser@{util\+::\+Parser}}
-\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Angular(const core\+::\+Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectDataAngular(const core::Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Angular (
+\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Angular(const Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectDataAngular(const Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Angular (
 \begin{DoxyParamCaption}
-\item[{const core\+::\+Vector3d \&}]{values, }
+\item[{const Vector3d \&}]{values, }
 \item[{{\bf core\+::\+Detection\+Sequence} \&}]{sequence}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_a314cfd3ebd16ab18cd132e7d8dd4c04a}{}\label{classutil_1_1Parser_a314cfd3ebd16ab18cd132e7d8dd4c04a}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_acad67e4a565fb4a008a2d85fa9ea215c}{}\label{classutil_1_1Parser_acad67e4a565fb4a008a2d85fa9ea215c}
 Parses the values into a Detection\+Sequence of Object\+Data\+Angular objects. 
 \begin{DoxyParams}{Parameters}
 {\em values} & A 3D vector of values \\
@@ -53,15 +53,15 @@ Parses the values into a Detection\+Sequence of Object\+Data\+Angular objects.
 \end{DoxyParams}
 \index{util\+::\+Parser@{util\+::\+Parser}!Parse\+Object\+Data\+Angular@{Parse\+Object\+Data\+Angular}}
 \index{Parse\+Object\+Data\+Angular@{Parse\+Object\+Data\+Angular}!util\+::\+Parser@{util\+::\+Parser}}
-\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Angular(const core\+::\+Vector3d \&values, core\+::\+Detection\+Sequence \&sequence, double temporal\+\_\+weight, double spatial\+\_\+weight, double angular\+\_\+weight)}{ParseObjectDataAngular(const core::Vector3d \&values, core::DetectionSequence \&sequence, double temporal\_weight, double spatial\_weight, double angular\_weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Angular (
+\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Angular(const Vector3d \&values, core\+::\+Detection\+Sequence \&sequence, double temporal\+\_\+weight, double spatial\+\_\+weight, double angular\+\_\+weight)}{ParseObjectDataAngular(const Vector3d \&values, core::DetectionSequence \&sequence, double temporal\_weight, double spatial\_weight, double angular\_weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Angular (
 \begin{DoxyParamCaption}
-\item[{const core\+::\+Vector3d \&}]{values, }
+\item[{const Vector3d \&}]{values, }
 \item[{{\bf core\+::\+Detection\+Sequence} \&}]{sequence, }
 \item[{double}]{temporal\+\_\+weight, }
 \item[{double}]{spatial\+\_\+weight, }
 \item[{double}]{angular\+\_\+weight}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_a5a4c53339551dbf67bd351fd0fe2c087}{}\label{classutil_1_1Parser_a5a4c53339551dbf67bd351fd0fe2c087}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_a0f2ad399b88036840fa206704253cb56}{}\label{classutil_1_1Parser_a0f2ad399b88036840fa206704253cb56}
 Parses the values into a Detection\+Sequence of Object\+Data\+Angular objects. The keys are used for the third dimension in the values list. 
 \begin{DoxyParams}{Parameters}
 {\em values} & A 3D vector of values \\
@@ -77,13 +77,13 @@ Parses the values into a Detection\+Sequence of Object\+Data\+Angular objects. T
 \end{DoxyParams}
 \index{util\+::\+Parser@{util\+::\+Parser}!Parse\+Object\+Data\+Map@{Parse\+Object\+Data\+Map}}
 \index{Parse\+Object\+Data\+Map@{Parse\+Object\+Data\+Map}!util\+::\+Parser@{util\+::\+Parser}}
-\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Map(const std\+::vector$<$ std\+::string $>$ \&keys, const core\+::\+Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectDataMap(const std::vector< std::string > \&keys, const core::Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Map (
+\subsubsection[{\texorpdfstring{Parse\+Object\+Data\+Map(const std\+::vector$<$ std\+::string $>$ \&keys, const Vector3d \&values, core\+::\+Detection\+Sequence \&sequence)}{ParseObjectDataMap(const std::vector< std::string > \&keys, const Vector3d \&values, core::DetectionSequence \&sequence)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+Parser\+::\+Parse\+Object\+Data\+Map (
 \begin{DoxyParamCaption}
 \item[{const std\+::vector$<$ std\+::string $>$ \&}]{keys, }
-\item[{const core\+::\+Vector3d \&}]{values, }
+\item[{const Vector3d \&}]{values, }
 \item[{{\bf core\+::\+Detection\+Sequence} \&}]{sequence}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}{}\label{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_a25a262843b391df324db620205a13156}{}\label{classutil_1_1Parser_a25a262843b391df324db620205a13156}
 Parses the keys and values into a Detection\+Sequence of Object\+Data\+Map objects. The keys are used for the third dimension in the values list. 
 \begin{DoxyParams}{Parameters}
 {\em keys} & A 1D vector of keys \\

+ 1 - 0
Documentation/latex/hierarchy.tex

@@ -2,6 +2,7 @@
 This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
 \item \contentsline{section}{core\+:\+:Detection\+Sequence}{\pageref{classcore_1_1DetectionSequence}}{}
 \item \contentsline{section}{util\+:\+:File\+IO}{\pageref{classutil_1_1FileIO}}{}
+\item \contentsline{section}{algo\+:\+:K\+Shortest\+Paths}{\pageref{classalgo_1_1KShortestPaths}}{}
 \item \contentsline{section}{util\+:\+:Logger}{\pageref{classutil_1_1Logger}}{}
 \item \contentsline{section}{util\+:\+:My\+Math}{\pageref{classutil_1_1MyMath}}{}
 \item \contentsline{section}{core\+:\+:Object\+Data}{\pageref{classcore_1_1ObjectData}}{}

+ 1 - 0
Documentation/latex/refman.tex

@@ -145,6 +145,7 @@
 \chapter{Class Documentation}
 \input{classcore_1_1DetectionSequence}
 \input{classutil_1_1FileIO}
+\input{classalgo_1_1KShortestPaths}
 \input{classutil_1_1Logger}
 \input{classutil_1_1MyMath}
 \input{classcore_1_1ObjectData}

+ 0 - 36
algo/Definitions.h

@@ -1,36 +0,0 @@
-//
-// Created by wrede on 25.04.16.
-//
-
-#ifndef GBMOT_DEFINITIONS_H
-#define GBMOT_DEFINITIONS_H
-
-
-#include <boost/graph/properties.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include "../core/Definitions.h"
-#include "../core/ObjectData.h"
-#include "../core/Tracklet.h"
-
-namespace algo
-{
-    //TODO read minimal example
-    typedef boost::property<boost::edge_weight_t, double> EdgeProp;
-    typedef boost::property<boost::vertex_name_t, core::ObjectDataPtr>
-            VertexProp;
-    typedef boost::adjacency_list<
-            boost::listS, boost::vecS, boost::directedS, VertexProp, EdgeProp>
-            DirectedGraph;
-    typedef boost::graph_traits<DirectedGraph>::vertex_descriptor Vertex;
-    typedef boost::property_map<DirectedGraph, boost::vertex_index_t>::type
-            VertexIndexMap;
-    typedef boost::property_map<DirectedGraph, boost::vertex_name_t >::type
-            VertexValueMap;
-    typedef boost::iterator_property_map<Vertex*, VertexIndexMap, Vertex, Vertex&>
-            PredecessorMap;
-    typedef boost::iterator_property_map<double*, VertexIndexMap, double, double&>
-            DistanceMap;
-};
-
-#endif //GBMOT_DEFINITIONS_H

+ 336 - 0
algo/KShortestPaths.cpp

@@ -0,0 +1,336 @@
+//
+// Created by wrede on 25.05.16.
+//
+
+#include "KShortestPaths.h"
+#include "../util/Logger.h"
+#include "../util/FileIO.h"
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/bellman_ford_shortest_paths.hpp>
+#include <boost/graph/copy.hpp>
+
+namespace algo
+{
+    KShortestPaths::KShortestPaths(DirectedGraph graph, Vertex source, Vertex sink)
+            : original_graph_(graph), source_(source), sink_(sink)
+    {
+    }
+
+    MultiPredecessorMap KShortestPaths::Run(size_t max_path_count)
+    {
+        util::Logger::LogInfo("Running k-shortest-paths");
+
+        // Clear all data from previous runs
+        i_shortest_paths_.clear();
+
+        util::Logger::LogDebug("find shortest path #1");
+
+        FindAndAugmentPath(1, true);
+
+        // Find the k shortest paths
+        for (size_t i = 1; i < max_path_count; ++i)
+        {
+            util::Logger::LogDebug("find shortest path #" + std::to_string(i + 1));
+
+            if (i != 1)
+            {
+                //If the costs are increasing, no further shortest paths will be found
+                if (OverallCosts(i) > OverallCosts(i - 1))
+                {
+                    return i_shortest_paths_[i];
+                }
+            }
+
+            // Create a copy of the original graph which is used
+            // for the graph and edge transformations
+            CopyOriginalGraph();
+            //util::FileIO::WriteCSVMatlab(copied_graph_, "/home/wrede/Dokumente/graph_copy.csv");
+
+            // Extend the graph (has negative and positive edge weights)
+            ExtendGraph(i);
+            //util::FileIO::WriteCSVMatlab(copied_graph_, "/home/wrede/Dokumente/graph_copy_extended.csv");
+
+            //TODO (optional) Transform the edge weights (positive edge weights) and use dijkstra
+
+            // Finds the next path and adds it to the found paths
+            FindAndAugmentPath(i + 1, false);
+
+            // Removes the duplicate edges to make the paths node-disjoint
+            Interlace(i + 1);
+        }
+
+        // All k shortest paths have been found
+        return i_shortest_paths_[max_path_count];
+    }
+
+    void KShortestPaths::ExtendGraph(size_t i)
+    {
+        boost::graph_traits<DirectedGraph>::out_edge_iterator oei, oei_end;
+        boost::graph_traits<DirectedGraph>::vertex_iterator vi, vi_end;
+        VertexValueMap graph_values = boost::get(boost::vertex_name, copied_graph_);
+
+        // Split all vertices within the paths
+        for (boost::tie(vi, vi_end) = boost::vertices(original_graph_); vi != vi_end; ++vi)
+        {
+            Vertex v_original = (*vi);
+
+            // Ignore vertices off the paths, the source and the sink
+            if (i_shortest_paths_[i].count(v_original) == 0 || v_original == source_ || v_original == sink_)
+            {
+                continue;
+            }
+
+            Vertex v_in = original_to_copy_[v_original];
+            Vertex v_out = boost::add_vertex(graph_values[v_in], copied_graph_);
+            copy_to_original_[v_out] = v_original;
+
+            // Copy outgoing edges to v_out
+            for (boost::tie(oei, oei_end) = boost::out_edges(v_in, copied_graph_); oei != oei_end; ++oei)
+            {
+                QueueAddEdge(v_out, boost::target(*oei, copied_graph_),
+                             boost::get(boost::edge_weight, copied_graph_, *oei));
+            }
+
+            // Remove outgoing edges from vertex
+            for (boost::tie(oei, oei_end) = boost::out_edges(v_in, copied_graph_); oei != oei_end; ++oei)
+            {
+                QueueRemoveEdge(v_in, boost::target(*oei, copied_graph_));
+            }
+
+            // Create auxiliary edge
+            QueueAddEdge(v_in, v_out, 0.0);
+        }
+
+        UpdateEdges();
+
+        // Iterate all vertices within the copied graph
+        for (boost::tie(vi, vi_end) = boost::vertices(copied_graph_); vi != vi_end; ++vi)
+        {
+            Vertex v_copy = (*vi);
+            Vertex v_original = copy_to_original_[v_copy];
+
+            // Ignore vertices off the paths
+            if (i_shortest_paths_[i].count(v_original) == 0)
+            {
+                continue;
+            }
+
+            // Iterate all outgoing edges at the current vertex
+            for (boost::tie(oei, oei_end) = boost::out_edges(v_copy, copied_graph_); oei != oei_end; ++oei)
+            {
+                Vertex t_copy = boost::target(*oei, copied_graph_);
+                Vertex t_original = copy_to_original_[t_copy];
+
+                // Ignore edges off the paths
+                if (i_shortest_paths_[i].count(t_original) == 0)
+                {
+                    continue;
+                }
+
+                // Invert the edge direction and weight
+                double weight = boost::get(boost::edge_weight, copied_graph_,
+                                           *oei);
+                QueueAddEdge(t_copy, v_copy, -weight);
+                QueueRemoveEdge(v_copy, t_copy);
+            }
+        }
+
+        UpdateEdges();
+    }
+
+    double KShortestPaths::OverallCosts(size_t i)
+    {
+        EdgeWeightMap weights = boost::get(boost::edge_weight, original_graph_);
+        boost::graph_traits<DirectedGraph>::edge_iterator ei, ei_end;
+        double value = 0.0;
+
+        for (boost::tie(ei, ei_end) = boost::edges(original_graph_);
+             ei != ei_end; ++ei)
+        {
+            Vertex source = boost::source(*ei, original_graph_);
+            Vertex target = boost::target(*ei, original_graph_);
+
+            // Is edge within paths?
+            if (i_shortest_paths_[i].count(target) > 0 && i_shortest_paths_[i][target].count(source) > 0)
+            {
+                value += weights[*ei];
+            }
+        }
+
+        return value;
+    }
+
+    void KShortestPaths::CopyOriginalGraph()
+    {
+        // Clear all previous data
+        copied_graph_.clear();
+        original_to_copy_.clear();
+        copy_to_original_.clear();
+
+        // Copy the graph and store the vertex map temporarily
+        std::vector<Vertex> original_to_copy_vector(boost::num_vertices(original_graph_));
+        VertexVertexMap temp_map(original_to_copy_vector.begin());
+        boost::copy_graph(original_graph_,
+                          copied_graph_,
+                          boost::orig_to_copy(temp_map));
+
+        // Copy the vertex map into the two persistent maps, one for each
+        // mapping direction
+        boost::graph_traits<DirectedGraph>::vertex_iterator vi, vi_end;
+        for (boost::tie(vi, vi_end) = boost::vertices(original_graph_);
+             vi != vi_end; ++vi)
+        {
+            Vertex v_original = (*vi);
+            Vertex v_copy = temp_map[v_original];
+
+            original_to_copy_[v_original] = v_copy;
+            copy_to_original_[v_copy] = v_original;
+        }
+    }
+
+    void KShortestPaths::Interlace(size_t i)
+    {
+        boost::graph_traits<DirectedGraph>::edge_iterator ei, ei_end;
+        for (boost::tie(ei, ei_end) = boost::edges(original_graph_);
+             ei != ei_end; ++ei)
+        {
+            Vertex source = boost::source(*ei, original_graph_);
+            Vertex target = boost::target(*ei, original_graph_);
+
+            // Ignore source and sink
+            if (source == source_ || target == sink_)
+            {
+                continue;
+            }
+
+            // Is edge within paths?
+            if (i_shortest_paths_[i].count(target) > 0 && i_shortest_paths_[i][target].count(source) > 0)
+            {
+                // Is edge duplicate?
+                if (i_shortest_paths_[i].count(source) > 0 && i_shortest_paths_[i][source].count(target) > 0)
+                {
+                    i_shortest_paths_[i][target].erase(source);
+                    i_shortest_paths_[i][source].erase(target);
+                }
+            }
+        }
+    }
+
+    void KShortestPaths::FindAndAugmentPath(size_t i, bool original)
+    {
+        // Add new path maps until the needed iteration is reached
+        while (i_shortest_paths_.size() < (i + 1))
+        {
+            i_shortest_paths_.push_back(MultiPredecessorMap());
+        }
+
+        // Only copy old paths if old paths exist
+        if (i > 0)
+        {
+            // Copy the old paths
+            for (auto it = i_shortest_paths_[i - 1].begin();
+                 it != i_shortest_paths_[i - 1].end(); ++it)
+            {
+                i_shortest_paths_[i][(*it).first] = (*it).second;
+            }
+        }
+
+        if (original)
+        {
+            // Prepare variables for path finding
+            size_t graph_size = boost::num_vertices(original_graph_);
+            std::vector<Vertex> pred_list(graph_size);
+            std::vector<double> dist_list(graph_size);
+            VertexIndexMap graph_indices = boost::get(boost::vertex_index,
+                                                      original_graph_);
+            PredecessorMap pred_map(&pred_list[0], graph_indices);
+            DistanceMap dist_map(&dist_list[0], graph_indices);
+
+            // Find the shortest path
+            boost::dijkstra_shortest_paths(original_graph_,
+                                           source_,
+                                           boost::predecessor_map(pred_map)
+                                                   .distance_map(dist_map));
+
+            // Add the new path
+            for (Vertex u = sink_, v = pred_map[u];
+                 u != v; u = v, v = pred_map[v])
+            {
+                i_shortest_paths_[i][u].insert(v);
+            }
+        }
+        else
+        {
+            // Prepare variables for path finding
+            size_t graph_size = boost::num_vertices(copied_graph_);
+            Vertex root_vertex = original_to_copy_[source_];
+            std::vector<Vertex> pred_list(graph_size);
+            std::vector<double> dist_list(graph_size);
+            VertexIndexMap graph_indices = boost::get(boost::vertex_index,
+                                                      copied_graph_);
+            EdgeWeightMap weight_map = boost::get(boost::edge_weight,
+                                                     copied_graph_);
+            PredecessorMap pred_map(&pred_list[0], graph_indices);
+            DistanceMap dist_map(&dist_list[0], graph_indices);
+
+            // Find the shortest path
+            boost::bellman_ford_shortest_paths(copied_graph_,
+                                               graph_size,
+                                               boost::root_vertex(root_vertex)
+                                                       .weight_map(weight_map)
+                                                       .predecessor_map(pred_map)
+                                                       .distance_map(dist_map));
+
+            // Add the new path (the given path is in the copied graph, so the
+            // vertices need to be mapped to the original graph)
+            Vertex sink_copy = original_to_copy_[sink_];
+            for (Vertex u_copy = sink_copy, v_copy = pred_map[u_copy];
+                 u_copy != v_copy; u_copy = v_copy, v_copy = pred_map[v_copy])
+            {
+                Vertex u_original = copy_to_original_[u_copy];
+                Vertex v_original = copy_to_original_[v_copy];
+
+                // Ignore loops
+                if (u_original == v_original)
+                {
+                    continue;
+                }
+
+                i_shortest_paths_[i][u_original].insert(v_original);
+            }
+        }
+    }
+
+    void KShortestPaths::UpdateEdges()
+    {
+        // Remove the old edges, needs to be done without any iterator since
+        // the removal invalidates any iterators
+        for (auto edge : edges_to_remove_)
+        {
+            boost::remove_edge(edge.first, edge.second, copied_graph_);
+        }
+        edges_to_remove_.clear();
+
+        // Add the new edges, needs to be done without any iterator since
+        // the addition invalidates any iterators
+        for (auto edge : edges_to_add_)
+        {
+            boost::add_edge(edge.first.first, edge.first.second,
+                            edge.second, copied_graph_);
+        }
+        edges_to_add_.clear();
+    }
+
+    void KShortestPaths::QueueAddEdge(Vertex source, Vertex target, double weight)
+    {
+        edges_to_add_.push_back(
+                std::pair<std::pair<Vertex, Vertex>, double>(
+                        std::pair<Vertex, Vertex>(source, target), weight));
+    }
+
+    void KShortestPaths::QueueRemoveEdge(Vertex source, Vertex target)
+    {
+        edges_to_remove_.push_back(std::pair<Vertex, Vertex>(source, target));
+    }
+}
+

+ 156 - 0
algo/KShortestPaths.h

@@ -0,0 +1,156 @@
+//
+// Created by wrede on 25.05.16.
+//
+
+#ifndef GBMOT_KSHORTESTPATHS_H
+#define GBMOT_KSHORTESTPATHS_H
+
+#include "../graph/Definitions.h"
+#include "../core/ObjectData.h"
+#include "../core/Tracklet.h"
+
+namespace algo
+{
+    /**
+     * Class providing a k-shortest-paths algorithm implementation.
+     */
+    class KShortestPaths
+    {
+    private:
+        /**
+         * The original graph, will not be altered.
+         */
+        DirectedGraph original_graph_;
+
+        /**
+         * The current copy of the original graph, will be transformed.
+         */
+        DirectedGraph copied_graph_;
+
+        /**
+         * The starting vertex for the next algorithm run.
+         * Corresponds to the original graph.
+         */
+        const Vertex source_;
+
+        /**
+         * The target vertex for the next algorithm run.
+         * Corresponds to the original graph.
+         */
+        const Vertex sink_;
+
+        /**
+         * Maps the vertices in the original graph to the vertices in the copied
+         * graph.
+         */
+        std::unordered_map<Vertex, Vertex> original_to_copy_;
+
+        /**
+         * Maps the vertices in the copied graph to the vertices in the original
+         * graph.
+         */
+        std::unordered_map<Vertex, Vertex> copy_to_original_;
+
+        /**
+         * All found paths for every iteration of the current run.
+         * Corresponds to the original graph.
+         */
+        std::vector<MultiPredecessorMap> i_shortest_paths_;
+
+        /**
+         * Creates a copy of the original graph and updates all corresponding
+         * maps.
+         */
+        void CopyOriginalGraph();
+
+        /**
+         * Extends the current copied graph.
+         * Splits the vertices along all paths at the given iteration into two
+         * vertices, one for incoming edges and one for outgoing edges. Connects
+         * the two vertices with an auxiliary edge.
+         * @param i The targeted shortest paths iteration
+         */
+        void ExtendGraph(size_t i);
+
+        /**
+         * Calculates the path costs of every path at the iteration given.
+         * @param i The targeted shortest paths iteration
+         */
+        double OverallCosts(size_t i);
+
+        /**
+         * Interlaces all paths in the given iterations.
+         * Removes duplicate edges and produces node-disjoint paths.
+         * @param i The targeted shortest paths iteration
+         */
+        void Interlace(size_t i);
+
+        /**
+         * Finds the shortest path in either the original or the copied graph.
+         * Adds the path to the given iteration of the i_shortest_paths map.
+         * @param i The targeted shortest paths iteration
+         * @param original If true, the original graph will be used, else the
+         *                 current copied graph will be used.
+         */
+        void FindAndAugmentPath(size_t i, bool original);
+
+        /**
+         * Utility variable. Simulates a queue for the edges to add in the next
+         * edge update call. All edges and vertices correspond to the copied
+         * graph.
+         */
+        std::vector<std::pair<std::pair<Vertex, Vertex>, double>> edges_to_add_;
+
+        /**
+         * Utility variable. Simulates a queue for the edges to remove in the
+         * next edge update call. All edges and vertices correspond to the
+         * copied graph.
+         */
+        std::vector<std::pair<Vertex, Vertex>> edges_to_remove_;
+
+        /**
+         * Queues the edge between the given two vertices.
+         * In the next update edges call the edge will be removed.
+         * @param source The source vertex
+         * @param target The target vertex
+         */
+        void QueueRemoveEdge(Vertex source, Vertex target);
+
+        /**
+         * Queues the edge between the given two vertices.
+         * In the next update edges call the edge will be added with the given
+         * weight.
+         * @param source The source vertex
+         * @param target The target vertex
+         * @param weight The weight of the edge
+         */
+        void QueueAddEdge(Vertex source, Vertex target, double weight);
+
+        /**
+         * Updates the copied graph with all queued edges.
+         * First removes the queued edges then adds the queued edges.
+         */
+        void UpdateEdges();
+    public:
+        /**
+         * Initializes the k-shortest-paths algorithm for the given graph.
+         * Uses the source vertex as starting and the sink vertex as target
+         * vertex.
+         * @param graph The graph to work with
+         * @param source The starting vertex
+         * @param sink The target vertex
+         */
+        KShortestPaths(DirectedGraph graph, Vertex source, Vertex sink);
+
+        /**
+         * Runs the algorithm to find the given number of shortest paths.
+         * The actual number of paths found is the number of entries in the
+         * MultiPredecessorMap with the sink vertex as the key.
+         * @param max_path_count The maximum number of paths to find
+         */
+        MultiPredecessorMap Run(size_t max_path_count);
+    };
+}
+
+
+#endif //GBMOT_KSHORTESTPATHS_H

+ 12 - 11
algo/TwoStage.cpp

@@ -4,19 +4,19 @@
 
 #include "TwoStage.h"
 #include "../util/Logger.h"
+#include <boost/graph/dijkstra_shortest_paths.hpp>
 
 namespace algo
 {
     TwoStage::TwoStage(size_t max_frame_skip, double penalty_value,
                        size_t max_tracklet_count)
+        : max_frame_skip_(max_frame_skip), penalty_value_(penalty_value),
+          max_tracklet_count_(max_tracklet_count)
     {
-        max_frame_skip_ = max_frame_skip;
-        penalty_value_ = penalty_value;
-        max_tracklet_count_ = max_tracklet_count;
     }
 
     void TwoStage::CreateObjectGraph(DirectedGraph& graph,
-                                     core::DetectionSequence& detections)
+                                     const core::DetectionSequence& detections)
     {
         util::Logger::LogInfo("Creating object graph");
 
@@ -98,7 +98,7 @@ namespace algo
         Vertex tlt_src = boost::add_vertex(
                 core::ObjectDataPtr(new core::ObjectData()), tlt_graph);
 
-        // Prepare parameter for dijkstra
+        // Prepare variables for dijkstra
         size_t obj_graph_size = boost::num_vertices(obj_graph);
         std::vector<Vertex> obj_pred_list(obj_graph_size);
         std::vector<double> obj_dist_list(obj_graph_size);
@@ -131,9 +131,6 @@ namespace algo
             {
                 tracklet->AddPathObject(obj_values[u]);
 
-//                util::Logger::LogDebug(std::to_string(tracklet->GetFirstFrameIndex())
-//                                       + "," + std::to_string(tracklet->GetLastFrameIndex()));
-
                 // Leave source and sink untouched
                 if (!obj_values[u]->IsVirtual())
                 {
@@ -159,7 +156,9 @@ namespace algo
         }
 
         // Add sink to tracklet graph
-        Vertex tlt_snk = boost::add_vertex(core::ObjectDataPtr(new core::ObjectData()), tlt_graph);
+        Vertex tlt_snk =
+                boost::add_vertex(core::ObjectDataPtr(new core::ObjectData()),
+                                  tlt_graph);
 
         // Create edges
         size_t tlt_graph_size = boost::num_vertices(tlt_graph);
@@ -170,7 +169,8 @@ namespace algo
         for (size_t i = 1; i < tlt_graph_size - 1; ++i)
         {
             Vertex u = tlt_indices[i];
-            core::TrackletPtr u_ptr = std::static_pointer_cast<core::Tracklet>(tlt_values[u]);
+            core::TrackletPtr u_ptr =
+                    std::static_pointer_cast<core::Tracklet>(tlt_values[u]);
             size_t u_first_frame = u_ptr->GetFirstFrameIndex();
             size_t u_last_frame = u_ptr->GetLastFrameIndex();
 
@@ -180,7 +180,8 @@ namespace algo
                 if (i != j)
                 {
                     Vertex v = tlt_indices[j];
-                    core::TrackletPtr v_ptr = std::static_pointer_cast<core::Tracklet>(tlt_values[v]);
+                    core::TrackletPtr v_ptr =
+                            std::static_pointer_cast<core::Tracklet>(tlt_values[v]);
                     size_t v_first_frame = v_ptr->GetFirstFrameIndex();
 
                     if (u_last_frame < v_first_frame)

+ 9 - 8
algo/TwoStage.h

@@ -5,10 +5,9 @@
 #ifndef GBMOT_KOERNERTRACKING_H
 #define GBMOT_KOERNERTRACKING_H
 
-#include "Definitions.h"
 #include "../core/DetectionSequence.h"
 #include "../core/Tracklet.h"
-#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include "../graph/Definitions.h"
 
 namespace algo
 {
@@ -21,17 +20,17 @@ namespace algo
         /**
          * Maximum edge length to link object
          */
-        size_t max_frame_skip_;
+        const size_t max_frame_skip_;
 
         /**
          * Edge value to link to source and sink
          */
-        double penalty_value_;
+        const double penalty_value_;
 
         /**
          * Maximum dijkstra iterations / number of tracklets to create
          */
-        size_t max_tracklet_count_;
+        const size_t max_tracklet_count_;
     public:
         /**
          * Initializes the algorithm wih the given values.
@@ -48,7 +47,7 @@ namespace algo
          * @param detections The objects to use for the graph
          */
         void CreateObjectGraph(DirectedGraph& graph,
-                               core::DetectionSequence& detections);
+                               const core::DetectionSequence& detections);
 
         /**
          * Reduces the object graph into linked tracklets.
@@ -57,7 +56,8 @@ namespace algo
          * @param frame_count The frame count of the object graph
          */
         void CreateTrackletGraph(DirectedGraph& obj_graph,
-                                 DirectedGraph& tlt_graph, size_t frame_count);
+                                 DirectedGraph& tlt_graph,
+                                 size_t frame_count);
 
         /**
          * Extracts the finished tracks from the given tracklet graph.
@@ -65,7 +65,8 @@ namespace algo
          * @param depth The depth to flatten the tracklets to
          * @param tracks The vector to write the extracted tracks in
          */
-        void ExtractTracks(DirectedGraph& tlt_graph, size_t depth,
+        void ExtractTracks(DirectedGraph& tlt_graph,
+                           size_t depth,
                            std::vector<core::TrackletPtr>& tracks);
     };
 }

+ 0 - 28
core/Definitions.h

@@ -1,28 +0,0 @@
-//
-// Created by wrede on 22.04.16.
-//
-
-#ifndef GBMOT_CONSTANTS_H
-#define GBMOT_CONSTANTS_H
-
-#include <vector>
-#include <memory>
-
-namespace core
-{
-    class ObjectData;
-    class ObjectData3D;
-    class ObjectDataMap;
-    class ObjectDataAngular;
-    class Tracklet;
-
-    typedef std::vector<std::vector<std::vector<double>>> Vector3d;
-    typedef std::vector<std::vector<double>> Vector2d;
-    typedef std::shared_ptr<ObjectData> ObjectDataPtr;
-    typedef std::shared_ptr<ObjectData3D> ObjectData3DPtr;
-    typedef std::shared_ptr<ObjectDataMap> ObjectDataMapPtr;
-    typedef std::shared_ptr<ObjectDataAngular> ObjectDataAngularPtr;
-    typedef std::shared_ptr<Tracklet> TrackletPtr;
-}
-
-#endif //GBMOT_CONSTANTS_H

+ 0 - 1
core/DetectionSequence.h

@@ -6,7 +6,6 @@
 #define GBMOT_DETECTIONSEQUENCE_H
 
 
-#include "Definitions.h"
 #include <string>
 #include "ObjectData.h"
 #include "ObjectDataMap.h"

+ 4 - 1
core/ObjectData.h

@@ -6,14 +6,17 @@
 #define GBMOT_NODEDATA_H
 
 
-#include "Definitions.h"
 #include <string>
 #include <unordered_map>
 #include <iostream>
 #include <opencv2/core/core.hpp>
+#include <memory>
 
 namespace core
 {
+    class ObjectData;
+    typedef std::shared_ptr<ObjectData> ObjectDataPtr;
+
     //TODO RENAME ObjectDataBase / ObjectBase / DataBase / AObject / DetectionBase ...
     /**
      * Base class for all detected objects.

+ 2 - 2
core/ObjectData3D.cpp

@@ -10,8 +10,8 @@ namespace core
     ObjectData3D::ObjectData3D(size_t frame_index, cv::Point3d position)
             : ObjectData(frame_index),
               position_(position),
-              temporal_weight_(0.5),
-              spatial_weight_(0.5)
+              temporal_weight_(1.0),
+              spatial_weight_(1.0)
     {
     }
 

+ 3 - 0
core/ObjectData3D.h

@@ -10,6 +10,9 @@
 
 namespace core
 {
+    class ObjectData3D;
+    typedef std::shared_ptr<ObjectData3D> ObjectData3DPtr;
+
     /**
      * Class for storing a detection in three dimensional space.
      */

+ 1 - 3
core/ObjectDataAngular.cpp

@@ -10,10 +10,8 @@ namespace core
     ObjectDataAngular::ObjectDataAngular(size_t frame_index,
                                          const cv::Point3d& position,
                                          double angle)
-            : ObjectData3D(frame_index, position), angle_(angle), angular_weight_(1.0 / 3.0)
+            : ObjectData3D(frame_index, position), angle_(angle), angular_weight_(1.0)
     {
-        SetSpatialWeight(1.0 / 3.0);
-        SetTemporalWeight(1.0 / 3.0);
     }
 
     void ObjectDataAngular::SetAngularWeight(double weight)

+ 3 - 0
core/ObjectDataAngular.h

@@ -9,6 +9,9 @@
 
 namespace core
 {
+    class ObjectDataAngular;
+    typedef std::shared_ptr<ObjectDataAngular> ObjectDataAngularPtr;
+
     /**
      * Class for storing a detection in three dimensional space with an rotation
      * angle in radians.

+ 3 - 0
core/ObjectDataMap.h

@@ -13,6 +13,9 @@
 
 namespace core
 {
+    class ObjectDataMap;
+    typedef std::shared_ptr<ObjectDataMap> ObjectDataMapPtr;
+
     //TODO RENAME
     /**
      * Stores a map of key-value-weight pairs.

+ 3 - 0
core/Tracklet.h

@@ -11,6 +11,9 @@
 
 namespace core
 {
+    class Tracklet;
+    typedef std::shared_ptr<Tracklet> TrackletPtr;
+
     /**
      * A class for storing multiple object data objects.
      * The object data objects are handled as a path.

+ 39 - 0
graph/Definitions.h

@@ -0,0 +1,39 @@
+//
+// Created by wrede on 27.05.16.
+//
+
+#ifndef GBMOT_DEFINITIONS_H
+#define GBMOT_DEFINITIONS_H
+
+#include "../core/ObjectData.h"
+#include "../../../../../usr/include/boost/graph/properties.hpp"
+#include "../../../../../usr/include/boost/pending/property.hpp"
+#include "../../../../../usr/include/boost/graph/adjacency_list.hpp"
+#include "../../../../../usr/include/boost/graph/graph_selectors.hpp"
+#include "../../../../../usr/include/boost/graph/graph_traits.hpp"
+#include "../../../../../usr/include/boost/property_map/property_map.hpp"
+
+typedef boost::property<boost::edge_weight_t, double> EdgeProp;
+typedef boost::property <boost::vertex_name_t, core::ObjectDataPtr>
+        VertexProp;
+typedef boost::adjacency_list <
+        boost::listS, boost::vecS, boost::directedS, VertexProp, EdgeProp>
+        DirectedGraph;
+typedef boost::graph_traits<DirectedGraph>::edge_descriptor Edge;
+typedef boost::graph_traits<DirectedGraph>::vertex_descriptor Vertex;
+typedef boost::property_map<DirectedGraph, boost::edge_weight_t>::type
+        EdgeWeightMap;
+typedef boost::property_map<DirectedGraph, boost::vertex_index_t>::type
+        VertexIndexMap;
+typedef boost::property_map<DirectedGraph, boost::vertex_name_t>::type
+        VertexValueMap;
+typedef boost::iterator_property_map<Vertex*, VertexIndexMap, Vertex, Vertex&>
+        PredecessorMap;
+typedef std::map<Vertex, std::set<Vertex>> MultiPredecessorMap;
+typedef boost::iterator_property_map<double*, VertexIndexMap, double, double&>
+        DistanceMap;
+typedef boost::iterator_property_map<
+        std::vector<Vertex>::iterator, VertexIndexMap, Vertex, Vertex&>
+        VertexVertexMap;
+
+#endif //GBMOT_DEFINITIONS_H

+ 127 - 12
main/main.cpp

@@ -1,11 +1,11 @@
 //
 // Created by wrede on 19.04.16.
 //
-#include "../core/Definitions.h"
 #include "../core/DetectionSequence.h"
 #include "../util/FileIO.h"
 #include "../util/Parser.h"
 #include "../algo/TwoStage.h"
+#include "../algo/KShortestPaths.h"
 #include "../visual/Visualizer.h"
 #include "../util/Logger.h"
 #include "../core/ObjectDataAngular.h"
@@ -16,7 +16,7 @@ void ReadInput(const std::string& input_file, core::DetectionSequence& sequence,
 {
     util::Logger::LogInfo("Reading input");
 
-    core::Vector3d values;
+    util::Vector3d values;
     util::FileIO::ReadCSV(values, input_file);
     util::Parser::ParseObjectDataAngular(values, sequence,
                                          temporal_weight,
@@ -36,6 +36,7 @@ void ReadInput(const std::string& input_file, core::DetectionSequence& sequence,
 
 struct
 {
+    size_t iterations;
     size_t max_frame_skip;
     size_t max_tracklet_count;
     double penalty_value;
@@ -51,14 +52,39 @@ void RunTwoStage(core::DetectionSequence& sequence, const std::string& output_fi
                              two_stage_params.max_tracklet_count);
 
     // Running the two stage graph algorithm
-    algo::DirectedGraph obj_graph;
+    DirectedGraph obj_graph;
     two_stage.CreateObjectGraph(obj_graph, sequence);
-    algo::DirectedGraph tlt_graph_1;
-    two_stage.CreateTrackletGraph(obj_graph, tlt_graph_1, sequence.GetFrameCount());
-    algo::DirectedGraph tlt_graph_2;
-    two_stage.CreateTrackletGraph(tlt_graph_1, tlt_graph_2, sequence.GetFrameCount());
+
+    // Run the tracklet creation at least once
+    DirectedGraph tlt_graph_1, tlt_graph_2;
+    two_stage.CreateTrackletGraph(obj_graph, tlt_graph_1,
+                                  sequence.GetFrameCount());
+
+    // Run the tracklet creation iteratively
+    for (size_t i = 1; i < two_stage_params.iterations; ++i)
+    {
+        if (i % 2 == 0)
+        {
+            two_stage.CreateTrackletGraph(tlt_graph_2, tlt_graph_1,
+                                          sequence.GetFrameCount());
+        }
+        else
+        {
+            two_stage.CreateTrackletGraph(tlt_graph_1, tlt_graph_2,
+                                          sequence.GetFrameCount());
+        }
+    }
+
+    // Extract tracklets and flatten tracklets
     std::vector<core::TrackletPtr> tracks;
-    two_stage.ExtractTracks(tlt_graph_2, 1, tracks);
+    if (two_stage_params.iterations % 2 == 0)
+    {
+        two_stage.ExtractTracks(tlt_graph_2, two_stage_params.iterations - 1, tracks);
+    }
+    else
+    {
+        two_stage.ExtractTracks(tlt_graph_1, two_stage_params.iterations - 1, tracks);
+    }
 
     // Interpolate tracks
     for (auto track : tracks)
@@ -109,9 +135,13 @@ void Run(int argc, char** argv)
             ("images-folder,f",
              boost::program_options::value<std::string>(&images_folder),
              "set images folder path")
+            ("iterations",
+             boost::program_options::value<size_t>(&two_stage_params.iterations)->default_value((2)),
+             "(two-stage) number of tracklet extraction iterations")
             ("max-frame-skip",
              boost::program_options::value<size_t>(&two_stage_params.max_frame_skip)->default_value(1),
-             "(two stage) set the maximum number of frames a track can skip between two detections")
+             "(two stage) set the maximum number of frames a track can skip between two detections,"
+                     " if set to less or equal than zero all frames are linked")
             ("max-tracklet-count",
              boost::program_options::value<size_t>(&two_stage_params.max_tracklet_count)->default_value(1),
              "(two stage) set the maximum number of tracklets to be extracted")
@@ -119,13 +149,13 @@ void Run(int argc, char** argv)
              boost::program_options::value<double>(&two_stage_params.penalty_value)->default_value(0.0),
              "(two stage) set the penalty value for edges from and to source and sink")
             ("temporal-weight",
-             boost::program_options::value<double>(&temporal_weight)->default_value(0.3),
+             boost::program_options::value<double>(&temporal_weight)->default_value(1.0),
              "temporal weight for difference calculations between two detections")
             ("spatial-weight",
-             boost::program_options::value<double>(&spatial_weight)->default_value(0.3),
+             boost::program_options::value<double>(&spatial_weight)->default_value(1.0),
              "spatial weight for difference calculations between two detections")
             ("angular-weight",
-             boost::program_options::value<double>(&angular_weight)->default_value(0.3),
+             boost::program_options::value<double>(&angular_weight)->default_value(1.0),
              "angular weight for difference calculations between two detections");
 
     boost::program_options::variables_map opt_var_map;
@@ -170,11 +200,96 @@ void Run(int argc, char** argv)
     }
 }
 
+void CreateTestGraph(DirectedGraph& graph, Vertex& source, Vertex& sink)
+{
+    // Create test graph (suurballe wikipedia example)
+//    std::vector<Vertex> vertices;
+//    for (size_t i = 0; i < 6; ++i)
+//    {
+//        vertices.push_back(
+//                boost::add_vertex(
+//                        core::ObjectDataPtr(new core::ObjectData(i)),graph));
+//    }
+//
+//    // AB
+//    boost::add_edge(vertices[0], vertices[1], 1.0, graph);
+//
+//    // AC
+//    boost::add_edge(vertices[0], vertices[2], 2.0, graph);
+//
+//    // BD
+//    boost::add_edge(vertices[1], vertices[3], 1.0, graph);
+//
+//    // BE
+//    boost::add_edge(vertices[1], vertices[4], 2.0, graph);
+//
+//    // CD
+//    boost::add_edge(vertices[2], vertices[3], 2.0, graph);
+//
+//    // DF
+//    boost::add_edge(vertices[3], vertices[5], 1.0, graph);
+//
+//    // EF
+//    boost::add_edge(vertices[4], vertices[5], 2.0, graph);
+//
+//    source = vertices[0];
+//    sink = vertices[5];
+
+    // Create test graph (disjoint path finding example)
+    std::vector<Vertex> vertices;
+    for (size_t i = 0; i < 8; ++i)
+    {
+        vertices.push_back(
+                boost::add_vertex(
+                        core::ObjectDataPtr(new core::ObjectData(i)),graph));
+    }
+
+    boost::add_edge(vertices[0], vertices[1], 1.0, graph);
+    boost::add_edge(vertices[0], vertices[4], 1.0, graph);
+    boost::add_edge(vertices[1], vertices[2], 1.0, graph);
+    boost::add_edge(vertices[2], vertices[3], 1.0, graph);
+    boost::add_edge(vertices[3], vertices[7], 1.0, graph);
+    boost::add_edge(vertices[4], vertices[3], 1.0, graph);
+    boost::add_edge(vertices[4], vertices[5], 3.0, graph);
+    boost::add_edge(vertices[5], vertices[6], 1.0, graph);
+    boost::add_edge(vertices[5], vertices[3], 1.0, graph);
+    boost::add_edge(vertices[6], vertices[7], 1.0, graph);
+
+    source = vertices[0];
+    sink = vertices[7];
+}
+
 int main(int argc, char** argv)
 {
     Run(argc, argv);
 
     //TestTracklet();
 
+//    Vertex source, sink;
+//    DirectedGraph graph;
+//
+//    util::Logger::SetDebug(true);
+//    util::Logger::SetInfo(true);
+//
+//    CreateTestGraph(graph, source, sink);
+//
+//    algo::KShortestPaths ksp(graph, source, sink);
+//    MultiPredecessorMap paths = ksp.Run(3);
+//
+//    util::Logger::LogDebug("found paths:");
+//    for (Vertex first : paths[sink])
+//    {
+//        std::string path;
+//        path += std::to_string(sink) + "->" + std::to_string(first);
+//
+//        for (Vertex u = first, v = (*paths[u].begin());
+//             u != v; u = v, v = (*paths[v].begin()))
+//        {
+//            path += "->" + std::to_string(v);
+//        }
+//
+//        util::Logger::LogDebug(path);
+//    }
+
     return 0;
 }

+ 1 - 1
main/preview.cpp

@@ -274,7 +274,7 @@ if (iLayers + 100 >= vertices.size())
 
                         // edge weight
                         //std::cout << " x" << params.maxLinkDistance << "," << params.maxAngularDistance << "; " << distPosition << "," << distAngular << "," << iOffset << " = " << 0.1 * (distPosition + 0.5 * distAngular) * double(iOffset) << std::endl;
-                        if (false || (distPosition < params.maxLinkDistance && distAngular < params.maxAngularDistance)) {
+                        if (distPosition < params.maxLinkDistance && distAngular < params.maxAngularDistance) {
                             // if we discard one layer, the edge weight should be higher!
                             boost::add_edge(vP, vQ, 0.1 * (distPosition + 0.5 * distAngular) * double(iOffset), g);
                             //boost::add_edge(vP, vQ, 0.001 * Weight((1.0 + 0.33 * distPosition) * (1.0 + distAngular) * Weight(1.0 + iOffset)), g);

+ 68 - 4
util/FileIO.cpp

@@ -2,13 +2,16 @@
 // Created by wrede on 19.04.16.
 //
 
+#include <algorithm>
 #include "FileIO.h"
 #include "Logger.h"
+#include "dirent.h"
 
 namespace util
 {
-    void FileIO::ReadCSV(core::Vector3d& values, const std::string& filename,
-                         const char& delimiter)
+    void FileIO::ReadCSV(Vector3d& values,
+                         const std::string& filename,
+                         char delimiter)
     {
         Logger::LogInfo("Reading CSV file");
 
@@ -50,8 +53,9 @@ namespace util
         Logger::LogDebug("frame count " + std::to_string(values.size()));
     }
 
-    void FileIO::ReadCSV(core::Vector2d& values, const std::string& filename,
-                         const char& delimiter)
+    void FileIO::ReadCSV(Vector2d& values,
+                         const std::string& filename,
+                         char delimiter)
     {
         Logger::LogInfo("Reading CSV file");
 
@@ -89,5 +93,65 @@ namespace util
 
         Logger::LogDebug("line count " + std::to_string(values.size()));
     }
+
+    void FileIO::ListFiles(const std::string& folder,
+                           std::vector<std::string>& file_names,
+                           bool sort)
+    {
+        Logger::LogInfo("Listing files in folder");
+
+        DIR* dir;
+        struct dirent *ent;
+        if ((dir = opendir(folder.c_str())) != NULL)
+        {
+            int offset = 2;
+            while ((ent = readdir(dir)) != NULL)
+            {
+                if (offset <= 0)
+                {
+                    file_names.push_back(ent->d_name);
+                }
+                offset--;
+            }
+            closedir(dir);
+
+            if (sort)
+            {
+                std::sort(file_names.begin(), file_names.end());
+            }
+
+            Logger::LogDebug("file count " + std::to_string(file_names.size()));
+        }
+        else
+        {
+            Logger::LogError("Could not open folder");
+        }
+    }
+
+    void FileIO::WriteCSVMatlab(DirectedGraph& graph,
+                                const std::string& file_name,
+                                char delimiter)
+    {
+        std::ofstream out(file_name, std::ofstream::out);
+
+        // Iterate all outgoing edges of every vertex
+        EdgeWeightMap weights = boost::get(boost::edge_weight, graph);
+        VertexIndexMap indices = boost::get(boost::vertex_index, graph);
+        boost::graph_traits<DirectedGraph>::vertex_iterator vi, vi_end;
+        boost::graph_traits<DirectedGraph>::out_edge_iterator oei, oei_end;
+        for (boost::tie(vi, vi_end) = boost::vertices(graph); vi != vi_end; ++vi)
+        {
+            for (boost::tie(oei, oei_end) = boost::out_edges(*vi, graph);
+                 oei != oei_end; ++oei)
+            {
+                // Write the edge to file
+                out << indices[boost::source(*oei, graph)] << delimiter
+                    << indices[boost::target(*oei, graph)] << delimiter
+                    << weights[*oei] << std::endl;
+            }
+        }
+
+        out.close();
+    }
 }
 

+ 33 - 5
util/FileIO.h

@@ -5,12 +5,17 @@
 #ifndef GBMOT_FILEIO_H
 #define GBMOT_FILEIO_H
 
-#include "../core/Definitions.h"
 #include <string>
 #include <fstream>
+#include <vector>
+#include "../core/ObjectData.h"
+#include "../graph/Definitions.h"
 
 namespace util
 {
+    typedef std::vector<std::vector<std::vector<double>>> Vector3d;
+    typedef std::vector<std::vector<double>> Vector2d;
+
     /**
      * Utility class for file in- and output.
      */
@@ -28,8 +33,9 @@ namespace util
          * @param filename The filename to read from
          * @param delimiter The delimiter used to separate the values in the file
          */
-        static void ReadCSV(core::Vector3d& values, const std::string& filename,
-                            const char& delimiter = ';');
+        static void ReadCSV(Vector3d& values,
+                            const std::string& filename,
+                            char delimiter = ';');
 
         /**
          * Reads a CSV file and stores the values in a 2D array.
@@ -38,8 +44,30 @@ namespace util
          * @param filename The filename to read from
          * @param delimiter The delimiter used to separate the values in the file
          */
-        static void ReadCSV(core::Vector2d& values, const std::string& filename,
-                            const char& delimiter = ';');
+        static void ReadCSV(Vector2d& values,
+                            const std::string& filename,
+                            char delimiter = ';');
+
+        /**
+         * Lists all file names in the given folder.
+         * @param folder The folder to look into
+         * @param file_names The vector to store the file names into
+         * @param sort True, if the files should be sorted alphabetically
+         */
+        static void ListFiles(const std::string& folder,
+                              std::vector<std::string>& file_names,
+                              bool sort = true);
+
+        /**
+         * Writes the given graph into a CSV file with an format readable by
+         * Matlab.
+         * @param graph The graph to write
+         * @param file_name The name of the file to write into
+         * @param delimiter The delimiter to use
+         */
+        static void WriteCSVMatlab(DirectedGraph& graph,
+                                   const std::string& file_name,
+                                   char delimiter = ';');
     };
 }
 

+ 6 - 7
util/Parser.cpp

@@ -9,10 +9,9 @@
 
 namespace util
 {
-    void Parser::ParseObjectDataMap(
-            const std::vector<std::string>& keys,
-            const core::Vector3d& values,
-            core::DetectionSequence& sequence)
+    void Parser::ParseObjectDataMap(const std::vector<std::string>& keys,
+                                    const Vector3d& values,
+                                    core::DetectionSequence& sequence)
     {
         util::Logger::LogInfo("Parsing ObjectDataMap");
 
@@ -30,7 +29,7 @@ namespace util
         }
     }
 
-    void Parser::ParseObjectData3D(const core::Vector3d& values,
+    void Parser::ParseObjectData3D(const Vector3d& values,
                                    core::DetectionSequence& sequence)
     {
         util::Logger::LogInfo("Parsing ObjectData3D");
@@ -76,7 +75,7 @@ namespace util
         }
     }
 
-    void Parser::ParseObjectDataAngular(const core::Vector3d& values,
+    void Parser::ParseObjectDataAngular(const Vector3d& values,
                                         core::DetectionSequence& sequence)
     {
         util::Logger::LogInfo("Parsing ObjectDataAngular");
@@ -123,7 +122,7 @@ namespace util
         }
     }
 
-    void Parser::ParseObjectDataAngular(const core::Vector3d& values,
+    void Parser::ParseObjectDataAngular(const Vector3d& values,
                                         core::DetectionSequence& sequence,
                                         double temporal_weight,
                                         double spatial_weight,

+ 11 - 12
util/Parser.h

@@ -5,7 +5,6 @@
 #ifndef GBMOT_PARSE_H
 #define GBMOT_PARSE_H
 
-#include "../core/Definitions.h"
 #include "../core/DetectionSequence.h"
 #include "../core/ObjectData.h"
 #include "../core/ObjectDataMap.h"
@@ -14,6 +13,9 @@
 
 namespace util
 {
+    typedef std::vector<std::vector<std::vector<double>>> Vector3d;
+    typedef std::vector<std::vector<double>> Vector2d;
+
     /**
      * Utility class for parsing diverse objects.
      */
@@ -29,28 +31,25 @@ namespace util
          * @param values A 3D vector of values
          * @param sequence The sequence to store the created objects in
          */
-        static void ParseObjectDataMap(
-                const std::vector<std::string>& keys,
-                const core::Vector3d& values,
-                core::DetectionSequence& sequence);
+        static void ParseObjectDataMap(const std::vector<std::string>& keys,
+                                       const Vector3d& values,
+                                       core::DetectionSequence& sequence);
 
         /**
          * Parses the values into a DetectionSequence of ObjectData3D
          * @param values A 3D vector of values
          * @param sequence The sequence to store the created objects in
          */
-        static void ParseObjectData3D(
-                const core::Vector3d& values,
-                core::DetectionSequence& sequence);
+        static void ParseObjectData3D(const Vector3d& values,
+                                      core::DetectionSequence& sequence);
 
         /**
          * Parses the values into a DetectionSequence of ObjectDataAngular objects.
          * @param values A 3D vector of values
          * @param sequence The sequence to store the created objects in
          */
-        static void ParseObjectDataAngular(
-                const core::Vector3d& values,
-                core::DetectionSequence& sequence);
+        static void ParseObjectDataAngular(const Vector3d& values,
+                                           core::DetectionSequence& sequence);
 
         /**
          * Parses the values into a DetectionSequence of ObjectDataAngular objects.
@@ -61,7 +60,7 @@ namespace util
          * @param spatial_weight The spatial weight
          * @param angular_weight The angular weight
          */
-        static void ParseObjectDataAngular(const core::Vector3d& values,
+        static void ParseObjectDataAngular(const Vector3d& values,
                                            core::DetectionSequence& sequence,
                                            double temporal_weight,
                                            double spatial_weight,

+ 3 - 28
visual/Visualizer.cpp

@@ -5,35 +5,10 @@
 #include "Visualizer.h"
 #include "../util/Logger.h"
 #include "../core/ObjectDataAngular.h"
+#include "../util/FileIO.h"
 
 namespace visual
 {
-    void Visualizer::LoadImages(std::string image_folder,
-                                std::vector<std::string>& image_files)
-    {
-        DIR* dir;
-        struct dirent *ent;
-        if ((dir = opendir(image_folder.c_str())) != NULL)
-        {
-            int offset = 2;
-            while ((ent = readdir(dir)) != NULL)
-            {
-                if (offset <= 0)
-                {
-                    image_files.push_back(ent->d_name);
-                }
-                offset--;
-            }
-            closedir(dir);
-
-            std::sort(image_files.begin(), image_files.end());
-        }
-        else
-        {
-            perror("Could not open image folder");
-        }
-    }
-
     void Visualizer::Display(core::DetectionSequence& sequence,
                              std::string image_folder,
                              std::string title, size_t first_frame,
@@ -43,7 +18,7 @@ namespace visual
 
         // Load images
         std::vector<std::string> image_files;
-        LoadImages(image_folder, image_files);
+        util::FileIO::ListFiles(image_folder, image_files);
 
         if (image_files.size() != sequence.GetFrameCount())
         {
@@ -148,7 +123,7 @@ namespace visual
 
         // Load images
         std::vector<std::string> image_files;
-        LoadImages(image_folder, image_files);
+        util::FileIO::ListFiles(image_folder, image_files);
 
         // Create window
         cv::namedWindow(title, CV_WINDOW_AUTOSIZE);

+ 0 - 10
visual/Visualizer.h

@@ -8,7 +8,6 @@
 #include <opencv2/core/core.hpp>
 #include <opencv2/opencv.hpp>
 #include "../core/DetectionSequence.h"
-#include "../core/Definitions.h"
 #include "../core/ObjectData3D.h"
 #include "../core/Tracklet.h"
 #include "dirent.h"
@@ -28,15 +27,6 @@ namespace visual
          * @return the current time in ms
          */
         int GetTime();
-
-        /**
-         * Loads the names of all files in the given folder into the given
-         * vector.
-         * @param image_folder The folder to read the files from
-         * @param image_files The vector to store the file names in
-         */
-        void LoadImages(std::string image_folder,
-                        std::vector<std::string>& image_files);
     public:
         /**
          * Displays the given sequence in an window.

Some files were not shown because too many files changed in this diff