Forráskód Böngészése

added program options
added visual display possibilities
added object data 3d for three dimensional positions
added object data angular for 3d with an rotation angle
added a logger for easy logging
added a math utility class
added comments
refactored diverse comments

Helge Wrede 9 éve
szülő
commit
0fdf940800
99 módosított fájl, 3368 hozzáadás és 1072 törlés
  1. 16 3
      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/ObjectDataMap_8h_source.html
  5. 0 0
      Documentation/html/ObjectData_8h_source.html
  6. 0 0
      Documentation/html/Parser_8h_source.html
  7. 0 0
      Documentation/html/Tracklet_8h_source.html
  8. 0 0
      Documentation/html/TwoStage_8h_source.html
  9. 0 0
      Documentation/html/algo_2Definitions_8h_source.html
  10. 7 3
      Documentation/html/annotated.html
  11. 3 5
      Documentation/html/classalgo_1_1TwoStage-members.html
  12. 50 53
      Documentation/html/classalgo_1_1TwoStage.html
  13. 3 4
      Documentation/html/classcore_1_1DetectionSequence-members.html
  14. 18 53
      Documentation/html/classcore_1_1DetectionSequence.html
  15. 10 7
      Documentation/html/classcore_1_1ObjectData-members.html
  16. 148 55
      Documentation/html/classcore_1_1ObjectData.html
  17. BIN
      Documentation/html/classcore_1_1ObjectData.png
  18. 11 9
      Documentation/html/classcore_1_1ObjectDataMap-members.html
  19. 91 71
      Documentation/html/classcore_1_1ObjectDataMap.html
  20. 17 12
      Documentation/html/classcore_1_1Tracklet-members.html
  21. 228 68
      Documentation/html/classcore_1_1Tracklet.html
  22. 13 10
      Documentation/html/classes.html
  23. 2 2
      Documentation/html/classutil_1_1FileIO-members.html
  24. 20 20
      Documentation/html/classutil_1_1FileIO.html
  25. 4 1
      Documentation/html/classutil_1_1Parser-members.html
  26. 151 4
      Documentation/html/classutil_1_1Parser.html
  27. 0 0
      Documentation/html/core_2Definitions_8h_source.html
  28. 7 3
      Documentation/html/files.html
  29. 145 30
      Documentation/html/functions.html
  30. 150 27
      Documentation/html/functions_func.html
  31. 0 1
      Documentation/html/functions_rela.html
  32. 10 6
      Documentation/html/hierarchy.html
  33. 2 3
      Documentation/html/search/all_0.js
  34. 4 3
      Documentation/html/search/all_1.js
  35. 1 1
      Documentation/html/search/all_2.js
  36. 2 1
      Documentation/html/search/all_3.js
  37. 1 1
      Documentation/html/search/all_4.js
  38. 11 4
      Documentation/html/search/all_5.js
  39. 6 0
      Documentation/html/search/all_6.js
  40. 6 5
      Documentation/html/search/all_7.js
  41. 1 4
      Documentation/html/search/all_8.js
  42. 10 1
      Documentation/html/search/all_9.js
  43. 5 4
      Documentation/html/search/all_a.js
  44. 1 2
      Documentation/html/search/classes_2.js
  45. 1 1
      Documentation/html/search/classes_3.js
  46. 4 2
      Documentation/html/search/classes_4.js
  47. 2 3
      Documentation/html/search/functions_0.js
  48. 4 3
      Documentation/html/search/functions_1.js
  49. 1 1
      Documentation/html/search/functions_2.js
  50. 2 1
      Documentation/html/search/functions_3.js
  51. 1 10
      Documentation/html/search/functions_4.js
  52. 17 1
      Documentation/html/search/functions_5.js
  53. 7 2
      Documentation/html/search/functions_6.js
  54. 5 3
      Documentation/html/search/functions_7.js
  55. 5 1
      Documentation/html/search/functions_8.js
  56. 4 2
      Documentation/html/search/functions_9.js
  57. 6 9
      Documentation/html/search/searchdata.js
  58. 4 0
      Documentation/latex/annotated.tex
  59. 25 43
      Documentation/latex/classalgo_1_1TwoStage.tex
  60. 17 31
      Documentation/latex/classcore_1_1DetectionSequence.tex
  61. 21 11
      Documentation/latex/classcore_1_1ObjectData.eps
  62. BIN
      Documentation/latex/classcore_1_1ObjectData.pdf
  63. 85 32
      Documentation/latex/classcore_1_1ObjectData.tex
  64. BIN
      Documentation/latex/classcore_1_1ObjectDataMap.pdf
  65. 52 46
      Documentation/latex/classcore_1_1ObjectDataMap.tex
  66. BIN
      Documentation/latex/classcore_1_1Tracklet.pdf
  67. 130 55
      Documentation/latex/classcore_1_1Tracklet.tex
  68. 14 14
      Documentation/latex/classutil_1_1FileIO.tex
  69. 61 6
      Documentation/latex/classutil_1_1Parser.tex
  70. 6 0
      Documentation/latex/hierarchy.tex
  71. 4 0
      Documentation/latex/refman.tex
  72. 1 1
      Doxyfile
  73. 3 4
      algo/Definitions.h
  74. 62 48
      algo/TwoStage.cpp
  75. 14 33
      algo/TwoStage.h
  76. 12 4
      core/Definitions.h
  77. 14 34
      core/DetectionSequence.cpp
  78. 11 15
      core/DetectionSequence.h
  79. 35 1
      core/ObjectData.cpp
  80. 55 10
      core/ObjectData.h
  81. 89 0
      core/ObjectData3D.cpp
  82. 83 0
      core/ObjectData3D.h
  83. 99 0
      core/ObjectDataAngular.cpp
  84. 79 0
      core/ObjectDataAngular.h
  85. 44 20
      core/ObjectDataMap.cpp
  86. 9 24
      core/ObjectDataMap.h
  87. 117 33
      core/Tracklet.cpp
  88. 56 26
      core/Tracklet.h
  89. 157 33
      main/main.cpp
  90. 15 10
      util/FileIO.cpp
  91. 7 10
      util/FileIO.h
  92. 56 0
      util/Logger.cpp
  93. 99 0
      util/Logger.h
  94. 44 0
      util/MyMath.cpp
  95. 58 0
      util/MyMath.h
  96. 161 8
      util/Parser.cpp
  97. 41 5
      util/Parser.h
  98. 241 0
      visual/Visualizer.cpp
  99. 74 0
      visual/Visualizer.h

+ 16 - 3
CMakeLists.txt

@@ -3,6 +3,7 @@ project(GBMOT)
 
 set(HOME_LOCAL /home/wrede/local)
 
+link_directories(/usr/lib64)
 include_directories(${HOME_LOCAL}/include)
 
 set(SOURCE_FILES
@@ -22,12 +23,19 @@ set(SOURCE_FILES
         util/Parser.h
         algo/TwoStage.cpp
         algo/TwoStage.h
-        algo/Definitions.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)
 
 find_package(Doxygen)
 
 if(DOXYGEN_FOUND)
-
     set(DOXYGEN_INPUT Doxyfile)
     set(DOXYGEN_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
 
@@ -43,6 +51,11 @@ if(DOXYGEN_FOUND)
 
 endif(DOXYGEN_FOUND)
 
+find_package(OpenCV REQUIRED)
+find_package(Boost REQUIRED program_options)
+
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 
-add_executable(GBMOT ${SOURCE_FILES})
+add_executable(GBMOT ${SOURCE_FILES})
+
+target_link_libraries(GBMOT ${OpenCV_LIBS} ${Boost_LIBRARIES})

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/DetectionSequence_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/FileIO_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/ObjectDataMap_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/ObjectData_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/Parser_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/Tracklet_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/TwoStage_8h_source.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/algo_2Definitions_8h_source.html


+ 7 - 3
Documentation/html/annotated.html

@@ -94,11 +94,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <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_1ObjectDataMap.html" target="_self">ObjectDataMap</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_1Tracklet.html" target="_self">Tracklet</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_1Parser.html" target="_self">Parser</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>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 3 - 5
Documentation/html/classalgo_1_1TwoStage-members.html

@@ -94,11 +94,9 @@ 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#add2da8463ae067ace43ab1201725157e">CreateObjectGraph</a>(core::DetectionSequence 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#ae966c3f17aca5fb05d5c90fd89bdf98c">CreateTrackletGraph</a>()</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#a5f618dde61f100d4371578aa36a01a7c">CreateTrackletGraph</a>(DirectedGraph obj_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><td class="entry"><a class="el" href="classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b">ExtractTracks</a>()</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#a4e1d9fde2480e607ae532d0dae84d3ea">ExtractTracks</a>(DirectedGraph tlt_graph)</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#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><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>
 </table></div><!-- contents -->
 <!-- start footer part -->

+ 50 - 53
Documentation/html/classalgo_1_1TwoStage.html

@@ -101,19 +101,15 @@ 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:add2da8463ae067ace43ab1201725157e"><td class="memItemLeft" align="right" valign="top">DirectedGraph&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#add2da8463ae067ace43ab1201725157e">CreateObjectGraph</a> (<a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> detections)</td></tr>
-<tr class="separator:add2da8463ae067ace43ab1201725157e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae966c3f17aca5fb05d5c90fd89bdf98c"><td class="memItemLeft" align="right" valign="top">DirectedGraph&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#ae966c3f17aca5fb05d5c90fd89bdf98c">CreateTrackletGraph</a> ()</td></tr>
-<tr class="separator:ae966c3f17aca5fb05d5c90fd89bdf98c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f618dde61f100d4371578aa36a01a7c"><td class="memItemLeft" align="right" valign="top">DirectedGraph&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#a5f618dde61f100d4371578aa36a01a7c">CreateTrackletGraph</a> (DirectedGraph obj_graph, size_t frame_count)</td></tr>
-<tr class="separator:a5f618dde61f100d4371578aa36a01a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af61470d4a2ed751844ba2adc3f41451b"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b">ExtractTracks</a> ()</td></tr>
-<tr class="separator:af61470d4a2ed751844ba2adc3f41451b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4e1d9fde2480e607ae532d0dae84d3ea"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classalgo_1_1TwoStage.html#a4e1d9fde2480e607ae532d0dae84d3ea">ExtractTracks</a> (DirectedGraph tlt_graph)</td></tr>
-<tr class="separator:a4e1d9fde2480e607ae532d0dae84d3ea"><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: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>
+<tr class="separator:a09168d0ace15d689c9d594ca16b93c38"><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>Implementation if the two-staged graph-based multi-object tracker. </p>
+<div class="textblock"><p>Implementation of the two-staged graph-based multi-object tracker. </p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
 <a class="anchor" id="ae302f9ea93d56155a9dbd0be060500f7"></a>
 <div class="memitem">
@@ -156,54 +152,54 @@ Public Member Functions</h2></td></tr>
 </div>
 </div>
 <h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="add2da8463ae067ace43ab1201725157e"></a>
+<a class="anchor" id="aa2b03f5bc30427ec5d0a7ca703e25e11"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">DirectedGraph algo::TwoStage::CreateObjectGraph </td>
+          <td class="memname">void algo::TwoStage::CreateObjectGraph </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a>&#160;</td>
-          <td class="paramname"><em>detections</em></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"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a> &amp;&#160;</td>
+          <td class="paramname"><em>detections</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 <p>Creates a graph with vertices for every detected object </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
+    <tr><td class="paramname">graph</td><td>The graph to write into </td></tr>
     <tr><td class="paramname">detections</td><td>The objects to use for the graph </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The created graph containing the object data </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ae966c3f17aca5fb05d5c90fd89bdf98c"></a>
+<a class="anchor" id="ae14cf79859b4275c862d6750b6bc6837"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">DirectedGraph algo::TwoStage::CreateTrackletGraph </td>
+          <td class="memname">void algo::TwoStage::CreateTrackletGraph </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
+          <td class="paramtype">DirectedGraph &amp;&#160;</td>
+          <td class="paramname"><em>obj_graph</em>, </td>
         </tr>
-      </table>
-</div><div class="memdoc">
-<p>Reduces the object graph into linked tracklets. The last created graph is used, as well as his frame count. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5f618dde61f100d4371578aa36a01a7c"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
         <tr>
-          <td class="memname">DirectedGraph algo::TwoStage::CreateTrackletGraph </td>
-          <td>(</td>
-          <td class="paramtype">DirectedGraph&#160;</td>
-          <td class="paramname"><em>obj_graph</em>, </td>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">DirectedGraph &amp;&#160;</td>
+          <td class="paramname"><em>tlt_graph</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -221,50 +217,51 @@ Public Member Functions</h2></td></tr>
 <p>Reduces the object graph into linked tracklets. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">obj_graph</td><td>The object graph to reduce </td></tr>
+    <tr><td class="paramname">tlt_graph</td><td>The graph to write the tracklets in </td></tr>
     <tr><td class="paramname">frame_count</td><td>The frame count of the object graph </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The created graph containing the tracklet data </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="af61470d4a2ed751844ba2adc3f41451b"></a>
+<a class="anchor" id="a09168d0ace15d689c9d594ca16b93c38"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">std::vector&lt; <a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a> &gt; algo::TwoStage::ExtractTracks </td>
+          <td class="memname">void algo::TwoStage::ExtractTracks </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramtype">DirectedGraph &amp;&#160;</td>
+          <td class="paramname"><em>tlt_graph</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
         </tr>
-      </table>
-</div><div class="memdoc">
-<p>Extracts the finished tracks from the last created tracklet graph. </p><dl class="section return"><dt>Returns</dt><dd>The vector of finished object tracks </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a4e1d9fde2480e607ae532d0dae84d3ea"></a>
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
         <tr>
-          <td class="memname">std::vector&lt; <a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a> &gt; algo::TwoStage::ExtractTracks </td>
-          <td>(</td>
-          <td class="paramtype">DirectedGraph&#160;</td>
-          <td class="paramname"><em>tlt_graph</em></td><td>)</td>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">std::vector&lt; core::TrackletPtr &gt; &amp;&#160;</td>
+          <td class="paramname"><em>tracks</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 <p>Extracts the finished tracks from the given tracklet graph. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">tlt_graph</td><td>The tracklet graph to extract from </td></tr>
+    <tr><td class="paramname">depth</td><td>The depth to flatten the tracklets to </td></tr>
+    <tr><td class="paramname">tracks</td><td>The vector to write the extracted tracks in </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The vector of finished object tracks </dd></dl>
 
 </div>
 </div>

+ 3 - 4
Documentation/html/classcore_1_1DetectionSequence-members.html

@@ -94,15 +94,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394">AddObject</a>(ObjectData object_data)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72">AddObject</a>(ObjectDataPtr object_data)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892">Clear</a>()</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a">DetectionSequence</a>(std::string name)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7">DetectionSequence</a>(const std::string &amp;name=&quot;DetectionSequence&quot;)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571">GetFrameCount</a>() const</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad">GetName</a>() const</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1">GetObject</a>(size_t frame_index, size_t object_index)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86">GetObject</a>(size_t frame_index, size_t object_index) const</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100">GetObjectCount</a>(size_t frame_index) const</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#a557132cfbb170daf47f5a890a0c5bac0">operator&lt;&lt;</a>(std::ostream &amp;os, const DetectionSequence &amp;obj)</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410">Print</a>(std::ostream &amp;os) const</td><td class="entry"><a class="el" href="classcore_1_1DetectionSequence.html">core::DetectionSequence</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 18 - 53
Documentation/html/classcore_1_1DetectionSequence.html

@@ -89,7 +89,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
 <a href="#friends">Friends</a> &#124;
 <a href="classcore_1_1DetectionSequence-members.html">List of all members</a>  </div>
   <div class="headertitle">
@@ -101,26 +100,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ad2183e28df5cb27883d396dfa3b40b6a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a">DetectionSequence</a> (std::string name)</td></tr>
-<tr class="separator:ad2183e28df5cb27883d396dfa3b40b6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a933757fe1f1093ac4be0d9be9a79d394"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394">AddObject</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> object_data)</td></tr>
-<tr class="separator:a933757fe1f1093ac4be0d9be9a79d394"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2cbdc8db34fe87932653826fc8a3c1f7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7">DetectionSequence</a> (const std::string &amp;name=&quot;DetectionSequence&quot;)</td></tr>
+<tr class="separator:a2cbdc8db34fe87932653826fc8a3c1f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3cc0fdf3281f34985f4762086293db72"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72">AddObject</a> (ObjectDataPtr object_data)</td></tr>
+<tr class="separator:a3cc0fdf3281f34985f4762086293db72"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab62569a3e51d58457057deba12ef6892"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892">Clear</a> ()</td></tr>
 <tr class="separator:ab62569a3e51d58457057deba12ef6892"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a8a1af3dee89766d06f4a4f74044082ad"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad">GetName</a> () const</td></tr>
 <tr class="separator:a8a1af3dee89766d06f4a4f74044082ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8d562d3ea68249306825655efc703ee1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1">GetObject</a> (size_t frame_index, size_t object_index)</td></tr>
-<tr class="separator:a8d562d3ea68249306825655efc703ee1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab2b72c6e0a9ee14dba99d07116c1d86"><td class="memItemLeft" align="right" valign="top">ObjectDataPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86">GetObject</a> (size_t frame_index, size_t object_index) const</td></tr>
+<tr class="separator:aab2b72c6e0a9ee14dba99d07116c1d86"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a2417e4f2652a39245d6f2faa0ce19571"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571">GetFrameCount</a> () const</td></tr>
 <tr class="separator:a2417e4f2652a39245d6f2faa0ce19571"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a99a1b693215c386c4716df12f6040100"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100">GetObjectCount</a> (size_t frame_index) const</td></tr>
 <tr class="separator:a99a1b693215c386c4716df12f6040100"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ad8e771ebdcfe84a91da5eb71cb98a410"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410">Print</a> (std::ostream &amp;os) const</td></tr>
-<tr class="separator:ad8e771ebdcfe84a91da5eb71cb98a410"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
 <tr class="memitem:a557132cfbb170daf47f5a890a0c5bac0"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1DetectionSequence.html#a557132cfbb170daf47f5a890a0c5bac0">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classcore_1_1DetectionSequence.html">DetectionSequence</a> &amp;obj)</td></tr>
@@ -129,15 +123,15 @@ Friends</h2></td></tr>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Class for storing a full sequence of frame, each with multiple detected objects. </p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a class="anchor" id="ad2183e28df5cb27883d396dfa3b40b6a"></a>
+<a class="anchor" id="a2cbdc8db34fe87932653826fc8a3c1f7"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">core::DetectionSequence::DetectionSequence </td>
           <td>(</td>
-          <td class="paramtype">std::string&#160;</td>
-          <td class="paramname"><em>name</em></td><td>)</td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;DetectionSequence&quot;</code></td><td>)</td>
           <td></td>
         </tr>
       </table>
@@ -152,14 +146,14 @@ Friends</h2></td></tr>
 </div>
 </div>
 <h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a933757fe1f1093ac4be0d9be9a79d394"></a>
+<a class="anchor" id="a3cc0fdf3281f34985f4762086293db72"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void core::DetectionSequence::AddObject </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
           <td class="paramname"><em>object_data</em></td><td>)</td>
           <td></td>
         </tr>
@@ -222,12 +216,12 @@ Friends</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a8d562d3ea68249306825655efc703ee1"></a>
+<a class="anchor" id="aab2b72c6e0a9ee14dba99d07116c1d86"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> core::DetectionSequence::GetObject </td>
+          <td class="memname">ObjectDataPtr core::DetectionSequence::GetObject </td>
           <td>(</td>
           <td class="paramtype">size_t&#160;</td>
           <td class="paramname"><em>frame_index</em>, </td>
@@ -241,17 +235,18 @@ Friends</h2></td></tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td>
+          <td></td><td> const</td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Gets the object in the given frame with the given index. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Gets a pointer to the object in the given frame with the given index. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">frame_index</td><td>The frame to get the object from </td></tr>
     <tr><td class="paramname">object_index</td><td>The objects index in the corresponding frame </td></tr>
   </table>
   </dd>
 </dl>
+<dl class="section return"><dt>Returns</dt><dd>A pointer to the stored object data </dd></dl>
 
 </div>
 </div>
@@ -274,37 +269,7 @@ Friends</h2></td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The number of object in this frame </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ad8e771ebdcfe84a91da5eb71cb98a410"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">void core::DetectionSequence::Print </td>
-          <td>(</td>
-          <td class="paramtype">std::ostream &amp;&#160;</td>
-          <td class="paramname"><em>os</em></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Used in the &lt;&lt; operator </p><dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
-  </table>
-  </dd>
-</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of objects in this frame </dd></dl>
 
 </div>
 </div>
@@ -340,7 +305,7 @@ Friends</h2></td></tr>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Overrides the &lt;&lt; operator for easy output. Calls the print method. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Overrides the &lt;&lt; operator for easy output. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
     <tr><td class="paramname">obj</td><td>The object to write into the stream </td></tr>

+ 10 - 7
Documentation/html/classcore_1_1ObjectData-members.html

@@ -94,14 +94,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">CompareTo</a>(ObjectData *obj)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">CompareTo</a>(ObjectDataPtr obj) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b">ObjectData</a>(std::size_t frame_index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a56fc9b6184428bf4d80826bbb9fe4c6f">operator&lt;&lt;</a>(std::ostream &amp;os, const ObjectData &amp;obj)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">Print</a>(std::ostream &amp;os) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">Interpolate</a>(ObjectDataPtr obj, double fraction) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b">ObjectData</a>(std::size_t frame_index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a56fc9b6184428bf4d80826bbb9fe4c6f">operator&lt;&lt;</a>(std::ostream &amp;os, const ObjectData &amp;obj)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a>(double score)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a>(size_t index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">Visualize</a>(cv::Mat &amp;image, cv::Scalar &amp;color) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 148 - 55
Documentation/html/classcore_1_1ObjectData.html

@@ -89,8 +89,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-attribs">Protected Attributes</a> &#124;
 <a href="#friends">Friends</a> &#124;
 <a href="classcore_1_1ObjectData-members.html">List of all members</a>  </div>
   <div class="headertitle">
@@ -105,8 +103,10 @@ Inheritance diagram for core::ObjectData:</div>
  <div class="center">
   <img src="classcore_1_1ObjectData.png" usemap="#core::ObjectData_map" alt=""/>
   <map id="core::ObjectData_map" name="core::ObjectData_map">
-<area href="classcore_1_1ObjectDataMap.html" alt="core::ObjectDataMap" shape="rect" coords="0,56,132,80"/>
-<area href="classcore_1_1Tracklet.html" alt="core::Tracklet" shape="rect" coords="142,56,274,80"/>
+<area href="classcore_1_1ObjectData3D.html" alt="core::ObjectData3D" shape="rect" coords="0,56,152,80"/>
+<area href="classcore_1_1ObjectDataMap.html" alt="core::ObjectDataMap" shape="rect" coords="162,56,314,80"/>
+<area href="classcore_1_1Tracklet.html" alt="core::Tracklet" shape="rect" coords="324,56,476,80"/>
+<area href="classcore_1_1ObjectDataAngular.html" alt="core::ObjectDataAngular" shape="rect" coords="0,112,152,136"/>
 </map>
  </div></div>
 <table class="memberdecls">
@@ -118,20 +118,20 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:af4333a52b012841a6ba73b25aeaae71b"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1151e9215baf315f4b98f696f4271162"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a> () const</td></tr>
 <tr class="separator:a1151e9215baf315f4b98f696f4271162"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedfe00fa37d5ac7ef554bda746931148"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a> (size_t index)</td></tr>
+<tr class="separator:aedfe00fa37d5ac7ef554bda746931148"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a737216c2689aefa216c1c842922d7dd8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a> (double score)</td></tr>
+<tr class="separator:a737216c2689aefa216c1c842922d7dd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9208bfeee72238e2d635dfab368c09a"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a> ()</td></tr>
+<tr class="separator:ae9208bfeee72238e2d635dfab368c09a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a2880d710cfa520e9c0453e2a6729c0e2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a> () const</td></tr>
 <tr class="separator:a2880d710cfa520e9c0453e2a6729c0e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a01f04d64b1e62f567d819a8fcbe38319"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">CompareTo</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *obj)</td></tr>
-<tr class="separator:a01f04d64b1e62f567d819a8fcbe38319"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:aa26949b0456068d67802d9f6067aa657"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">Print</a> (std::ostream &amp;os) const</td></tr>
-<tr class="separator:aa26949b0456068d67802d9f6067aa657"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ade1423dbad9323431d22750121fa59e5"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td></tr>
-<tr class="separator:ade1423dbad9323431d22750121fa59e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbf7a1e87235f1b204d4d2eb8a37a9a6"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">CompareTo</a> (ObjectDataPtr obj) const</td></tr>
+<tr class="separator:afbf7a1e87235f1b204d4d2eb8a37a9a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad681915317decab76c384a635fc8444e"><td class="memItemLeft" align="right" valign="top">virtual ObjectDataPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">Interpolate</a> (ObjectDataPtr obj, double fraction) const</td></tr>
+<tr class="separator:ad681915317decab76c384a635fc8444e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae2c4fceddc529570dbe8909309f9961"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">Visualize</a> (cv::Mat &amp;image, cv::Scalar &amp;color) const</td></tr>
+<tr class="separator:aae2c4fceddc529570dbe8909309f9961"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
 Friends</h2></td></tr>
@@ -153,7 +153,7 @@ Friends</h2></td></tr>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Creates a new empty <a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> (e.g. for virtual objects) </p>
+<p>Creates a new empty virtual <a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> </p>
 
 </div>
 </div>
@@ -180,7 +180,7 @@ Friends</h2></td></tr>
 </div>
 </div>
 <h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a01f04d64b1e62f567d819a8fcbe38319"></a>
+<a class="anchor" id="afbf7a1e87235f1b204d4d2eb8a37a9a6"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -190,9 +190,9 @@ Friends</h2></td></tr>
         <tr>
           <td class="memname">double core::ObjectData::CompareTo </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *&#160;</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
           <td class="paramname"><em>obj</em></td><td>)</td>
-          <td></td>
+          <td> const</td>
         </tr>
       </table>
   </td>
@@ -209,43 +209,43 @@ Friends</h2></td></tr>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>A double value indicating the comparison result </dd></dl>
 
-<p>Reimplemented in <a class="el" href="classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947">core::ObjectDataMap</a>, and <a class="el" href="classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89">core::Tracklet</a>.</p>
+<p>Reimplemented in <a class="el" href="classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74">core::ObjectDataMap</a>, <a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">core::Tracklet</a>, <a class="el" href="classcore_1_1ObjectData3D.html#abef3e4e7a0dc121d8a403d91964be576">core::ObjectData3D</a>, and <a class="el" href="classcore_1_1ObjectDataAngular.html#a2932240c6c082b76f2c04723cdf3e4f9">core::ObjectDataAngular</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="a1151e9215baf315f4b98f696f4271162"></a>
+<a class="anchor" id="ae9208bfeee72238e2d635dfab368c09a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">std::size_t core::ObjectData::GetFrameIndex </td>
+          <td class="memname">double core::ObjectData::GetDetectionScore </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
-          <td> const</td>
+          <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Getter for the frame index </p><dl class="section return"><dt>Returns</dt><dd>The frame index </dd></dl>
+<p>Gets the detection score </p><dl class="section return"><dt>Returns</dt><dd>The detection score </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="a2880d710cfa520e9c0453e2a6729c0e2"></a>
+<a class="anchor" id="a1151e9215baf315f4b98f696f4271162"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">bool core::ObjectData::IsVirtual </td>
+          <td class="memname">std::size_t core::ObjectData::GetFrameIndex </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Is this node considered a virtual node </p><dl class="section return"><dt>Returns</dt><dd>Whether this node is virtual </dd></dl>
+<p>Gets the frame index </p><dl class="section return"><dt>Returns</dt><dd>The frame index </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="aa26949b0456068d67802d9f6067aa657"></a>
+<a class="anchor" id="ad681915317decab76c384a635fc8444e"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -253,32 +253,103 @@ Friends</h2></td></tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void core::ObjectData::Print </td>
+          <td class="memname">ObjectDataPtr core::ObjectData::Interpolate </td>
           <td>(</td>
-          <td class="paramtype">std::ostream &amp;&#160;</td>
-          <td class="paramname"><em>os</em></td><td>)</td>
-          <td> const</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>fraction</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Used in the &lt;&lt; operator </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
+    <tr><td class="paramname">obj</td><td>A pointer to the target object </td></tr>
+    <tr><td class="paramname">fraction</td><td>Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. </td></tr>
   </table>
   </dd>
 </dl>
+<dl class="section return"><dt>Returns</dt><dd>The interpolated object </dd></dl>
 
-<p>Reimplemented in <a class="el" href="classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a">core::ObjectDataMap</a>.</p>
+<p>Reimplemented in <a class="el" href="classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e">core::ObjectDataMap</a>, <a class="el" href="classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188">core::Tracklet</a>, <a class="el" href="classcore_1_1ObjectData3D.html#ae57a5d8f7a02a403653c82c3b73a73d2">core::ObjectData3D</a>, and <a class="el" href="classcore_1_1ObjectDataAngular.html#a42962dd1f994b2577133450e755d586e">core::ObjectDataAngular</a>.</p>
 
 </div>
 </div>
-<h2 class="groupheader">Friends And Related Function Documentation</h2>
-<a class="anchor" id="a56fc9b6184428bf4d80826bbb9fe4c6f"></a>
+<a class="anchor" id="a2880d710cfa520e9c0453e2a6729c0e2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool core::ObjectData::IsVirtual </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Is this node considered a virtual node </p><dl class="section return"><dt>Returns</dt><dd>True, if this node is virtual </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a737216c2689aefa216c1c842922d7dd8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void core::ObjectData::SetDetectionScore </td>
+          <td>(</td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>score</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sets the detection score </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">score</td><td>The detection score </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aedfe00fa37d5ac7ef554bda746931148"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void core::ObjectData::SetFrameIndex </td>
+          <td>(</td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>index</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sets the frame index </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">index</td><td>The new frame index </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aae2c4fceddc529570dbe8909309f9961"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -286,42 +357,43 @@ Friends</h2></td></tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">std::ostream&amp; operator&lt;&lt; </td>
+          <td class="memname">void core::ObjectData::Visualize </td>
           <td>(</td>
-          <td class="paramtype">std::ostream &amp;&#160;</td>
-          <td class="paramname"><em>os</em>, </td>
+          <td class="paramtype">cv::Mat &amp;&#160;</td>
+          <td class="paramname"><em>image</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const <a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> &amp;&#160;</td>
-          <td class="paramname"><em>obj</em>&#160;</td>
+          <td class="paramtype">cv::Scalar &amp;&#160;</td>
+          <td class="paramname"><em>color</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td>
+          <td></td><td> const</td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
+<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Overrides the &lt;&lt; operator for easy output. Calls the print method. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
-    <tr><td class="paramname">obj</td><td>The object to write into the stream </td></tr>
+    <tr><td class="paramname">image</td><td>The image to write into </td></tr>
+    <tr><td class="paramname">color</td><td>The color to use </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The stream written to </dd></dl>
+
+<p>Reimplemented in <a class="el" href="classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac">core::ObjectDataMap</a>, <a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">core::Tracklet</a>, <a class="el" href="classcore_1_1ObjectData3D.html#a86216fae3dc86f1107eb1b4530b574d2">core::ObjectData3D</a>, and <a class="el" href="classcore_1_1ObjectDataAngular.html#acb4265f6de511238460df118148bc85c">core::ObjectDataAngular</a>.</p>
 
 </div>
 </div>
-<h2 class="groupheader">Member Data Documentation</h2>
-<a class="anchor" id="ade1423dbad9323431d22750121fa59e5"></a>
+<h2 class="groupheader">Friends And Related Function Documentation</h2>
+<a class="anchor" id="a56fc9b6184428bf4d80826bbb9fe4c6f"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -329,16 +401,37 @@ Friends</h2></td></tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">std::size_t core::ObjectData::frame_index_</td>
+          <td class="memname">std::ostream&amp; operator&lt;&lt; </td>
+          <td>(</td>
+          <td class="paramtype">std::ostream &amp;&#160;</td>
+          <td class="paramname"><em>os</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> &amp;&#160;</td>
+          <td class="paramname"><em>obj</em>&#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">protected</span></span>  </td>
+<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>The frame the object was detected in </p>
+<p>Overrides the &lt;&lt; operator for custom output. Calls the print method. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
+    <tr><td class="paramname">obj</td><td>The object to write into the stream </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The stream written to </dd></dl>
 
 </div>
 </div>

BIN
Documentation/html/classcore_1_1ObjectData.png


+ 11 - 9
Documentation/html/classcore_1_1ObjectDataMap-members.html

@@ -94,12 +94,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947">CompareTo</a>(ObjectData *obj)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a38ec46bab19a5770cecb00533e8d37c3">CompareTo</a>(ObjectDataMap *obj)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7">GetValue</a>(std::string key)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05">GetWeight</a>(std::string key)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74">CompareTo</a>(ObjectDataPtr obj) const override</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7">GetValue</a>(std::string key)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05">GetWeight</a>(std::string key)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e">Interpolate</a>(ObjectDataPtr obj, double fraction) const override</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b">ObjectData</a>(std::size_t frame_index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
@@ -107,9 +107,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a573add8d73646e6c5f183a9a0c159596">ObjectDataMap</a>(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; double &gt; value_list)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a5727c237d73f3f16c94a748c1b9b0c74">ObjectDataMap</a>(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)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6">ObjectDataMap</a>(size_t frame_index, std::vector&lt; std::string &gt; keys, std::vector&lt; std::pair&lt; double, double &gt;&gt; value_weight_list)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a">Print</a>(std::ostream &amp;os) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591">PutValueWeight</a>(std::string key, double value, double weight)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a8c2ef0cebadf12e4aa67056823020cc3">PutValueWeight</a>(std::string key, std::pair&lt; double, double &gt; value_weight)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">Put</a>(std::string key, double value, double weight)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1">Put</a>(std::string key, std::pair&lt; double, double &gt; value_weight)</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a>(double score)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a>(size_t index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac">Visualize</a>(cv::Mat &amp;image, cv::Scalar &amp;color) const override</td><td class="entry"><a class="el" href="classcore_1_1ObjectDataMap.html">core::ObjectDataMap</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 91 - 71
Documentation/html/classcore_1_1ObjectDataMap.html

@@ -89,7 +89,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
 <a href="classcore_1_1ObjectDataMap-members.html">List of all members</a>  </div>
   <div class="headertitle">
 <div class="title">core::ObjectDataMap Class Reference</div>  </div>
@@ -121,14 +120,16 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:a276c89da6f3318d2baa2e9678e9508f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a4cd92ab91559063b4e6ab12fec53cc05"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05">GetWeight</a> (std::string key)</td></tr>
 <tr class="separator:a4cd92ab91559063b4e6ab12fec53cc05"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61eb1326be41c3411dc0c1757f360591"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591">PutValueWeight</a> (std::string key, double value, double weight)</td></tr>
-<tr class="separator:a61eb1326be41c3411dc0c1757f360591"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8c2ef0cebadf12e4aa67056823020cc3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a8c2ef0cebadf12e4aa67056823020cc3">PutValueWeight</a> (std::string key, std::pair&lt; double, double &gt; value_weight)</td></tr>
-<tr class="separator:a8c2ef0cebadf12e4aa67056823020cc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad00d1998652e4d2ffa2629128c9c2947"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947">CompareTo</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *obj)</td></tr>
-<tr class="separator:ad00d1998652e4d2ffa2629128c9c2947"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a38ec46bab19a5770cecb00533e8d37c3"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a38ec46bab19a5770cecb00533e8d37c3">CompareTo</a> (<a class="el" href="classcore_1_1ObjectDataMap.html">ObjectDataMap</a> *obj)</td></tr>
-<tr class="separator:a38ec46bab19a5770cecb00533e8d37c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d104f34385edf8c3fdfda7390c28bf5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">Put</a> (std::string key, double value, double weight)</td></tr>
+<tr class="separator:a2d104f34385edf8c3fdfda7390c28bf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cdd71b9124b5ca41419a0049fbbdaa1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a5cdd71b9124b5ca41419a0049fbbdaa1">Put</a> (std::string key, std::pair&lt; double, double &gt; value_weight)</td></tr>
+<tr class="separator:a5cdd71b9124b5ca41419a0049fbbdaa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fcc9ef5b684f14d33711348610d9b74"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74">CompareTo</a> (ObjectDataPtr obj) const override</td></tr>
+<tr class="separator:a7fcc9ef5b684f14d33711348610d9b74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6a739ea0509371929dbe7cbac601a3e"><td class="memItemLeft" align="right" valign="top">virtual ObjectDataPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e">Interpolate</a> (ObjectDataPtr obj, double fraction) const override</td></tr>
+<tr class="separator:ac6a739ea0509371929dbe7cbac601a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a0f71318dd58e0d527a63b904c6afac"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac">Visualize</a> (cv::Mat &amp;image, cv::Scalar &amp;color) const override</td></tr>
+<tr class="separator:a8a0f71318dd58e0d527a63b904c6afac"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classcore_1_1ObjectData"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcore_1_1ObjectData')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td></tr>
 <tr class="memitem:a7f47a396a3b9e8c12a1557c8156b8ff9 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a> ()</td></tr>
 <tr class="separator:a7f47a396a3b9e8c12a1557c8156b8ff9 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -136,19 +137,14 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:af4333a52b012841a6ba73b25aeaae71b inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1151e9215baf315f4b98f696f4271162 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a> () const</td></tr>
 <tr class="separator:a1151e9215baf315f4b98f696f4271162 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedfe00fa37d5ac7ef554bda746931148 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a> (size_t index)</td></tr>
+<tr class="separator:aedfe00fa37d5ac7ef554bda746931148 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a737216c2689aefa216c1c842922d7dd8 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a> (double score)</td></tr>
+<tr class="separator:a737216c2689aefa216c1c842922d7dd8 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9208bfeee72238e2d635dfab368c09a inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a> ()</td></tr>
+<tr class="separator:ae9208bfeee72238e2d635dfab368c09a inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a2880d710cfa520e9c0453e2a6729c0e2 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a> () const</td></tr>
 <tr class="separator:a2880d710cfa520e9c0453e2a6729c0e2 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a16fbcc2b99feb1545e1a66f828680b1a"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a">Print</a> (std::ostream &amp;os) const</td></tr>
-<tr class="separator:a16fbcc2b99feb1545e1a66f828680b1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_attribs_classcore_1_1ObjectData"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcore_1_1ObjectData')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td></tr>
-<tr class="memitem:ade1423dbad9323431d22750121fa59e5 inherit pro_attribs_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td></tr>
-<tr class="separator:ade1423dbad9323431d22750121fa59e5 inherit pro_attribs_classcore_1_1ObjectData"><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>Stores a map of key-value-weight pairs. The weight is used to compare this object with other objects. </p>
@@ -303,7 +299,7 @@ Additional Inherited Members</h2></td></tr>
 </div>
 </div>
 <h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ad00d1998652e4d2ffa2629128c9c2947"></a>
+<a class="anchor" id="a7fcc9ef5b684f14d33711348610d9b74"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -313,57 +309,26 @@ Additional Inherited Members</h2></td></tr>
         <tr>
           <td class="memname">double core::ObjectDataMap::CompareTo </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *&#160;</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
           <td class="paramname"><em>obj</em></td><td>)</td>
-          <td></td>
+          <td> const</td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compares this object with the given object by calculating the difference in every value and applies the corresponding weight to that difference. Than all weighted differences are summed up. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Compares this object with the given object. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">obj</td><td>A pointer to the object to compare this object to </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The summed up weighted differences </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A double value indicating the comparison result </dd></dl>
 
-<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">core::ObjectData</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a38ec46bab19a5770cecb00533e8d37c3"></a>
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">double core::ObjectDataMap::CompareTo </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectDataMap.html">ObjectDataMap</a> *&#160;</td>
-          <td class="paramname"><em>obj</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-<p>Compares this object with the given object by calculating the difference in every value and applies the corresponding weight to that difference. Than all weighted differences are summed up. </p><dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">obj</td><td>A pointer to the object to compare this object to </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The summed up weighted differences </dd></dl>
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">core::ObjectData</a>.</p>
 
 </div>
 </div>
@@ -413,7 +378,7 @@ Additional Inherited Members</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a16fbcc2b99feb1545e1a66f828680b1a"></a>
+<a class="anchor" id="ac6a739ea0509371929dbe7cbac601a3e"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -421,36 +386,48 @@ Additional Inherited Members</h2></td></tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void core::ObjectDataMap::Print </td>
+          <td class="memname">ObjectDataPtr core::ObjectDataMap::Interpolate </td>
           <td>(</td>
-          <td class="paramtype">std::ostream &amp;&#160;</td>
-          <td class="paramname"><em>os</em></td><td>)</td>
-          <td> const</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>fraction</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Used in the &lt;&lt; operator </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">os</td><td>The stream to write to </td></tr>
+    <tr><td class="paramname">obj</td><td>A pointer to the target object </td></tr>
+    <tr><td class="paramname">fraction</td><td>Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. </td></tr>
   </table>
   </dd>
 </dl>
+<dl class="section return"><dt>Returns</dt><dd>The interpolated object </dd></dl>
 
-<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">core::ObjectData</a>.</p>
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">core::ObjectData</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="a61eb1326be41c3411dc0c1757f360591"></a>
+<a class="anchor" id="a2d104f34385edf8c3fdfda7390c28bf5"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void core::ObjectDataMap::PutValueWeight </td>
+          <td class="memname">void core::ObjectDataMap::Put </td>
           <td>(</td>
           <td class="paramtype">std::string&#160;</td>
           <td class="paramname"><em>key</em>, </td>
@@ -485,12 +462,12 @@ Additional Inherited Members</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a8c2ef0cebadf12e4aa67056823020cc3"></a>
+<a class="anchor" id="a5cdd71b9124b5ca41419a0049fbbdaa1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void core::ObjectDataMap::PutValueWeight </td>
+          <td class="memname">void core::ObjectDataMap::Put </td>
           <td>(</td>
           <td class="paramtype">std::string&#160;</td>
           <td class="paramname"><em>key</em>, </td>
@@ -516,6 +493,49 @@ Additional Inherited Members</h2></td></tr>
   </dd>
 </dl>
 
+</div>
+</div>
+<a class="anchor" id="a8a0f71318dd58e0d527a63b904c6afac"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void core::ObjectDataMap::Visualize </td>
+          <td>(</td>
+          <td class="paramtype">cv::Mat &amp;&#160;</td>
+          <td class="paramname"><em>image</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">cv::Scalar &amp;&#160;</td>
+          <td class="paramname"><em>color</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">image</td><td>The image to write into </td></tr>
+    <tr><td class="paramname">color</td><td>The color to use </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">core::ObjectData</a>.</p>
+
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following files:<ul>

+ 17 - 12
Documentation/html/classcore_1_1Tracklet-members.html

@@ -94,20 +94,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf">AddPathObjectFirst</a>(ObjectData obj)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5">AddPathObjectLast</a>(ObjectData obj)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89">CompareTo</a>(ObjectData *obj)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e">GetFirstFrameIndex</a>()</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8">AddPathObject</a>(ObjectDataPtr obj, bool overwrite=false)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">CompareTo</a>(ObjectDataPtr obj) const override</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0">Flatten</a>()</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691">GetFirstFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731">GetLastFrameIndex</a>()</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c">GetPathObject</a>(size_t i)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b">ObjectData</a>(std::size_t frame_index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">Print</a>(std::ostream &amp;os) const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96">GetLastFrameIndex</a>() const</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81">GetPathObject</a>(size_t i)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8">GetPathObjectCount</a>() const</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188">Interpolate</a>(ObjectDataPtr obj, double fraction) const override</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce">InterpolateMissingFrames</a>()</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a>() const</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a>()</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#af4333a52b012841a6ba73b25aeaae71b">ObjectData</a>(std::size_t frame_index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a>(double score)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a>(size_t index)</td><td class="entry"><a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7">Tracklet</a>()</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a5a91e01f9cd8404915dce73a0d659064">Tracklet</a>(ObjectData first_object)</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">Visualize</a>(cv::Mat &amp;image, cv::Scalar &amp;color) const override</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classcore_1_1Tracklet.html#a3a2b241939559e47aef701d2e2c4d4bd">Visualize</a>(cv::Mat &amp;image, cv::Scalar &amp;color, size_t frame, size_t predecessor_count, size_t successor_count) const</td><td class="entry"><a class="el" href="classcore_1_1Tracklet.html">core::Tracklet</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 228 - 68
Documentation/html/classcore_1_1Tracklet.html

@@ -110,20 +110,28 @@ Inheritance diagram for core::Tracklet:</div>
 Public Member Functions</h2></td></tr>
 <tr class="memitem:aedf59b5a9a068a28bb7570f2a031d4e7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7">Tracklet</a> ()</td></tr>
 <tr class="separator:aedf59b5a9a068a28bb7570f2a031d4e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a91e01f9cd8404915dce73a0d659064"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a5a91e01f9cd8404915dce73a0d659064">Tracklet</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> first_object)</td></tr>
-<tr class="separator:a5a91e01f9cd8404915dce73a0d659064"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac7f660efeed15a8925482d8d63073bcf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf">AddPathObjectFirst</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> obj)</td></tr>
-<tr class="separator:ac7f660efeed15a8925482d8d63073bcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad9f018cb26a5fcb1ab00c8f336f24de5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5">AddPathObjectLast</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> obj)</td></tr>
-<tr class="separator:ad9f018cb26a5fcb1ab00c8f336f24de5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae544127ff912eefeb3698e94da27f91e"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e">GetFirstFrameIndex</a> ()</td></tr>
-<tr class="separator:ae544127ff912eefeb3698e94da27f91e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abbfc0ac1abd459962142ee96def46731"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731">GetLastFrameIndex</a> ()</td></tr>
-<tr class="separator:abbfc0ac1abd459962142ee96def46731"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a95387d8a86e5b81b5cc1ff479c96494c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c">GetPathObject</a> (size_t i)</td></tr>
-<tr class="separator:a95387d8a86e5b81b5cc1ff479c96494c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab45f28ba6abde0944820ac614560ea89"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89">CompareTo</a> (<a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *obj)</td></tr>
-<tr class="separator:ab45f28ba6abde0944820ac614560ea89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0b397f2d0685a927de886dbd36c3bc8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8">AddPathObject</a> (ObjectDataPtr obj, bool overwrite=false)</td></tr>
+<tr class="separator:ab0b397f2d0685a927de886dbd36c3bc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b963319d6c65614baec02a925f31691"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691">GetFirstFrameIndex</a> () const</td></tr>
+<tr class="separator:a1b963319d6c65614baec02a925f31691"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8e195b523cf2021394455cc21867d96"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96">GetLastFrameIndex</a> () const</td></tr>
+<tr class="separator:ad8e195b523cf2021394455cc21867d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9758349e8f25c479ffc4b21a90149a81"><td class="memItemLeft" align="right" valign="top">ObjectDataPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81">GetPathObject</a> (size_t i)</td></tr>
+<tr class="separator:a9758349e8f25c479ffc4b21a90149a81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee4298a7b734b2b7533d4536006a8aa8"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8">GetPathObjectCount</a> () const</td></tr>
+<tr class="separator:aee4298a7b734b2b7533d4536006a8aa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10b56b608b24ef547550540e5a755bce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce">InterpolateMissingFrames</a> ()</td></tr>
+<tr class="separator:a10b56b608b24ef547550540e5a755bce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0357f2fa173941800571432dcbc96dc2"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">CompareTo</a> (ObjectDataPtr obj) const override</td></tr>
+<tr class="separator:a0357f2fa173941800571432dcbc96dc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fb5e6ab9df668c3477e8b52f115b188"><td class="memItemLeft" align="right" valign="top">virtual ObjectDataPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188">Interpolate</a> (ObjectDataPtr obj, double fraction) const override</td></tr>
+<tr class="separator:a5fb5e6ab9df668c3477e8b52f115b188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85f92a4059bf89f24a83f28935675181"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">Visualize</a> (cv::Mat &amp;image, cv::Scalar &amp;color) const override</td></tr>
+<tr class="separator:a85f92a4059bf89f24a83f28935675181"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a2b241939559e47aef701d2e2c4d4bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a3a2b241939559e47aef701d2e2c4d4bd">Visualize</a> (cv::Mat &amp;image, cv::Scalar &amp;color, size_t frame, size_t predecessor_count, size_t successor_count) const</td></tr>
+<tr class="separator:a3a2b241939559e47aef701d2e2c4d4bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2bdb2f2c8249145808e7029dde6e7df0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0">Flatten</a> ()</td></tr>
+<tr class="separator:a2bdb2f2c8249145808e7029dde6e7df0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classcore_1_1ObjectData"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcore_1_1ObjectData')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td></tr>
 <tr class="memitem:a7f47a396a3b9e8c12a1557c8156b8ff9 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">ObjectData</a> ()</td></tr>
 <tr class="separator:a7f47a396a3b9e8c12a1557c8156b8ff9 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -131,20 +139,17 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:af4333a52b012841a6ba73b25aeaae71b inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1151e9215baf315f4b98f696f4271162 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">GetFrameIndex</a> () const</td></tr>
 <tr class="separator:a1151e9215baf315f4b98f696f4271162 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedfe00fa37d5ac7ef554bda746931148 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">SetFrameIndex</a> (size_t index)</td></tr>
+<tr class="separator:aedfe00fa37d5ac7ef554bda746931148 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a737216c2689aefa216c1c842922d7dd8 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">SetDetectionScore</a> (double score)</td></tr>
+<tr class="separator:a737216c2689aefa216c1c842922d7dd8 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9208bfeee72238e2d635dfab368c09a inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">GetDetectionScore</a> ()</td></tr>
+<tr class="separator:ae9208bfeee72238e2d635dfab368c09a inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a2880d710cfa520e9c0453e2a6729c0e2 inherit pub_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">IsVirtual</a> () const</td></tr>
 <tr class="separator:a2880d710cfa520e9c0453e2a6729c0e2 inherit pub_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pro_methods_classcore_1_1ObjectData"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcore_1_1ObjectData')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td></tr>
-<tr class="memitem:aa26949b0456068d67802d9f6067aa657 inherit pro_methods_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">Print</a> (std::ostream &amp;os) const</td></tr>
-<tr class="separator:aa26949b0456068d67802d9f6067aa657 inherit pro_methods_classcore_1_1ObjectData"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="inherit_header pro_attribs_classcore_1_1ObjectData"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcore_1_1ObjectData')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcore_1_1ObjectData.html">core::ObjectData</a></td></tr>
-<tr class="memitem:ade1423dbad9323431d22750121fa59e5 inherit pro_attribs_classcore_1_1ObjectData"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">frame_index_</a></td></tr>
-<tr class="separator:ade1423dbad9323431d22750121fa59e5 inherit pro_attribs_classcore_1_1ObjectData"><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>A class for storing multiple object data objects. The object data objects are handled as a path. </p>
+<div class="textblock"><p>A class for storing multiple object data objects. The object data objects are handled as a path. All objects are stored sorted ascending by their frame index. </p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
 <a class="anchor" id="aedf59b5a9a068a28bb7570f2a031d4e7"></a>
 <div class="memitem">
@@ -162,75 +167,155 @@ Additional Inherited Members</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="a5a91e01f9cd8404915dce73a0d659064"></a>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="ab0b397f2d0685a927de886dbd36c3bc8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">core::Tracklet::Tracklet </td>
+          <td class="memname">void core::Tracklet::AddPathObject </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td>
-          <td class="paramname"><em>first_object</em></td><td>)</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>overwrite</em> = <code>false</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Creates a tracklet with the given initial object. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> </dd></dl>
-<dl class="params"><dt>Parameters</dt><dd>
+<p>Adds the path object sorted into the tracklet. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">first_object</td><td>The first object to store in the path </td></tr>
+    <tr><td class="paramname">obj</td><td>The path object to add </td></tr>
+    <tr><td class="paramname">overwrite</td><td>If true and an object in the same frame as the given object already exists, the old one will be replaced by the new one </td></tr>
   </table>
   </dd>
 </dl>
 
 </div>
 </div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="ac7f660efeed15a8925482d8d63073bcf"></a>
+<a class="anchor" id="a0357f2fa173941800571432dcbc96dc2"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">void core::Tracklet::AddPathObjectFirst </td>
+          <td class="memname">double core::Tracklet::CompareTo </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
           <td class="paramname"><em>obj</em></td><td>)</td>
-          <td></td>
+          <td> const</td>
         </tr>
       </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
 </div><div class="memdoc">
-<p>Adds the object in the first place of the path. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Compares this object with the given object. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">obj</td><td>The object to add </td></tr>
+    <tr><td class="paramname">obj</td><td>A pointer to the object to compare this object to </td></tr>
   </table>
   </dd>
 </dl>
+<dl class="section return"><dt>Returns</dt><dd>A double value indicating the comparison result </dd></dl>
+
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">core::ObjectData</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ad9f018cb26a5fcb1ab00c8f336f24de5"></a>
+<a class="anchor" id="a2bdb2f2c8249145808e7029dde6e7df0"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void core::Tracklet::AddPathObjectLast </td>
+          <td class="memname">void core::Tracklet::Flatten </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a>&#160;</td>
-          <td class="paramname"><em>obj</em></td><td>)</td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Adds the object in the last place of the path. </p><dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">obj</td><td>The object to add </td></tr>
-  </table>
-  </dd>
-</dl>
+<p>Flattens the current tracklet one level. That means, that if this tracklet contains other tracklets as path objects, their path objects are all extracted and used as the new path objects of this tracklet. The old tracklet path objects are removed. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1b963319d6c65614baec02a925f31691"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t core::Tracklet::GetFirstFrameIndex </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Gets the lowest frame index of all path objects. </p><dl class="section return"><dt>Returns</dt><dd>The lowest frame index </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad8e195b523cf2021394455cc21867d96"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t core::Tracklet::GetLastFrameIndex </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Gets the highest frame index of all path objects. </p><dl class="section return"><dt>Returns</dt><dd>The highest frame index </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9758349e8f25c479ffc4b21a90149a81"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ObjectDataPtr core::Tracklet::GetPathObject </td>
+          <td>(</td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>i</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Gets the path object at the given index. The index is NOT the frame index </p><dl class="section return"><dt>Returns</dt><dd>A pointer to the path object </dd></dl>
 
 </div>
 </div>
-<a class="anchor" id="ab45f28ba6abde0944820ac614560ea89"></a>
+<a class="anchor" id="aee4298a7b734b2b7533d4536006a8aa8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t core::Tracklet::GetPathObjectCount </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Gets the count of all path objects. </p><dl class="section return"><dt>Returns</dt><dd>The path object count </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5fb5e6ab9df668c3477e8b52f115b188"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -238,77 +323,152 @@ Additional Inherited Members</h2></td></tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">double core::Tracklet::CompareTo </td>
+          <td class="memname">ObjectDataPtr core::Tracklet::Interpolate </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> *&#160;</td>
-          <td class="paramname"><em>obj</em></td><td>)</td>
+          <td class="paramtype">ObjectDataPtr&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>fraction</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compares this object with the given object. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">obj</td><td>A pointer to the object to compare this object to </td></tr>
+    <tr><td class="paramname">obj</td><td>A pointer to the target object </td></tr>
+    <tr><td class="paramname">fraction</td><td>Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>A double value indicating the comparison result </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The interpolated object </dd></dl>
 
-<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">core::ObjectData</a>.</p>
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">core::ObjectData</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ae544127ff912eefeb3698e94da27f91e"></a>
+<a class="anchor" id="a10b56b608b24ef547550540e5a755bce"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">size_t core::Tracklet::GetFirstFrameIndex </td>
+          <td class="memname">void core::Tracklet::InterpolateMissingFrames </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Gets the lowest frame index of all path objects. </p><dl class="section return"><dt>Returns</dt><dd>The lowest frame index </dd></dl>
+<p>Interpolates between the current path objects until every missing frame has an object. Only frames between the first frame index and the last frame index are interpolated. </p>
 
 </div>
 </div>
-<a class="anchor" id="abbfc0ac1abd459962142ee96def46731"></a>
+<a class="anchor" id="a85f92a4059bf89f24a83f28935675181"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">size_t core::Tracklet::GetLastFrameIndex </td>
+          <td class="memname">void core::Tracklet::Visualize </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramtype">cv::Mat &amp;&#160;</td>
+          <td class="paramname"><em>image</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">cv::Scalar &amp;&#160;</td>
+          <td class="paramname"><em>color</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
         </tr>
       </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
 </div><div class="memdoc">
-<p>Gets the highest frame index of all path objects. </p><dl class="section return"><dt>Returns</dt><dd>The highest frame index </dd></dl>
+<p>Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">image</td><td>The image to write into </td></tr>
+    <tr><td class="paramname">color</td><td>The color to use </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Reimplemented from <a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">core::ObjectData</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="a95387d8a86e5b81b5cc1ff479c96494c"></a>
+<a class="anchor" id="a3a2b241939559e47aef701d2e2c4d4bd"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="classcore_1_1ObjectData.html">ObjectData</a> core::Tracklet::GetPathObject </td>
+          <td class="memname">void core::Tracklet::Visualize </td>
           <td>(</td>
+          <td class="paramtype">cv::Mat &amp;&#160;</td>
+          <td class="paramname"><em>image</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">cv::Scalar &amp;&#160;</td>
+          <td class="paramname"><em>color</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
           <td class="paramtype">size_t&#160;</td>
-          <td class="paramname"><em>i</em></td><td>)</td>
+          <td class="paramname"><em>frame</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>predecessor_count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>successor_count</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Gets the path object at the given index. </p>
+<p>Visualizes the tracklet by visualizing the path object in the given frame and the number of path objects in the given range before and after the given frame. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">image</td><td>The image to write into </td></tr>
+    <tr><td class="paramname">color</td><td>The color to use </td></tr>
+    <tr><td class="paramname">frame</td><td>The frame index to visualize the path objects from </td></tr>
+    <tr><td class="paramname">predecessor_count</td><td>The number of path objects to visualize before the given frame </td></tr>
+    <tr><td class="paramname">successor_count</td><td>The number of path objects to visualize after the given frame </td></tr>
+  </table>
+  </dd>
+</dl>
 
 </div>
 </div>

+ 13 - 10
Documentation/html/classes.html

@@ -87,22 +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_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_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_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 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="classcore_1_1DetectionSequence.html">DetectionSequence</a> (core)&#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>
+</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 valign="top"><a class="el" href="classcore_1_1ObjectDataMap.html">ObjectDataMap</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 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></td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classutil_1_1FileIO.html">FileIO</a> (util)&#160;&#160;&#160;</td><td></td><td valign="top"><a class="el" href="classcore_1_1Tracklet.html">Tracklet</a> (core)&#160;&#160;&#160;</td><td></td></tr>
-<tr><td></td><td></td><td></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>
+<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_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_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>

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

@@ -94,8 +94,8 @@ 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#aa92b94ba7a5e0fea0e8c2f801c8d14b8">ReadCSV</a>(const std::string &amp;filename, const char &amp;delimiter, core::Vector3d &amp;values)</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#ab33278a4ae57c8c5a56b6d80cbc27184">ReadCSV</a>(const std::string &amp;filename, const char &amp;delimiter, core::Vector2d &amp;values)</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#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>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 20 - 20
Documentation/html/classutil_1_1FileIO.html

@@ -99,15 +99,15 @@ 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:aa92b94ba7a5e0fea0e8c2f801c8d14b8"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#aa92b94ba7a5e0fea0e8c2f801c8d14b8">ReadCSV</a> (const std::string &amp;filename, const char &amp;delimiter, core::Vector3d &amp;values)</td></tr>
-<tr class="separator:aa92b94ba7a5e0fea0e8c2f801c8d14b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab33278a4ae57c8c5a56b6d80cbc27184"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1FileIO.html#ab33278a4ae57c8c5a56b6d80cbc27184">ReadCSV</a> (const std::string &amp;filename, const char &amp;delimiter, core::Vector2d &amp;values)</td></tr>
-<tr class="separator:ab33278a4ae57c8c5a56b6d80cbc27184"><td class="memSeparator" colspan="2">&#160;</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>
 </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="aa92b94ba7a5e0fea0e8c2f801c8d14b8"></a>
+<a class="anchor" id="acfce3977f435f2b024984da05408dfb4"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -117,20 +117,20 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::FileIO::ReadCSV </td>
           <td>(</td>
-          <td class="paramtype">const std::string &amp;&#160;</td>
-          <td class="paramname"><em>filename</em>, </td>
+          <td class="paramtype">core::Vector3d &amp;&#160;</td>
+          <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char &amp;&#160;</td>
-          <td class="paramname"><em>delimiter</em>, </td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>filename</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">core::Vector3d &amp;&#160;</td>
-          <td class="paramname"><em>values</em>&#160;</td>
+          <td class="paramtype">const char &amp;&#160;</td>
+          <td class="paramname"><em>delimiter</em> = <code>';'</code>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -146,16 +146,16 @@ Static Public Member Functions</h2></td></tr>
 </div><div class="memdoc">
 <p>Reads a CSV 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. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
+    <tr><td class="paramname">values</td><td>The 3D array of values to store the read values in </td></tr>
     <tr><td class="paramname">filename</td><td>The filename to read from </td></tr>
     <tr><td class="paramname">delimiter</td><td>The delimiter used to separate the values in the file </td></tr>
-    <tr><td class="paramname">values</td><td>The 3D array of values to store the read values in </td></tr>
   </table>
   </dd>
 </dl>
 
 </div>
 </div>
-<a class="anchor" id="ab33278a4ae57c8c5a56b6d80cbc27184"></a>
+<a class="anchor" id="a5d145cb872989165f76d00c343170bc5"></a>
 <div class="memitem">
 <div class="memproto">
 <table class="mlabels">
@@ -165,20 +165,20 @@ Static Public Member Functions</h2></td></tr>
         <tr>
           <td class="memname">void util::FileIO::ReadCSV </td>
           <td>(</td>
-          <td class="paramtype">const std::string &amp;&#160;</td>
-          <td class="paramname"><em>filename</em>, </td>
+          <td class="paramtype">core::Vector2d &amp;&#160;</td>
+          <td class="paramname"><em>values</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char &amp;&#160;</td>
-          <td class="paramname"><em>delimiter</em>, </td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>filename</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">core::Vector2d &amp;&#160;</td>
-          <td class="paramname"><em>values</em>&#160;</td>
+          <td class="paramtype">const char &amp;&#160;</td>
+          <td class="paramname"><em>delimiter</em> = <code>';'</code>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -194,9 +194,9 @@ Static Public Member Functions</h2></td></tr>
 </div><div class="memdoc">
 <p>Reads a CSV file and stores the values in a 2D array. The first dimension is the row and the second the value in that row. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
+    <tr><td class="paramname">values</td><td>The 2D array of values to store the read values in </td></tr>
     <tr><td class="paramname">filename</td><td>The filename to read from </td></tr>
     <tr><td class="paramname">delimiter</td><td>The delimiter used to separate the values in the file </td></tr>
-    <tr><td class="paramname">values</td><td>The 2D array of values to store the read values in </td></tr>
   </table>
   </dd>
 </dl>

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

@@ -94,7 +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#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#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>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 151 - 4
Documentation/html/classutil_1_1Parser.html

@@ -101,10 +101,160 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 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>
 </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>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void util::Parser::ParseObjectData3D </td>
+          <td>(</td>
+          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramname"><em>values</em>, </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="paramname"><em>sequence</em>&#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>Parses the values into a DetectionSequence of ObjectData3D </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">values</td><td>A 3D vector of values </td></tr>
+    <tr><td class="paramname">sequence</td><td>The sequence to store the created objects in </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a314cfd3ebd16ab18cd132e7d8dd4c04a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void util::Parser::ParseObjectDataAngular </td>
+          <td>(</td>
+          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramname"><em>values</em>, </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="paramname"><em>sequence</em>&#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>Parses the values into a DetectionSequence of ObjectDataAngular objects. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">values</td><td>A 3D vector of values </td></tr>
+    <tr><td class="paramname">sequence</td><td>The sequence to store the created objects in </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a5a4c53339551dbf67bd351fd0fe2c087"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void util::Parser::ParseObjectDataAngular </td>
+          <td>(</td>
+          <td class="paramtype">const core::Vector3d &amp;&#160;</td>
+          <td class="paramname"><em>values</em>, </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="paramname"><em>sequence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>temporal_weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>spatial_weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double&#160;</td>
+          <td class="paramname"><em>angular_weight</em>&#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>Parses the values into a DetectionSequence of ObjectDataAngular objects. The keys are used for the third dimension in the values list. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">values</td><td>A 3D vector of values </td></tr>
+    <tr><td class="paramname">sequence</td><td>The sequence to store the created objects in </td></tr>
+    <tr><td class="paramname">temporal_weight</td><td>The temporal weight </td></tr>
+    <tr><td class="paramname">spatial_weight</td><td>The spatial weight </td></tr>
+    <tr><td class="paramname">angular_weight</td><td>The angular weight </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
 <a class="anchor" id="ac2095e8699706079dde135098f30de0a"></a>
 <div class="memitem">
 <div class="memproto">
@@ -142,10 +292,7 @@ Static Public Member Functions</h2></td></tr>
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Parses the keys and values into a DetectionSequence of ObjectDataMap objects. The keys are used for the third dimension in the values list. </p><dl class="section see"><dt>See also</dt><dd>DetectionSequence </dd>
-<dd>
-ObjectDataMap </dd></dl>
-<dl class="params"><dt>Parameters</dt><dd>
+<p>Parses the keys and values into a DetectionSequence of ObjectDataMap objects. The keys are used for the third dimension in the values list. </p><dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">keys</td><td>A 1D vector of keys </td></tr>
     <tr><td class="paramname">values</td><td>A 3D vector of values </td></tr>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Documentation/html/core_2Definitions_8h_source.html


+ 7 - 3
Documentation/html/files.html

@@ -93,11 +93,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <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="ObjectDataMap_8h_source.html"><span class="icondoc"></span></a><b>ObjectDataMap.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="Tracklet_8h_source.html"><span class="icondoc"></span></a><b>Tracklet.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="Parser_8h_source.html"><span class="icondoc"></span></a><b>Parser.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>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 145 - 30
Documentation/html/functions.html

@@ -71,7 +71,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
     <ul class="tablist">
       <li class="current"><a href="functions.html"><span>All</span></a></li>
       <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
       <li><a href="functions_rela.html"><span>Related&#160;Functions</span></a></li>
     </ul>
   </div>
@@ -84,10 +83,13 @@ 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_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 class="current"><a href="#index_t"><span>t</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>
     </ul>
   </div>
 </div><!-- top -->
@@ -110,59 +112,73 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>AddObject()
-: <a class="el" href="classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72">core::DetectionSequence</a>
 </li>
-<li>AddPathObjectFirst()
-: <a class="el" href="classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf">core::Tracklet</a>
-</li>
-<li>AddPathObjectLast()
-: <a class="el" href="classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5">core::Tracklet</a>
+<li>AddPathObject()
+: <a class="el" href="classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8">core::Tracklet</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>Clamp()
+: <a class="el" href="classutil_1_1MyMath.html#a367a261dc52a85cc97ba376799ed13a3">util::MyMath</a>
+</li>
 <li>Clear()
 : <a class="el" href="classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892">core::DetectionSequence</a>
 </li>
 <li>CompareTo()
-: <a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">core::ObjectData</a>
-, <a class="el" href="classcore_1_1ObjectDataMap.html#a38ec46bab19a5770cecb00533e8d37c3">core::ObjectDataMap</a>
-, <a class="el" href="classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89">core::Tracklet</a>
+: <a class="el" href="classcore_1_1ObjectData3D.html#abef3e4e7a0dc121d8a403d91964be576">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#a2932240c6c082b76f2c04723cdf3e4f9">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">core::Tracklet</a>
 </li>
 <li>CreateObjectGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#add2da8463ae067ace43ab1201725157e">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">algo::TwoStage</a>
 </li>
 <li>CreateTrackletGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#a5f618dde61f100d4371578aa36a01a7c">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">algo::TwoStage</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
 <li>DetectionSequence()
-: <a class="el" href="classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7">core::DetectionSequence</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>EuclideanDistance()
+: <a class="el" href="classutil_1_1MyMath.html#abaf214b2fc7a31e43cf07245cf4b2e1f">util::MyMath</a>
+</li>
 <li>ExtractTracks()
-: <a class="el" href="classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38">algo::TwoStage</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>frame_index_
-: <a class="el" href="classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5">core::ObjectData</a>
+<li>Flatten()
+: <a class="el" href="classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0">core::Tracklet</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GetAngle()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#a6c2da5010cd919af3b0f156579d04ef8">core::ObjectDataAngular</a>
+</li>
+<li>GetAngularWeight()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#ae1c5db7b9fc06e648450d9388c93a1aa">core::ObjectDataAngular</a>
+</li>
+<li>GetDetectionScore()
+: <a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">core::ObjectData</a>
+</li>
 <li>GetFirstFrameIndex()
-: <a class="el" href="classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691">core::Tracklet</a>
 </li>
 <li>GetFrameCount()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571">core::DetectionSequence</a>
@@ -171,19 +187,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">core::ObjectData</a>
 </li>
 <li>GetLastFrameIndex()
-: <a class="el" href="classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96">core::Tracklet</a>
 </li>
 <li>GetName()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad">core::DetectionSequence</a>
 </li>
 <li>GetObject()
-: <a class="el" href="classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86">core::DetectionSequence</a>
 </li>
 <li>GetObjectCount()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100">core::DetectionSequence</a>
 </li>
 <li>GetPathObject()
-: <a class="el" href="classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81">core::Tracklet</a>
+</li>
+<li>GetPathObjectCount()
+: <a class="el" href="classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8">core::Tracklet</a>
+</li>
+<li>GetPosition()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a0f4a0dca51eb50fdc5baf9714c4a64f6">core::ObjectData3D</a>
+</li>
+<li>GetSpatialWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a896607721c9d12b2e2425fe927f06d6f">core::ObjectData3D</a>
+</li>
+<li>GetTemporalWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a155e3f4dd2a6adb5d32b61f224092d4b">core::ObjectData3D</a>
 </li>
 <li>GetValue()
 : <a class="el" href="classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7">core::ObjectDataMap</a>
@@ -195,44 +223,120 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 
 <h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>Instance()
+: <a class="el" href="classutil_1_1Logger.html#a734bbf94e1232706f7c0bf52745cc876">util::Logger</a>
+</li>
+<li>Interpolate()
+: <a class="el" href="classcore_1_1ObjectData3D.html#ae57a5d8f7a02a403653c82c3b73a73d2">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#a42962dd1f994b2577133450e755d586e">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188">core::Tracklet</a>
+</li>
+<li>InterpolateMissingFrames()
+: <a class="el" href="classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce">core::Tracklet</a>
+</li>
+<li>InverseLerp()
+: <a class="el" href="classutil_1_1MyMath.html#a789c283b324494ab50955af1e35178d5">util::MyMath</a>
+</li>
+<li>IsDebugEnabled()
+: <a class="el" href="classutil_1_1Logger.html#a6ee9298451936b98815e20ba7f5d7275">util::Logger</a>
+</li>
+<li>IsInfoEnabled()
+: <a class="el" href="classutil_1_1Logger.html#a194b338af92760d0f7d15b607cad5429">util::Logger</a>
+</li>
 <li>IsVirtual()
 : <a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">core::ObjectData</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>LogDebug()
+: <a class="el" href="classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee">util::Logger</a>
+</li>
+<li>LogError()
+: <a class="el" href="classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8">util::Logger</a>
+</li>
+<li>Logger()
+: <a class="el" href="classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12">util::Logger</a>
+</li>
+<li>LogInfo()
+: <a class="el" href="classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea">util::Logger</a>
+</li>
+</ul>
+
+
 <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
 <li>ObjectData()
 : <a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">core::ObjectData</a>
 </li>
+<li>ObjectData3D()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699">core::ObjectData3D</a>
+</li>
+<li>ObjectDataAngular()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa">core::ObjectDataAngular</a>
+</li>
 <li>ObjectDataMap()
-: <a class="el" href="classcore_1_1ObjectDataMap.html#ad2af0de7438ed72be68348ac992568b6">core::ObjectDataMap</a>
+: <a class="el" href="classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795">core::ObjectDataMap</a>
 </li>
 <li>operator&lt;&lt;
 : <a class="el" href="classcore_1_1DetectionSequence.html#a557132cfbb170daf47f5a890a0c5bac0">core::DetectionSequence</a>
 , <a class="el" href="classcore_1_1ObjectData.html#a56fc9b6184428bf4d80826bbb9fe4c6f">core::ObjectData</a>
 </li>
+<li>operator=()
+: <a class="el" href="classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de">util::Logger</a>
+</li>
 </ul>
 
 
 <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>
+</li>
+<li>ParseObjectDataAngular()
+: <a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">util::Parser</a>
+</li>
 <li>ParseObjectDataMap()
 : <a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">util::Parser</a>
 </li>
-<li>Print()
-: <a class="el" href="classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410">core::DetectionSequence</a>
-, <a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">core::ObjectData</a>
-, <a class="el" href="classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a">core::ObjectDataMap</a>
-</li>
-<li>PutValueWeight()
-: <a class="el" href="classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591">core::ObjectDataMap</a>
+<li>Put()
+: <a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">core::ObjectDataMap</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>ReadCSV()
-: <a class="el" href="classutil_1_1FileIO.html#aa92b94ba7a5e0fea0e8c2f801c8d14b8">util::FileIO</a>
+: <a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">util::FileIO</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SetAngularWeight()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853">core::ObjectDataAngular</a>
+</li>
+<li>SetDebug()
+: <a class="el" href="classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869">util::Logger</a>
+</li>
+<li>SetDetectionScore()
+: <a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">core::ObjectData</a>
+</li>
+<li>SetFrameIndex()
+: <a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">core::ObjectData</a>
+</li>
+<li>SetInfo()
+: <a class="el" href="classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41">util::Logger</a>
+</li>
+<li>SetSpatialWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6">core::ObjectData3D</a>
+</li>
+<li>SetTemporalWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597">core::ObjectData3D</a>
 </li>
 </ul>
 
@@ -245,6 +349,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7">algo::TwoStage</a>
 </li>
 </ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>Visualize()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a86216fae3dc86f1107eb1b4530b574d2">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#acb4265f6de511238460df118148bc85c">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">core::Tracklet</a>
+</li>
+</ul>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 150 - 27
Documentation/html/functions_func.html

@@ -71,7 +71,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
     <ul class="tablist">
       <li><a href="functions.html"><span>All</span></a></li>
       <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
       <li><a href="functions_rela.html"><span>Related&#160;Functions</span></a></li>
     </ul>
   </div>
@@ -81,12 +80,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="#index_c"><span>c</span></a></li>
       <li><a href="#index_d"><span>d</span></a></li>
       <li><a href="#index_e"><span>e</span></a></li>
+      <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_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 class="current"><a href="#index_t"><span>t</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>
     </ul>
   </div>
 </div><!-- top -->
@@ -109,52 +112,73 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
 <li>AddObject()
-: <a class="el" href="classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72">core::DetectionSequence</a>
 </li>
-<li>AddPathObjectFirst()
-: <a class="el" href="classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf">core::Tracklet</a>
-</li>
-<li>AddPathObjectLast()
-: <a class="el" href="classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5">core::Tracklet</a>
+<li>AddPathObject()
+: <a class="el" href="classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8">core::Tracklet</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>Clamp()
+: <a class="el" href="classutil_1_1MyMath.html#a367a261dc52a85cc97ba376799ed13a3">util::MyMath</a>
+</li>
 <li>Clear()
 : <a class="el" href="classcore_1_1DetectionSequence.html#ab62569a3e51d58457057deba12ef6892">core::DetectionSequence</a>
 </li>
 <li>CompareTo()
-: <a class="el" href="classcore_1_1ObjectData.html#a01f04d64b1e62f567d819a8fcbe38319">core::ObjectData</a>
-, <a class="el" href="classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947">core::ObjectDataMap</a>
-, <a class="el" href="classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89">core::Tracklet</a>
+: <a class="el" href="classcore_1_1ObjectData3D.html#abef3e4e7a0dc121d8a403d91964be576">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#afbf7a1e87235f1b204d4d2eb8a37a9a6">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#a2932240c6c082b76f2c04723cdf3e4f9">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#a7fcc9ef5b684f14d33711348610d9b74">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a0357f2fa173941800571432dcbc96dc2">core::Tracklet</a>
 </li>
 <li>CreateObjectGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#add2da8463ae067ace43ab1201725157e">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#aa2b03f5bc30427ec5d0a7ca703e25e11">algo::TwoStage</a>
 </li>
 <li>CreateTrackletGraph()
-: <a class="el" href="classalgo_1_1TwoStage.html#ae966c3f17aca5fb05d5c90fd89bdf98c">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837">algo::TwoStage</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
 <li>DetectionSequence()
-: <a class="el" href="classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7">core::DetectionSequence</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>EuclideanDistance()
+: <a class="el" href="classutil_1_1MyMath.html#abaf214b2fc7a31e43cf07245cf4b2e1f">util::MyMath</a>
+</li>
 <li>ExtractTracks()
-: <a class="el" href="classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b">algo::TwoStage</a>
+: <a class="el" href="classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38">algo::TwoStage</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>Flatten()
+: <a class="el" href="classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0">core::Tracklet</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GetAngle()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#a6c2da5010cd919af3b0f156579d04ef8">core::ObjectDataAngular</a>
+</li>
+<li>GetAngularWeight()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#ae1c5db7b9fc06e648450d9388c93a1aa">core::ObjectDataAngular</a>
+</li>
+<li>GetDetectionScore()
+: <a class="el" href="classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a">core::ObjectData</a>
+</li>
 <li>GetFirstFrameIndex()
-: <a class="el" href="classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691">core::Tracklet</a>
 </li>
 <li>GetFrameCount()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571">core::DetectionSequence</a>
@@ -163,19 +187,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162">core::ObjectData</a>
 </li>
 <li>GetLastFrameIndex()
-: <a class="el" href="classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96">core::Tracklet</a>
 </li>
 <li>GetName()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad">core::DetectionSequence</a>
 </li>
 <li>GetObject()
-: <a class="el" href="classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1">core::DetectionSequence</a>
+: <a class="el" href="classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86">core::DetectionSequence</a>
 </li>
 <li>GetObjectCount()
 : <a class="el" href="classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100">core::DetectionSequence</a>
 </li>
 <li>GetPathObject()
-: <a class="el" href="classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c">core::Tracklet</a>
+: <a class="el" href="classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81">core::Tracklet</a>
+</li>
+<li>GetPathObjectCount()
+: <a class="el" href="classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8">core::Tracklet</a>
+</li>
+<li>GetPosition()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a0f4a0dca51eb50fdc5baf9714c4a64f6">core::ObjectData3D</a>
+</li>
+<li>GetSpatialWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a896607721c9d12b2e2425fe927f06d6f">core::ObjectData3D</a>
+</li>
+<li>GetTemporalWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a155e3f4dd2a6adb5d32b61f224092d4b">core::ObjectData3D</a>
 </li>
 <li>GetValue()
 : <a class="el" href="classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7">core::ObjectDataMap</a>
@@ -187,40 +223,116 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 
 <h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>Instance()
+: <a class="el" href="classutil_1_1Logger.html#a734bbf94e1232706f7c0bf52745cc876">util::Logger</a>
+</li>
+<li>Interpolate()
+: <a class="el" href="classcore_1_1ObjectData3D.html#ae57a5d8f7a02a403653c82c3b73a73d2">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#a42962dd1f994b2577133450e755d586e">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188">core::Tracklet</a>
+</li>
+<li>InterpolateMissingFrames()
+: <a class="el" href="classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce">core::Tracklet</a>
+</li>
+<li>InverseLerp()
+: <a class="el" href="classutil_1_1MyMath.html#a789c283b324494ab50955af1e35178d5">util::MyMath</a>
+</li>
+<li>IsDebugEnabled()
+: <a class="el" href="classutil_1_1Logger.html#a6ee9298451936b98815e20ba7f5d7275">util::Logger</a>
+</li>
+<li>IsInfoEnabled()
+: <a class="el" href="classutil_1_1Logger.html#a194b338af92760d0f7d15b607cad5429">util::Logger</a>
+</li>
 <li>IsVirtual()
 : <a class="el" href="classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2">core::ObjectData</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>LogDebug()
+: <a class="el" href="classutil_1_1Logger.html#a9c6a0ebe97ecf3ca24aff8a908a491ee">util::Logger</a>
+</li>
+<li>LogError()
+: <a class="el" href="classutil_1_1Logger.html#a01ad6e5349f51964724f96a598c6d2a8">util::Logger</a>
+</li>
+<li>Logger()
+: <a class="el" href="classutil_1_1Logger.html#a83d4f38e648b39fa61a2b9b3172bda12">util::Logger</a>
+</li>
+<li>LogInfo()
+: <a class="el" href="classutil_1_1Logger.html#a37504d39ec90bebffc3d02d61d47afea">util::Logger</a>
+</li>
+</ul>
+
+
 <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
 <li>ObjectData()
 : <a class="el" href="classcore_1_1ObjectData.html#a7f47a396a3b9e8c12a1557c8156b8ff9">core::ObjectData</a>
 </li>
+<li>ObjectData3D()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a47c967cffcbd109f1366069958a71699">core::ObjectData3D</a>
+</li>
+<li>ObjectDataAngular()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#acc9d75397b5e4aa43a05f2366b00ccfa">core::ObjectDataAngular</a>
+</li>
 <li>ObjectDataMap()
 : <a class="el" href="classcore_1_1ObjectDataMap.html#ac6df34682a715db6845667f7dda1c795">core::ObjectDataMap</a>
 </li>
+<li>operator=()
+: <a class="el" href="classutil_1_1Logger.html#a4e9e8b8d0e75058265037976d9b256de">util::Logger</a>
+</li>
 </ul>
 
 
 <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>
+</li>
+<li>ParseObjectDataAngular()
+: <a class="el" href="classutil_1_1Parser.html#a314cfd3ebd16ab18cd132e7d8dd4c04a">util::Parser</a>
+</li>
 <li>ParseObjectDataMap()
 : <a class="el" href="classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a">util::Parser</a>
 </li>
-<li>Print()
-: <a class="el" href="classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410">core::DetectionSequence</a>
-, <a class="el" href="classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657">core::ObjectData</a>
-, <a class="el" href="classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a">core::ObjectDataMap</a>
-</li>
-<li>PutValueWeight()
-: <a class="el" href="classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591">core::ObjectDataMap</a>
+<li>Put()
+: <a class="el" href="classcore_1_1ObjectDataMap.html#a2d104f34385edf8c3fdfda7390c28bf5">core::ObjectDataMap</a>
 </li>
 </ul>
 
 
 <h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
 <li>ReadCSV()
-: <a class="el" href="classutil_1_1FileIO.html#aa92b94ba7a5e0fea0e8c2f801c8d14b8">util::FileIO</a>
+: <a class="el" href="classutil_1_1FileIO.html#acfce3977f435f2b024984da05408dfb4">util::FileIO</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SetAngularWeight()
+: <a class="el" href="classcore_1_1ObjectDataAngular.html#af6772caef2337f3c12a3f52049c4d853">core::ObjectDataAngular</a>
+</li>
+<li>SetDebug()
+: <a class="el" href="classutil_1_1Logger.html#ac7b9bc580a6d459c212c46b137742869">util::Logger</a>
+</li>
+<li>SetDetectionScore()
+: <a class="el" href="classcore_1_1ObjectData.html#a737216c2689aefa216c1c842922d7dd8">core::ObjectData</a>
+</li>
+<li>SetFrameIndex()
+: <a class="el" href="classcore_1_1ObjectData.html#aedfe00fa37d5ac7ef554bda746931148">core::ObjectData</a>
+</li>
+<li>SetInfo()
+: <a class="el" href="classutil_1_1Logger.html#a3965358e412007989f90798e295d4b41">util::Logger</a>
+</li>
+<li>SetSpatialWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a94d4c0d90d4e0999eb2b339d37069cd6">core::ObjectData3D</a>
+</li>
+<li>SetTemporalWeight()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a05eafbd4d963ef14b1068ab5a3818597">core::ObjectData3D</a>
 </li>
 </ul>
 
@@ -233,6 +345,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 : <a class="el" href="classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7">algo::TwoStage</a>
 </li>
 </ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>Visualize()
+: <a class="el" href="classcore_1_1ObjectData3D.html#a86216fae3dc86f1107eb1b4530b574d2">core::ObjectData3D</a>
+, <a class="el" href="classcore_1_1ObjectData.html#aae2c4fceddc529570dbe8909309f9961">core::ObjectData</a>
+, <a class="el" href="classcore_1_1ObjectDataAngular.html#acb4265f6de511238460df118148bc85c">core::ObjectDataAngular</a>
+, <a class="el" href="classcore_1_1ObjectDataMap.html#a8a0f71318dd58e0d527a63b904c6afac">core::ObjectDataMap</a>
+, <a class="el" href="classcore_1_1Tracklet.html#a85f92a4059bf89f24a83f28935675181">core::Tracklet</a>
+</li>
+</ul>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>

+ 0 - 1
Documentation/html/functions_rela.html

@@ -71,7 +71,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
     <ul class="tablist">
       <li><a href="functions.html"><span>All</span></a></li>
       <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
       <li class="current"><a href="functions_rela.html"><span>Related&#160;Functions</span></a></li>
     </ul>
   </div>

+ 10 - 6
Documentation/html/hierarchy.html

@@ -88,14 +88,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><!--header-->
 <div class="contents">
 <div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</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">
+<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:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#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_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="classcore_1_1ObjectDataMap.html" target="_self">core::ObjectDataMap</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="classcore_1_1Tracklet.html" target="_self">core::Tracklet</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_1Parser.html" target="_self">util::Parser</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="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="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>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->

+ 2 - 3
Documentation/html/search/all_0.js

@@ -1,6 +1,5 @@
 var searchData=
 [
-  ['addobject',['AddObject',['../classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394',1,'core::DetectionSequence']]],
-  ['addpathobjectfirst',['AddPathObjectFirst',['../classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf',1,'core::Tracklet']]],
-  ['addpathobjectlast',['AddPathObjectLast',['../classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5',1,'core::Tracklet']]]
+  ['addobject',['AddObject',['../classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72',1,'core::DetectionSequence']]],
+  ['addpathobject',['AddPathObject',['../classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8',1,'core::Tracklet']]]
 ];

+ 4 - 3
Documentation/html/search/all_1.js

@@ -1,7 +1,8 @@
 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#a01f04d64b1e62f567d819a8fcbe38319',1,'core::ObjectData::CompareTo()'],['../classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947',1,'core::ObjectDataMap::CompareTo(ObjectData *obj)'],['../classcore_1_1ObjectDataMap.html#a38ec46bab19a5770cecb00533e8d37c3',1,'core::ObjectDataMap::CompareTo(ObjectDataMap *obj)'],['../classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89',1,'core::Tracklet::CompareTo()']]],
-  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#add2da8463ae067ace43ab1201725157e',1,'algo::TwoStage']]],
-  ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae966c3f17aca5fb05d5c90fd89bdf98c',1,'algo::TwoStage::CreateTrackletGraph()'],['../classalgo_1_1TwoStage.html#a5f618dde61f100d4371578aa36a01a7c',1,'algo::TwoStage::CreateTrackletGraph(DirectedGraph obj_graph, size_t frame_count)']]]
+  ['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']]],
+  ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837',1,'algo::TwoStage']]]
 ];

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

@@ -1,5 +1,5 @@
 var searchData=
 [
   ['detectionsequence',['DetectionSequence',['../classcore_1_1DetectionSequence.html',1,'core']]],
-  ['detectionsequence',['DetectionSequence',['../classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a',1,'core::DetectionSequence']]]
+  ['detectionsequence',['DetectionSequence',['../classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7',1,'core::DetectionSequence']]]
 ];

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

@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['extracttracks',['ExtractTracks',['../classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b',1,'algo::TwoStage::ExtractTracks()'],['../classalgo_1_1TwoStage.html#a4e1d9fde2480e607ae532d0dae84d3ea',1,'algo::TwoStage::ExtractTracks(DirectedGraph tlt_graph)']]]
+  ['euclideandistance',['EuclideanDistance',['../classutil_1_1MyMath.html#abaf214b2fc7a31e43cf07245cf4b2e1f',1,'util::MyMath']]],
+  ['extracttracks',['ExtractTracks',['../classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38',1,'algo::TwoStage']]]
 ];

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

@@ -1,5 +1,5 @@
 var searchData=
 [
   ['fileio',['FileIO',['../classutil_1_1FileIO.html',1,'util']]],
-  ['frame_5findex_5f',['frame_index_',['../classcore_1_1ObjectData.html#ade1423dbad9323431d22750121fa59e5',1,'core::ObjectData']]]
+  ['flatten',['Flatten',['../classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0',1,'core::Tracklet']]]
 ];

+ 11 - 4
Documentation/html/search/all_5.js

@@ -1,13 +1,20 @@
 var searchData=
 [
-  ['getfirstframeindex',['GetFirstFrameIndex',['../classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e',1,'core::Tracklet']]],
+  ['getangle',['GetAngle',['../classcore_1_1ObjectDataAngular.html#a6c2da5010cd919af3b0f156579d04ef8',1,'core::ObjectDataAngular']]],
+  ['getangularweight',['GetAngularWeight',['../classcore_1_1ObjectDataAngular.html#ae1c5db7b9fc06e648450d9388c93a1aa',1,'core::ObjectDataAngular']]],
+  ['getdetectionscore',['GetDetectionScore',['../classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a',1,'core::ObjectData']]],
+  ['getfirstframeindex',['GetFirstFrameIndex',['../classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691',1,'core::Tracklet']]],
   ['getframecount',['GetFrameCount',['../classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571',1,'core::DetectionSequence']]],
   ['getframeindex',['GetFrameIndex',['../classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162',1,'core::ObjectData']]],
-  ['getlastframeindex',['GetLastFrameIndex',['../classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731',1,'core::Tracklet']]],
+  ['getlastframeindex',['GetLastFrameIndex',['../classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96',1,'core::Tracklet']]],
   ['getname',['GetName',['../classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad',1,'core::DetectionSequence']]],
-  ['getobject',['GetObject',['../classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1',1,'core::DetectionSequence']]],
+  ['getobject',['GetObject',['../classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86',1,'core::DetectionSequence']]],
   ['getobjectcount',['GetObjectCount',['../classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100',1,'core::DetectionSequence']]],
-  ['getpathobject',['GetPathObject',['../classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c',1,'core::Tracklet']]],
+  ['getpathobject',['GetPathObject',['../classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81',1,'core::Tracklet']]],
+  ['getpathobjectcount',['GetPathObjectCount',['../classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8',1,'core::Tracklet']]],
+  ['getposition',['GetPosition',['../classcore_1_1ObjectData3D.html#a0f4a0dca51eb50fdc5baf9714c4a64f6',1,'core::ObjectData3D']]],
+  ['getspatialweight',['GetSpatialWeight',['../classcore_1_1ObjectData3D.html#a896607721c9d12b2e2425fe927f06d6f',1,'core::ObjectData3D']]],
+  ['gettemporalweight',['GetTemporalWeight',['../classcore_1_1ObjectData3D.html#a155e3f4dd2a6adb5d32b61f224092d4b',1,'core::ObjectData3D']]],
   ['getvalue',['GetValue',['../classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7',1,'core::ObjectDataMap']]],
   ['getweight',['GetWeight',['../classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05',1,'core::ObjectDataMap']]]
 ];

+ 6 - 0
Documentation/html/search/all_6.js

@@ -1,4 +1,10 @@
 var searchData=
 [
+  ['instance',['Instance',['../classutil_1_1Logger.html#a734bbf94e1232706f7c0bf52745cc876',1,'util::Logger']]],
+  ['interpolate',['Interpolate',['../classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e',1,'core::ObjectData::Interpolate()'],['../classcore_1_1ObjectData3D.html#ae57a5d8f7a02a403653c82c3b73a73d2',1,'core::ObjectData3D::Interpolate()'],['../classcore_1_1ObjectDataAngular.html#a42962dd1f994b2577133450e755d586e',1,'core::ObjectDataAngular::Interpolate()'],['../classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e',1,'core::ObjectDataMap::Interpolate()'],['../classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188',1,'core::Tracklet::Interpolate()']]],
+  ['interpolatemissingframes',['InterpolateMissingFrames',['../classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce',1,'core::Tracklet']]],
+  ['inverselerp',['InverseLerp',['../classutil_1_1MyMath.html#a789c283b324494ab50955af1e35178d5',1,'util::MyMath']]],
+  ['isdebugenabled',['IsDebugEnabled',['../classutil_1_1Logger.html#a6ee9298451936b98815e20ba7f5d7275',1,'util::Logger']]],
+  ['isinfoenabled',['IsInfoEnabled',['../classutil_1_1Logger.html#a194b338af92760d0f7d15b607cad5429',1,'util::Logger']]],
   ['isvirtual',['IsVirtual',['../classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2',1,'core::ObjectData']]]
 ];

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

@@ -1,8 +1,9 @@
 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)']]],
-  ['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)']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]],
-  ['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;()']]]
+  ['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']]]
 ];

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

@@ -1,7 +1,4 @@
 var searchData=
 [
-  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a',1,'util::Parser']]],
-  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]],
-  ['print',['Print',['../classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410',1,'core::DetectionSequence::Print()'],['../classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657',1,'core::ObjectData::Print()'],['../classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a',1,'core::ObjectDataMap::Print()']]],
-  ['putvalueweight',['PutValueWeight',['../classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591',1,'core::ObjectDataMap::PutValueWeight(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a8c2ef0cebadf12e4aa67056823020cc3',1,'core::ObjectDataMap::PutValueWeight(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
+  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
 ];

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

@@ -1,4 +1,13 @@
 var searchData=
 [
-  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#aa92b94ba7a5e0fea0e8c2f801c8d14b8',1,'util::FileIO::ReadCSV(const std::string &amp;filename, const char &amp;delimiter, core::Vector3d &amp;values)'],['../classutil_1_1FileIO.html#ab33278a4ae57c8c5a56b6d80cbc27184',1,'util::FileIO::ReadCSV(const std::string &amp;filename, const char &amp;delimiter, core::Vector2d &amp;values)']]]
+  ['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 - 4
Documentation/html/search/all_a.js

@@ -1,7 +1,8 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html',1,'core']]],
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet::Tracklet()'],['../classcore_1_1Tracklet.html#a5a91e01f9cd8404915dce73a0d659064',1,'core::Tracklet::Tracklet(ObjectData first_object)']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html',1,'algo']]]
+  ['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)']]]
 ];

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

@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['objectdata',['ObjectData',['../classcore_1_1ObjectData.html',1,'core']]],
-  ['objectdatamap',['ObjectDataMap',['../classcore_1_1ObjectDataMap.html',1,'core']]]
+  ['logger',['Logger',['../classutil_1_1Logger.html',1,'util']]]
 ];

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

@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['parser',['Parser',['../classutil_1_1Parser.html',1,'util']]]
+  ['mymath',['MyMath',['../classutil_1_1MyMath.html',1,'util']]]
 ];

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

@@ -1,5 +1,7 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html',1,'core']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html',1,'algo']]]
+  ['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']]]
 ];

+ 2 - 3
Documentation/html/search/functions_0.js

@@ -1,6 +1,5 @@
 var searchData=
 [
-  ['addobject',['AddObject',['../classcore_1_1DetectionSequence.html#a933757fe1f1093ac4be0d9be9a79d394',1,'core::DetectionSequence']]],
-  ['addpathobjectfirst',['AddPathObjectFirst',['../classcore_1_1Tracklet.html#ac7f660efeed15a8925482d8d63073bcf',1,'core::Tracklet']]],
-  ['addpathobjectlast',['AddPathObjectLast',['../classcore_1_1Tracklet.html#ad9f018cb26a5fcb1ab00c8f336f24de5',1,'core::Tracklet']]]
+  ['addobject',['AddObject',['../classcore_1_1DetectionSequence.html#a3cc0fdf3281f34985f4762086293db72',1,'core::DetectionSequence']]],
+  ['addpathobject',['AddPathObject',['../classcore_1_1Tracklet.html#ab0b397f2d0685a927de886dbd36c3bc8',1,'core::Tracklet']]]
 ];

+ 4 - 3
Documentation/html/search/functions_1.js

@@ -1,7 +1,8 @@
 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#a01f04d64b1e62f567d819a8fcbe38319',1,'core::ObjectData::CompareTo()'],['../classcore_1_1ObjectDataMap.html#ad00d1998652e4d2ffa2629128c9c2947',1,'core::ObjectDataMap::CompareTo(ObjectData *obj)'],['../classcore_1_1ObjectDataMap.html#a38ec46bab19a5770cecb00533e8d37c3',1,'core::ObjectDataMap::CompareTo(ObjectDataMap *obj)'],['../classcore_1_1Tracklet.html#ab45f28ba6abde0944820ac614560ea89',1,'core::Tracklet::CompareTo()']]],
-  ['createobjectgraph',['CreateObjectGraph',['../classalgo_1_1TwoStage.html#add2da8463ae067ace43ab1201725157e',1,'algo::TwoStage']]],
-  ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae966c3f17aca5fb05d5c90fd89bdf98c',1,'algo::TwoStage::CreateTrackletGraph()'],['../classalgo_1_1TwoStage.html#a5f618dde61f100d4371578aa36a01a7c',1,'algo::TwoStage::CreateTrackletGraph(DirectedGraph obj_graph, size_t frame_count)']]]
+  ['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']]],
+  ['createtrackletgraph',['CreateTrackletGraph',['../classalgo_1_1TwoStage.html#ae14cf79859b4275c862d6750b6bc6837',1,'algo::TwoStage']]]
 ];

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

@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['detectionsequence',['DetectionSequence',['../classcore_1_1DetectionSequence.html#ad2183e28df5cb27883d396dfa3b40b6a',1,'core::DetectionSequence']]]
+  ['detectionsequence',['DetectionSequence',['../classcore_1_1DetectionSequence.html#a2cbdc8db34fe87932653826fc8a3c1f7',1,'core::DetectionSequence']]]
 ];

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

@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['extracttracks',['ExtractTracks',['../classalgo_1_1TwoStage.html#af61470d4a2ed751844ba2adc3f41451b',1,'algo::TwoStage::ExtractTracks()'],['../classalgo_1_1TwoStage.html#a4e1d9fde2480e607ae532d0dae84d3ea',1,'algo::TwoStage::ExtractTracks(DirectedGraph tlt_graph)']]]
+  ['euclideandistance',['EuclideanDistance',['../classutil_1_1MyMath.html#abaf214b2fc7a31e43cf07245cf4b2e1f',1,'util::MyMath']]],
+  ['extracttracks',['ExtractTracks',['../classalgo_1_1TwoStage.html#a09168d0ace15d689c9d594ca16b93c38',1,'algo::TwoStage']]]
 ];

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

@@ -1,13 +1,4 @@
 var searchData=
 [
-  ['getfirstframeindex',['GetFirstFrameIndex',['../classcore_1_1Tracklet.html#ae544127ff912eefeb3698e94da27f91e',1,'core::Tracklet']]],
-  ['getframecount',['GetFrameCount',['../classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571',1,'core::DetectionSequence']]],
-  ['getframeindex',['GetFrameIndex',['../classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162',1,'core::ObjectData']]],
-  ['getlastframeindex',['GetLastFrameIndex',['../classcore_1_1Tracklet.html#abbfc0ac1abd459962142ee96def46731',1,'core::Tracklet']]],
-  ['getname',['GetName',['../classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad',1,'core::DetectionSequence']]],
-  ['getobject',['GetObject',['../classcore_1_1DetectionSequence.html#a8d562d3ea68249306825655efc703ee1',1,'core::DetectionSequence']]],
-  ['getobjectcount',['GetObjectCount',['../classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100',1,'core::DetectionSequence']]],
-  ['getpathobject',['GetPathObject',['../classcore_1_1Tracklet.html#a95387d8a86e5b81b5cc1ff479c96494c',1,'core::Tracklet']]],
-  ['getvalue',['GetValue',['../classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7',1,'core::ObjectDataMap']]],
-  ['getweight',['GetWeight',['../classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05',1,'core::ObjectDataMap']]]
+  ['flatten',['Flatten',['../classcore_1_1Tracklet.html#a2bdb2f2c8249145808e7029dde6e7df0',1,'core::Tracklet']]]
 ];

+ 17 - 1
Documentation/html/search/functions_5.js

@@ -1,4 +1,20 @@
 var searchData=
 [
-  ['isvirtual',['IsVirtual',['../classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2',1,'core::ObjectData']]]
+  ['getangle',['GetAngle',['../classcore_1_1ObjectDataAngular.html#a6c2da5010cd919af3b0f156579d04ef8',1,'core::ObjectDataAngular']]],
+  ['getangularweight',['GetAngularWeight',['../classcore_1_1ObjectDataAngular.html#ae1c5db7b9fc06e648450d9388c93a1aa',1,'core::ObjectDataAngular']]],
+  ['getdetectionscore',['GetDetectionScore',['../classcore_1_1ObjectData.html#ae9208bfeee72238e2d635dfab368c09a',1,'core::ObjectData']]],
+  ['getfirstframeindex',['GetFirstFrameIndex',['../classcore_1_1Tracklet.html#a1b963319d6c65614baec02a925f31691',1,'core::Tracklet']]],
+  ['getframecount',['GetFrameCount',['../classcore_1_1DetectionSequence.html#a2417e4f2652a39245d6f2faa0ce19571',1,'core::DetectionSequence']]],
+  ['getframeindex',['GetFrameIndex',['../classcore_1_1ObjectData.html#a1151e9215baf315f4b98f696f4271162',1,'core::ObjectData']]],
+  ['getlastframeindex',['GetLastFrameIndex',['../classcore_1_1Tracklet.html#ad8e195b523cf2021394455cc21867d96',1,'core::Tracklet']]],
+  ['getname',['GetName',['../classcore_1_1DetectionSequence.html#a8a1af3dee89766d06f4a4f74044082ad',1,'core::DetectionSequence']]],
+  ['getobject',['GetObject',['../classcore_1_1DetectionSequence.html#aab2b72c6e0a9ee14dba99d07116c1d86',1,'core::DetectionSequence']]],
+  ['getobjectcount',['GetObjectCount',['../classcore_1_1DetectionSequence.html#a99a1b693215c386c4716df12f6040100',1,'core::DetectionSequence']]],
+  ['getpathobject',['GetPathObject',['../classcore_1_1Tracklet.html#a9758349e8f25c479ffc4b21a90149a81',1,'core::Tracklet']]],
+  ['getpathobjectcount',['GetPathObjectCount',['../classcore_1_1Tracklet.html#aee4298a7b734b2b7533d4536006a8aa8',1,'core::Tracklet']]],
+  ['getposition',['GetPosition',['../classcore_1_1ObjectData3D.html#a0f4a0dca51eb50fdc5baf9714c4a64f6',1,'core::ObjectData3D']]],
+  ['getspatialweight',['GetSpatialWeight',['../classcore_1_1ObjectData3D.html#a896607721c9d12b2e2425fe927f06d6f',1,'core::ObjectData3D']]],
+  ['gettemporalweight',['GetTemporalWeight',['../classcore_1_1ObjectData3D.html#a155e3f4dd2a6adb5d32b61f224092d4b',1,'core::ObjectData3D']]],
+  ['getvalue',['GetValue',['../classcore_1_1ObjectDataMap.html#a276c89da6f3318d2baa2e9678e9508f7',1,'core::ObjectDataMap']]],
+  ['getweight',['GetWeight',['../classcore_1_1ObjectDataMap.html#a4cd92ab91559063b4e6ab12fec53cc05',1,'core::ObjectDataMap']]]
 ];

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

@@ -1,5 +1,10 @@
 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)']]],
-  ['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)']]]
+  ['instance',['Instance',['../classutil_1_1Logger.html#a734bbf94e1232706f7c0bf52745cc876',1,'util::Logger']]],
+  ['interpolate',['Interpolate',['../classcore_1_1ObjectData.html#ad681915317decab76c384a635fc8444e',1,'core::ObjectData::Interpolate()'],['../classcore_1_1ObjectData3D.html#ae57a5d8f7a02a403653c82c3b73a73d2',1,'core::ObjectData3D::Interpolate()'],['../classcore_1_1ObjectDataAngular.html#a42962dd1f994b2577133450e755d586e',1,'core::ObjectDataAngular::Interpolate()'],['../classcore_1_1ObjectDataMap.html#ac6a739ea0509371929dbe7cbac601a3e',1,'core::ObjectDataMap::Interpolate()'],['../classcore_1_1Tracklet.html#a5fb5e6ab9df668c3477e8b52f115b188',1,'core::Tracklet::Interpolate()']]],
+  ['interpolatemissingframes',['InterpolateMissingFrames',['../classcore_1_1Tracklet.html#a10b56b608b24ef547550540e5a755bce',1,'core::Tracklet']]],
+  ['inverselerp',['InverseLerp',['../classutil_1_1MyMath.html#a789c283b324494ab50955af1e35178d5',1,'util::MyMath']]],
+  ['isdebugenabled',['IsDebugEnabled',['../classutil_1_1Logger.html#a6ee9298451936b98815e20ba7f5d7275',1,'util::Logger']]],
+  ['isinfoenabled',['IsInfoEnabled',['../classutil_1_1Logger.html#a194b338af92760d0f7d15b607cad5429',1,'util::Logger']]],
+  ['isvirtual',['IsVirtual',['../classcore_1_1ObjectData.html#a2880d710cfa520e9c0453e2a6729c0e2',1,'core::ObjectData']]]
 ];

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

@@ -1,6 +1,8 @@
 var searchData=
 [
-  ['parseobjectdatamap',['ParseObjectDataMap',['../classutil_1_1Parser.html#ac2095e8699706079dde135098f30de0a',1,'util::Parser']]],
-  ['print',['Print',['../classcore_1_1DetectionSequence.html#ad8e771ebdcfe84a91da5eb71cb98a410',1,'core::DetectionSequence::Print()'],['../classcore_1_1ObjectData.html#aa26949b0456068d67802d9f6067aa657',1,'core::ObjectData::Print()'],['../classcore_1_1ObjectDataMap.html#a16fbcc2b99feb1545e1a66f828680b1a',1,'core::ObjectDataMap::Print()']]],
-  ['putvalueweight',['PutValueWeight',['../classcore_1_1ObjectDataMap.html#a61eb1326be41c3411dc0c1757f360591',1,'core::ObjectDataMap::PutValueWeight(std::string key, double value, double weight)'],['../classcore_1_1ObjectDataMap.html#a8c2ef0cebadf12e4aa67056823020cc3',1,'core::ObjectDataMap::PutValueWeight(std::string key, std::pair&lt; double, double &gt; value_weight)']]]
+  ['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']]]
 ];

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

@@ -1,4 +1,8 @@
 var searchData=
 [
-  ['readcsv',['ReadCSV',['../classutil_1_1FileIO.html#aa92b94ba7a5e0fea0e8c2f801c8d14b8',1,'util::FileIO::ReadCSV(const std::string &amp;filename, const char &amp;delimiter, core::Vector3d &amp;values)'],['../classutil_1_1FileIO.html#ab33278a4ae57c8c5a56b6d80cbc27184',1,'util::FileIO::ReadCSV(const std::string &amp;filename, const char &amp;delimiter, core::Vector2d &amp;values)']]]
+  ['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 - 2
Documentation/html/search/functions_9.js

@@ -1,5 +1,7 @@
 var searchData=
 [
-  ['tracklet',['Tracklet',['../classcore_1_1Tracklet.html#aedf59b5a9a068a28bb7570f2a031d4e7',1,'core::Tracklet::Tracklet()'],['../classcore_1_1Tracklet.html#a5a91e01f9cd8404915dce73a0d659064',1,'core::Tracklet::Tracklet(ObjectData first_object)']]],
-  ['twostage',['TwoStage',['../classalgo_1_1TwoStage.html#ae302f9ea93d56155a9dbd0be060500f7',1,'algo::TwoStage']]]
+  ['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)']]]
 ];

+ 6 - 9
Documentation/html/search/searchdata.js

@@ -1,10 +1,9 @@
 var indexSectionsWithContent =
 {
-  0: "acdefgioprt",
-  1: "dfopt",
-  2: "acdegioprt",
-  3: "f",
-  4: "o"
+  0: "acdefgilmoprstv",
+  1: "dflmopt",
+  2: "acdefgiloprstv",
+  3: "o"
 };
 
 var indexSectionNames =
@@ -12,8 +11,7 @@ var indexSectionNames =
   0: "all",
   1: "classes",
   2: "functions",
-  3: "variables",
-  4: "related"
+  3: "related"
 };
 
 var indexSectionLabels =
@@ -21,7 +19,6 @@ var indexSectionLabels =
   0: "All",
   1: "Classes",
   2: "Functions",
-  3: "Variables",
-  4: "Friends"
+  3: "Friends"
 };
 

+ 4 - 0
Documentation/latex/annotated.tex

@@ -2,7 +2,11 @@
 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{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}}{}
+\item\contentsline{section}{\hyperlink{classcore_1_1ObjectData3D}{core\+::\+Object\+Data3D} }{\pageref{classcore_1_1ObjectData3D}}{}
+\item\contentsline{section}{\hyperlink{classcore_1_1ObjectDataAngular}{core\+::\+Object\+Data\+Angular} }{\pageref{classcore_1_1ObjectDataAngular}}{}
 \item\contentsline{section}{\hyperlink{classcore_1_1ObjectDataMap}{core\+::\+Object\+Data\+Map} }{\pageref{classcore_1_1ObjectDataMap}}{}
 \item\contentsline{section}{\hyperlink{classutil_1_1Parser}{util\+::\+Parser} }{\pageref{classutil_1_1Parser}}{}
 \item\contentsline{section}{\hyperlink{classcore_1_1Tracklet}{core\+::\+Tracklet} }{\pageref{classcore_1_1Tracklet}}{}

+ 25 - 43
Documentation/latex/classalgo_1_1TwoStage.tex

@@ -9,20 +9,16 @@
 \item 
 \hyperlink{classalgo_1_1TwoStage_ae302f9ea93d56155a9dbd0be060500f7}{Two\+Stage} (size\+\_\+t max\+\_\+frame\+\_\+skip, double penalty\+\_\+value, size\+\_\+t max\+\_\+tracklet\+\_\+count)
 \item 
-Directed\+Graph \hyperlink{classalgo_1_1TwoStage_add2da8463ae067ace43ab1201725157e}{Create\+Object\+Graph} (\hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} detections)
+void \hyperlink{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}{Create\+Object\+Graph} (Directed\+Graph \&graph, \hyperlink{classcore_1_1DetectionSequence}{core\+::\+Detection\+Sequence} \&detections)
 \item 
-Directed\+Graph \hyperlink{classalgo_1_1TwoStage_ae966c3f17aca5fb05d5c90fd89bdf98c}{Create\+Tracklet\+Graph} ()
+void \hyperlink{classalgo_1_1TwoStage_ae14cf79859b4275c862d6750b6bc6837}{Create\+Tracklet\+Graph} (Directed\+Graph \&obj\+\_\+graph, Directed\+Graph \&tlt\+\_\+graph, size\+\_\+t frame\+\_\+count)
 \item 
-Directed\+Graph \hyperlink{classalgo_1_1TwoStage_a5f618dde61f100d4371578aa36a01a7c}{Create\+Tracklet\+Graph} (Directed\+Graph obj\+\_\+graph, size\+\_\+t frame\+\_\+count)
-\item 
-std\+::vector$<$ \hyperlink{classcore_1_1Tracklet}{core\+::\+Tracklet} $>$ \hyperlink{classalgo_1_1TwoStage_af61470d4a2ed751844ba2adc3f41451b}{Extract\+Tracks} ()
-\item 
-std\+::vector$<$ \hyperlink{classcore_1_1Tracklet}{core\+::\+Tracklet} $>$ \hyperlink{classalgo_1_1TwoStage_a4e1d9fde2480e607ae532d0dae84d3ea}{Extract\+Tracks} (Directed\+Graph tlt\+\_\+graph)
+void \hyperlink{classalgo_1_1TwoStage_a09168d0ace15d689c9d594ca16b93c38}{Extract\+Tracks} (Directed\+Graph \&tlt\+\_\+graph, size\+\_\+t depth, std\+::vector$<$ core\+::\+Tracklet\+Ptr $>$ \&tracks)
 \end{DoxyCompactItemize}
 
 
 \subsection{Detailed Description}
-Implementation if the two-\/staged graph-\/based multi-\/object tracker. 
+Implementation of the two-\/staged graph-\/based multi-\/object tracker. 
 
 \subsection{Constructor \& Destructor Documentation}
 \index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Two\+Stage@{Two\+Stage}}
@@ -48,69 +44,55 @@ 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(core\+::\+Detection\+Sequence detections)}{CreateObjectGraph(core::DetectionSequence detections)}}]{\setlength{\rightskip}{0pt plus 5cm}Directed\+Graph algo\+::\+Two\+Stage\+::\+Create\+Object\+Graph (
+\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 (
 \begin{DoxyParamCaption}
-\item[{{\bf core\+::\+Detection\+Sequence}}]{detections}
+\item[{Directed\+Graph \&}]{graph, }
+\item[{{\bf core\+::\+Detection\+Sequence} \&}]{detections}
 \end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_add2da8463ae067ace43ab1201725157e}{}\label{classalgo_1_1TwoStage_add2da8463ae067ace43ab1201725157e}
+)}\hypertarget{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}{}\label{classalgo_1_1TwoStage_aa2b03f5bc30427ec5d0a7ca703e25e11}
 Creates a graph with vertices for every detected object 
 \begin{DoxyParams}{Parameters}
+{\em graph} & The graph to write into \\
+\hline
 {\em detections} & The objects to use for the graph \\
 \hline
 \end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The created graph containing the object data 
-\end{DoxyReturn}
 \index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Create\+Tracklet\+Graph@{Create\+Tracklet\+Graph}}
 \index{Create\+Tracklet\+Graph@{Create\+Tracklet\+Graph}!algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}}
-\subsubsection[{\texorpdfstring{Create\+Tracklet\+Graph()}{CreateTrackletGraph()}}]{\setlength{\rightskip}{0pt plus 5cm}Directed\+Graph algo\+::\+Two\+Stage\+::\+Create\+Tracklet\+Graph (
+\subsubsection[{\texorpdfstring{Create\+Tracklet\+Graph(\+Directed\+Graph \&obj\+\_\+graph, Directed\+Graph \&tlt\+\_\+graph, size\+\_\+t frame\+\_\+count)}{CreateTrackletGraph(DirectedGraph \&obj\_graph, DirectedGraph \&tlt\_graph, size\_t frame\_count)}}]{\setlength{\rightskip}{0pt plus 5cm}void algo\+::\+Two\+Stage\+::\+Create\+Tracklet\+Graph (
 \begin{DoxyParamCaption}
-{}
-\end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_ae966c3f17aca5fb05d5c90fd89bdf98c}{}\label{classalgo_1_1TwoStage_ae966c3f17aca5fb05d5c90fd89bdf98c}
-Reduces the object graph into linked tracklets. The last created graph is used, as well as his frame count. \index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Create\+Tracklet\+Graph@{Create\+Tracklet\+Graph}}
-\index{Create\+Tracklet\+Graph@{Create\+Tracklet\+Graph}!algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}}
-\subsubsection[{\texorpdfstring{Create\+Tracklet\+Graph(\+Directed\+Graph obj\+\_\+graph, size\+\_\+t frame\+\_\+count)}{CreateTrackletGraph(DirectedGraph obj\_graph, size\_t frame\_count)}}]{\setlength{\rightskip}{0pt plus 5cm}Directed\+Graph algo\+::\+Two\+Stage\+::\+Create\+Tracklet\+Graph (
-\begin{DoxyParamCaption}
-\item[{Directed\+Graph}]{obj\+\_\+graph, }
+\item[{Directed\+Graph \&}]{obj\+\_\+graph, }
+\item[{Directed\+Graph \&}]{tlt\+\_\+graph, }
 \item[{size\+\_\+t}]{frame\+\_\+count}
 \end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_a5f618dde61f100d4371578aa36a01a7c}{}\label{classalgo_1_1TwoStage_a5f618dde61f100d4371578aa36a01a7c}
+)}\hypertarget{classalgo_1_1TwoStage_ae14cf79859b4275c862d6750b6bc6837}{}\label{classalgo_1_1TwoStage_ae14cf79859b4275c862d6750b6bc6837}
 Reduces the object graph into linked tracklets. 
 \begin{DoxyParams}{Parameters}
 {\em obj\+\_\+graph} & The object graph to reduce \\
 \hline
+{\em tlt\+\_\+graph} & The graph to write the tracklets in \\
+\hline
 {\em frame\+\_\+count} & The frame count of the object graph \\
 \hline
 \end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The created graph containing the tracklet data 
-\end{DoxyReturn}
 \index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Extract\+Tracks@{Extract\+Tracks}}
 \index{Extract\+Tracks@{Extract\+Tracks}!algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}}
-\subsubsection[{\texorpdfstring{Extract\+Tracks()}{ExtractTracks()}}]{\setlength{\rightskip}{0pt plus 5cm}std\+::vector$<$ {\bf core\+::\+Tracklet} $>$ algo\+::\+Two\+Stage\+::\+Extract\+Tracks (
+\subsubsection[{\texorpdfstring{Extract\+Tracks(\+Directed\+Graph \&tlt\+\_\+graph, size\+\_\+t depth, std\+::vector$<$ core\+::\+Tracklet\+Ptr $>$ \&tracks)}{ExtractTracks(DirectedGraph \&tlt\_graph, size\_t depth, std::vector< core::TrackletPtr > \&tracks)}}]{\setlength{\rightskip}{0pt plus 5cm}void algo\+::\+Two\+Stage\+::\+Extract\+Tracks (
 \begin{DoxyParamCaption}
-{}
+\item[{Directed\+Graph \&}]{tlt\+\_\+graph, }
+\item[{size\+\_\+t}]{depth, }
+\item[{std\+::vector$<$ core\+::\+Tracklet\+Ptr $>$ \&}]{tracks}
 \end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_af61470d4a2ed751844ba2adc3f41451b}{}\label{classalgo_1_1TwoStage_af61470d4a2ed751844ba2adc3f41451b}
-Extracts the finished tracks from the last created tracklet graph. \begin{DoxyReturn}{Returns}
-The vector of finished object tracks 
-\end{DoxyReturn}
-\index{algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}!Extract\+Tracks@{Extract\+Tracks}}
-\index{Extract\+Tracks@{Extract\+Tracks}!algo\+::\+Two\+Stage@{algo\+::\+Two\+Stage}}
-\subsubsection[{\texorpdfstring{Extract\+Tracks(\+Directed\+Graph tlt\+\_\+graph)}{ExtractTracks(DirectedGraph tlt\_graph)}}]{\setlength{\rightskip}{0pt plus 5cm}std\+::vector$<$ {\bf core\+::\+Tracklet} $>$ algo\+::\+Two\+Stage\+::\+Extract\+Tracks (
-\begin{DoxyParamCaption}
-\item[{Directed\+Graph}]{tlt\+\_\+graph}
-\end{DoxyParamCaption}
-)}\hypertarget{classalgo_1_1TwoStage_a4e1d9fde2480e607ae532d0dae84d3ea}{}\label{classalgo_1_1TwoStage_a4e1d9fde2480e607ae532d0dae84d3ea}
+)}\hypertarget{classalgo_1_1TwoStage_a09168d0ace15d689c9d594ca16b93c38}{}\label{classalgo_1_1TwoStage_a09168d0ace15d689c9d594ca16b93c38}
 Extracts the finished tracks from the given tracklet graph. 
 \begin{DoxyParams}{Parameters}
 {\em tlt\+\_\+graph} & The tracklet graph to extract from \\
 \hline
+{\em depth} & The depth to flatten the tracklets to \\
+\hline
+{\em tracks} & The vector to write the extracted tracks in \\
+\hline
 \end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The vector of finished object tracks 
-\end{DoxyReturn}
 
 
 The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}

+ 17 - 31
Documentation/latex/classcore_1_1DetectionSequence.tex

@@ -7,25 +7,20 @@
 \subsection*{Public Member Functions}
 \begin{DoxyCompactItemize}
 \item 
-\hyperlink{classcore_1_1DetectionSequence_ad2183e28df5cb27883d396dfa3b40b6a}{Detection\+Sequence} (std\+::string name)
+\hyperlink{classcore_1_1DetectionSequence_a2cbdc8db34fe87932653826fc8a3c1f7}{Detection\+Sequence} (const std\+::string \&name=\char`\"{}Detection\+Sequence\char`\"{})
 \item 
-void \hyperlink{classcore_1_1DetectionSequence_a933757fe1f1093ac4be0d9be9a79d394}{Add\+Object} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} object\+\_\+data)
+void \hyperlink{classcore_1_1DetectionSequence_a3cc0fdf3281f34985f4762086293db72}{Add\+Object} (Object\+Data\+Ptr object\+\_\+data)
 \item 
 void \hyperlink{classcore_1_1DetectionSequence_ab62569a3e51d58457057deba12ef6892}{Clear} ()
 \item 
 std\+::string \hyperlink{classcore_1_1DetectionSequence_a8a1af3dee89766d06f4a4f74044082ad}{Get\+Name} () const
 \item 
-\hyperlink{classcore_1_1ObjectData}{Object\+Data} \hyperlink{classcore_1_1DetectionSequence_a8d562d3ea68249306825655efc703ee1}{Get\+Object} (size\+\_\+t frame\+\_\+index, size\+\_\+t object\+\_\+index)
+Object\+Data\+Ptr \hyperlink{classcore_1_1DetectionSequence_aab2b72c6e0a9ee14dba99d07116c1d86}{Get\+Object} (size\+\_\+t frame\+\_\+index, size\+\_\+t object\+\_\+index) const
 \item 
 size\+\_\+t \hyperlink{classcore_1_1DetectionSequence_a2417e4f2652a39245d6f2faa0ce19571}{Get\+Frame\+Count} () const
 \item 
 size\+\_\+t \hyperlink{classcore_1_1DetectionSequence_a99a1b693215c386c4716df12f6040100}{Get\+Object\+Count} (size\+\_\+t frame\+\_\+index) const
 \end{DoxyCompactItemize}
-\subsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item 
-virtual void \hyperlink{classcore_1_1DetectionSequence_ad8e771ebdcfe84a91da5eb71cb98a410}{Print} (std\+::ostream \&os) const
-\end{DoxyCompactItemize}
 \subsection*{Friends}
 \begin{DoxyCompactItemize}
 \item 
@@ -39,11 +34,11 @@ Class for storing a full sequence of frame, each with multiple detected objects.
 \subsection{Constructor \& Destructor Documentation}
 \index{core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}!Detection\+Sequence@{Detection\+Sequence}}
 \index{Detection\+Sequence@{Detection\+Sequence}!core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}}
-\subsubsection[{\texorpdfstring{Detection\+Sequence(std\+::string name)}{DetectionSequence(std::string name)}}]{\setlength{\rightskip}{0pt plus 5cm}core\+::\+Detection\+Sequence\+::\+Detection\+Sequence (
+\subsubsection[{\texorpdfstring{Detection\+Sequence(const std\+::string \&name=""Detection\+Sequence"")}{DetectionSequence(const std::string \&name="DetectionSequence")}}]{\setlength{\rightskip}{0pt plus 5cm}core\+::\+Detection\+Sequence\+::\+Detection\+Sequence (
 \begin{DoxyParamCaption}
-\item[{std\+::string}]{name}
+\item[{const std\+::string \&}]{name = {\ttfamily \char`\"{}DetectionSequence\char`\"{}}}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1DetectionSequence_ad2183e28df5cb27883d396dfa3b40b6a}{}\label{classcore_1_1DetectionSequence_ad2183e28df5cb27883d396dfa3b40b6a}
+)}\hypertarget{classcore_1_1DetectionSequence_a2cbdc8db34fe87932653826fc8a3c1f7}{}\label{classcore_1_1DetectionSequence_a2cbdc8db34fe87932653826fc8a3c1f7}
 Creates a detection sequence with the given name. 
 \begin{DoxyParams}{Parameters}
 {\em name} & The name of this sequence \\
@@ -54,11 +49,11 @@ Creates a detection sequence with the given name.
 \subsection{Member Function Documentation}
 \index{core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}!Add\+Object@{Add\+Object}}
 \index{Add\+Object@{Add\+Object}!core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}}
-\subsubsection[{\texorpdfstring{Add\+Object(\+Object\+Data object\+\_\+data)}{AddObject(ObjectData object\_data)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Detection\+Sequence\+::\+Add\+Object (
+\subsubsection[{\texorpdfstring{Add\+Object(\+Object\+Data\+Ptr object\+\_\+data)}{AddObject(ObjectDataPtr object\_data)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Detection\+Sequence\+::\+Add\+Object (
 \begin{DoxyParamCaption}
-\item[{{\bf Object\+Data}}]{object\+\_\+data}
+\item[{Object\+Data\+Ptr}]{object\+\_\+data}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1DetectionSequence_a933757fe1f1093ac4be0d9be9a79d394}{}\label{classcore_1_1DetectionSequence_a933757fe1f1093ac4be0d9be9a79d394}
+)}\hypertarget{classcore_1_1DetectionSequence_a3cc0fdf3281f34985f4762086293db72}{}\label{classcore_1_1DetectionSequence_a3cc0fdf3281f34985f4762086293db72}
 Adds a new object, creates a new frame vector if the given objects frame index is greater than the current frame vector size. 
 \begin{DoxyParams}{Parameters}
 {\em object\+\_\+data} & The object to add \\
@@ -93,19 +88,22 @@ The name
 \end{DoxyReturn}
 \index{core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}!Get\+Object@{Get\+Object}}
 \index{Get\+Object@{Get\+Object}!core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}}
-\subsubsection[{\texorpdfstring{Get\+Object(size\+\_\+t frame\+\_\+index, size\+\_\+t object\+\_\+index)}{GetObject(size\_t frame\_index, size\_t object\_index)}}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Object\+Data} core\+::\+Detection\+Sequence\+::\+Get\+Object (
+\subsubsection[{\texorpdfstring{Get\+Object(size\+\_\+t frame\+\_\+index, size\+\_\+t object\+\_\+index) const}{GetObject(size\_t frame\_index, size\_t object\_index) const}}]{\setlength{\rightskip}{0pt plus 5cm}Object\+Data\+Ptr core\+::\+Detection\+Sequence\+::\+Get\+Object (
 \begin{DoxyParamCaption}
 \item[{size\+\_\+t}]{frame\+\_\+index, }
 \item[{size\+\_\+t}]{object\+\_\+index}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1DetectionSequence_a8d562d3ea68249306825655efc703ee1}{}\label{classcore_1_1DetectionSequence_a8d562d3ea68249306825655efc703ee1}
-Gets the object in the given frame with the given index. 
+) const}\hypertarget{classcore_1_1DetectionSequence_aab2b72c6e0a9ee14dba99d07116c1d86}{}\label{classcore_1_1DetectionSequence_aab2b72c6e0a9ee14dba99d07116c1d86}
+Gets a pointer to the object in the given frame with the given index. 
 \begin{DoxyParams}{Parameters}
 {\em frame\+\_\+index} & The frame to get the object from \\
 \hline
 {\em object\+\_\+index} & The objects index in the corresponding frame \\
 \hline
 \end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A pointer to the stored object data 
+\end{DoxyReturn}
 \index{core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}!Get\+Object\+Count@{Get\+Object\+Count}}
 \index{Get\+Object\+Count@{Get\+Object\+Count}!core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}}
 \subsubsection[{\texorpdfstring{Get\+Object\+Count(size\+\_\+t frame\+\_\+index) const}{GetObjectCount(size\_t frame\_index) const}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Detection\+Sequence\+::\+Get\+Object\+Count (
@@ -119,20 +117,8 @@ Gets the object count in the given frame.
 \hline
 \end{DoxyParams}
 \begin{DoxyReturn}{Returns}
-The number of object in this frame 
+The number of objects in this frame 
 \end{DoxyReturn}
-\index{core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}!Print@{Print}}
-\index{Print@{Print}!core\+::\+Detection\+Sequence@{core\+::\+Detection\+Sequence}}
-\subsubsection[{\texorpdfstring{Print(std\+::ostream \&os) const}{Print(std::ostream \&os) const}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Detection\+Sequence\+::\+Print (
-\begin{DoxyParamCaption}
-\item[{std\+::ostream \&}]{os}
-\end{DoxyParamCaption}
-) const\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1DetectionSequence_ad8e771ebdcfe84a91da5eb71cb98a410}{}\label{classcore_1_1DetectionSequence_ad8e771ebdcfe84a91da5eb71cb98a410}
-Used in the $<$$<$ operator 
-\begin{DoxyParams}{Parameters}
-{\em os} & The stream to write to \\
-\hline
-\end{DoxyParams}
 
 
 \subsection{Friends And Related Function Documentation}
@@ -144,7 +130,7 @@ Used in the $<$$<$ operator
 \item[{const {\bf Detection\+Sequence} \&}]{obj}
 \end{DoxyParamCaption}
 )\hspace{0.3cm}{\ttfamily [friend]}}\hypertarget{classcore_1_1DetectionSequence_a557132cfbb170daf47f5a890a0c5bac0}{}\label{classcore_1_1DetectionSequence_a557132cfbb170daf47f5a890a0c5bac0}
-Overrides the $<$$<$ operator for easy output. Calls the print method. 
+Overrides the $<$$<$ operator for easy output. 
 \begin{DoxyParams}{Parameters}
 {\em os} & The stream to write to \\
 \hline

+ 21 - 11
Documentation/latex/classcore_1_1ObjectData.eps

@@ -5,7 +5,7 @@
 %%For: 
 %Magnification: 1.00
 %%Orientation: Portrait
-%%BoundingBox: 0 0 500 142.857143
+%%BoundingBox: 0 0 500 125.000000
 %%Pages: 0
 %%BeginSetup
 %%EndSetup
@@ -19,13 +19,13 @@
 /marginwidth 10 def
 /distx 20 def
 /disty 40 def
-/boundaspect 3.500000 def  % aspect ratio of the BoundingBox (width/height)
+/boundaspect 4.000000 def  % aspect ratio of the BoundingBox (width/height)
 /boundx 500 def
 /boundy boundx boundaspect div def
 /xspacing 0 def
 /yspacing 0 def
-/rows 2 def
-/cols 2 def
+/rows 3 def
+/cols 3 def
 /scalefactor 0 def
 /boxfont /Times-Roman findfont fontheight scalefont def
 
@@ -174,8 +174,10 @@
 boxfont setfont
 1 boundaspect scale
 (core::ObjectData) cw
+(core::ObjectData3D) cw
 (core::ObjectDataMap) cw
 (core::Tracklet) cw
+(core::ObjectDataAngular) cw
 /boxwidth boxwidth marginwidth 2 mul add def
 /xspacing boxwidth distx add def
 /yspacing boxheight disty add def
@@ -187,17 +189,25 @@ boundx scalefactor div boundy scalefactor div scale
 
 % ----- classes -----
 
- (core::ObjectData) 0.500000 1.000000 box
- (core::ObjectDataMap) 0.000000 0.000000 box
- (core::Tracklet) 1.000000 0.000000 box
+ (core::ObjectData) 1.000000 2.000000 box
+ (core::ObjectData3D) 0.000000 1.000000 box
+ (core::ObjectDataMap) 1.000000 1.000000 box
+ (core::Tracklet) 2.000000 1.000000 box
+ (core::ObjectDataAngular) 0.000000 0.000000 box
 
 % ----- relations -----
 
 solid
-1 0.500000 0.250000 out
+1 1.000000 1.250000 out
 solid
-0.000000 1.000000 1.000000 conn
+0.000000 2.000000 2.000000 conn
 solid
-0 0.000000 0.750000 in
+0 0.000000 1.750000 in
+solid
+1 0.000000 0.250000 out
+solid
+0 1.000000 1.750000 in
 solid
-0 1.000000 0.750000 in
+0 2.000000 1.750000 in
+solid
+0 0.000000 0.750000 in

BIN
Documentation/latex/classcore_1_1ObjectData.pdf


+ 85 - 32
Documentation/latex/classcore_1_1ObjectData.tex

@@ -7,7 +7,7 @@
 Inheritance diagram for core\+:\+:Object\+Data\+:\begin{figure}[H]
 \begin{center}
 \leavevmode
-\includegraphics[height=2.000000cm]{classcore_1_1ObjectData}
+\includegraphics[height=3.000000cm]{classcore_1_1ObjectData}
 \end{center}
 \end{figure}
 \subsection*{Public Member Functions}
@@ -19,19 +19,19 @@ Inheritance diagram for core\+:\+:Object\+Data\+:\begin{figure}[H]
 \item 
 std\+::size\+\_\+t \hyperlink{classcore_1_1ObjectData_a1151e9215baf315f4b98f696f4271162}{Get\+Frame\+Index} () const
 \item 
+void \hyperlink{classcore_1_1ObjectData_aedfe00fa37d5ac7ef554bda746931148}{Set\+Frame\+Index} (size\+\_\+t index)
+\item 
+void \hyperlink{classcore_1_1ObjectData_a737216c2689aefa216c1c842922d7dd8}{Set\+Detection\+Score} (double score)
+\item 
+double \hyperlink{classcore_1_1ObjectData_ae9208bfeee72238e2d635dfab368c09a}{Get\+Detection\+Score} ()
+\item 
 bool \hyperlink{classcore_1_1ObjectData_a2880d710cfa520e9c0453e2a6729c0e2}{Is\+Virtual} () const
 \item 
-virtual double \hyperlink{classcore_1_1ObjectData_a01f04d64b1e62f567d819a8fcbe38319}{Compare\+To} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} $\ast$obj)
-\end{DoxyCompactItemize}
-\subsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
+virtual double \hyperlink{classcore_1_1ObjectData_afbf7a1e87235f1b204d4d2eb8a37a9a6}{Compare\+To} (Object\+Data\+Ptr obj) const
 \item 
-virtual void \hyperlink{classcore_1_1ObjectData_aa26949b0456068d67802d9f6067aa657}{Print} (std\+::ostream \&os) const
-\end{DoxyCompactItemize}
-\subsection*{Protected Attributes}
-\begin{DoxyCompactItemize}
+virtual Object\+Data\+Ptr \hyperlink{classcore_1_1ObjectData_ad681915317decab76c384a635fc8444e}{Interpolate} (Object\+Data\+Ptr obj, double fraction) const
 \item 
-std\+::size\+\_\+t \hyperlink{classcore_1_1ObjectData_ade1423dbad9323431d22750121fa59e5}{frame\+\_\+index\+\_\+}
+virtual void \hyperlink{classcore_1_1ObjectData_aae2c4fceddc529570dbe8909309f9961}{Visualize} (cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const
 \end{DoxyCompactItemize}
 \subsection*{Friends}
 \begin{DoxyCompactItemize}
@@ -51,7 +51,7 @@ Base class for all detected objects. Stores the corresponding frame index.
 {}
 \end{DoxyParamCaption}
 )}\hypertarget{classcore_1_1ObjectData_a7f47a396a3b9e8c12a1557c8156b8ff9}{}\label{classcore_1_1ObjectData_a7f47a396a3b9e8c12a1557c8156b8ff9}
-Creates a new empty \hyperlink{classcore_1_1ObjectData}{Object\+Data} (e.\+g. for virtual objects) \index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Object\+Data@{Object\+Data}}
+Creates a new empty virtual \hyperlink{classcore_1_1ObjectData}{Object\+Data} \index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Object\+Data@{Object\+Data}}
 \index{Object\+Data@{Object\+Data}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
 \subsubsection[{\texorpdfstring{Object\+Data(std\+::size\+\_\+t frame\+\_\+index)}{ObjectData(std::size\_t frame\_index)}}]{\setlength{\rightskip}{0pt plus 5cm}core\+::\+Object\+Data\+::\+Object\+Data (
 \begin{DoxyParamCaption}
@@ -68,11 +68,11 @@ Creates a new \hyperlink{classcore_1_1ObjectData}{Object\+Data} with the given f
 \subsection{Member Function Documentation}
 \index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Compare\+To@{Compare\+To}}
 \index{Compare\+To@{Compare\+To}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
-\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data $\ast$obj)}{CompareTo(ObjectData *obj)}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+::\+Compare\+To (
+\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data\+Ptr obj) const}{CompareTo(ObjectDataPtr obj) const}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+::\+Compare\+To (
 \begin{DoxyParamCaption}
-\item[{{\bf Object\+Data} $\ast$}]{obj}
+\item[{Object\+Data\+Ptr}]{obj}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectData_a01f04d64b1e62f567d819a8fcbe38319}{}\label{classcore_1_1ObjectData_a01f04d64b1e62f567d819a8fcbe38319}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectData_afbf7a1e87235f1b204d4d2eb8a37a9a6}{}\label{classcore_1_1ObjectData_afbf7a1e87235f1b204d4d2eb8a37a9a6}
 Compares this object with the given object. 
 \begin{DoxyParams}{Parameters}
 {\em obj} & A pointer to the object to compare this object to \\
@@ -83,8 +83,18 @@ A double value indicating the comparison result
 \end{DoxyReturn}
 
 
-Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_ad00d1998652e4d2ffa2629128c9c2947}{core\+::\+Object\+Data\+Map}, and \hyperlink{classcore_1_1Tracklet_ab45f28ba6abde0944820ac614560ea89}{core\+::\+Tracklet}.
+Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_a7fcc9ef5b684f14d33711348610d9b74}{core\+::\+Object\+Data\+Map}, \hyperlink{classcore_1_1Tracklet_a0357f2fa173941800571432dcbc96dc2}{core\+::\+Tracklet}, \hyperlink{classcore_1_1ObjectData3D_abef3e4e7a0dc121d8a403d91964be576}{core\+::\+Object\+Data3D}, and \hyperlink{classcore_1_1ObjectDataAngular_a2932240c6c082b76f2c04723cdf3e4f9}{core\+::\+Object\+Data\+Angular}.
 
+\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Get\+Detection\+Score@{Get\+Detection\+Score}}
+\index{Get\+Detection\+Score@{Get\+Detection\+Score}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
+\subsubsection[{\texorpdfstring{Get\+Detection\+Score()}{GetDetectionScore()}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+::\+Get\+Detection\+Score (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\hypertarget{classcore_1_1ObjectData_ae9208bfeee72238e2d635dfab368c09a}{}\label{classcore_1_1ObjectData_ae9208bfeee72238e2d635dfab368c09a}
+Gets the detection score \begin{DoxyReturn}{Returns}
+The detection score 
+\end{DoxyReturn}
 \index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Get\+Frame\+Index@{Get\+Frame\+Index}}
 \index{Get\+Frame\+Index@{Get\+Frame\+Index}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
 \subsubsection[{\texorpdfstring{Get\+Frame\+Index() const}{GetFrameIndex() const}}]{\setlength{\rightskip}{0pt plus 5cm}std\+::size\+\_\+t core\+::\+Object\+Data\+::\+Get\+Frame\+Index (
@@ -92,9 +102,31 @@ Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_ad00d1998652e4d2ffa262912
 {}
 \end{DoxyParamCaption}
 ) const}\hypertarget{classcore_1_1ObjectData_a1151e9215baf315f4b98f696f4271162}{}\label{classcore_1_1ObjectData_a1151e9215baf315f4b98f696f4271162}
-Getter for the frame index \begin{DoxyReturn}{Returns}
+Gets the frame index \begin{DoxyReturn}{Returns}
 The frame index 
 \end{DoxyReturn}
+\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Interpolate@{Interpolate}}
+\index{Interpolate@{Interpolate}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
+\subsubsection[{\texorpdfstring{Interpolate(\+Object\+Data\+Ptr obj, double fraction) const}{Interpolate(ObjectDataPtr obj, double fraction) const}}]{\setlength{\rightskip}{0pt plus 5cm}Object\+Data\+Ptr core\+::\+Object\+Data\+::\+Interpolate (
+\begin{DoxyParamCaption}
+\item[{Object\+Data\+Ptr}]{obj, }
+\item[{double}]{fraction}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectData_ad681915317decab76c384a635fc8444e}{}\label{classcore_1_1ObjectData_ad681915317decab76c384a635fc8444e}
+Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. 
+\begin{DoxyParams}{Parameters}
+{\em obj} & A pointer to the target object \\
+\hline
+{\em fraction} & Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The interpolated object 
+\end{DoxyReturn}
+
+
+Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_ac6a739ea0509371929dbe7cbac601a3e}{core\+::\+Object\+Data\+Map}, \hyperlink{classcore_1_1Tracklet_a5fb5e6ab9df668c3477e8b52f115b188}{core\+::\+Tracklet}, \hyperlink{classcore_1_1ObjectData3D_ae57a5d8f7a02a403653c82c3b73a73d2}{core\+::\+Object\+Data3D}, and \hyperlink{classcore_1_1ObjectDataAngular_a42962dd1f994b2577133450e755d586e}{core\+::\+Object\+Data\+Angular}.
+
 \index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Is\+Virtual@{Is\+Virtual}}
 \index{Is\+Virtual@{Is\+Virtual}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
 \subsubsection[{\texorpdfstring{Is\+Virtual() const}{IsVirtual() const}}]{\setlength{\rightskip}{0pt plus 5cm}bool core\+::\+Object\+Data\+::\+Is\+Virtual (
@@ -103,23 +135,50 @@ The frame index
 \end{DoxyParamCaption}
 ) const}\hypertarget{classcore_1_1ObjectData_a2880d710cfa520e9c0453e2a6729c0e2}{}\label{classcore_1_1ObjectData_a2880d710cfa520e9c0453e2a6729c0e2}
 Is this node considered a virtual node \begin{DoxyReturn}{Returns}
-Whether this node is virtual 
+True, if this node is virtual 
 \end{DoxyReturn}
-\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Print@{Print}}
-\index{Print@{Print}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
-\subsubsection[{\texorpdfstring{Print(std\+::ostream \&os) const}{Print(std::ostream \&os) const}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+::\+Print (
+\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Set\+Detection\+Score@{Set\+Detection\+Score}}
+\index{Set\+Detection\+Score@{Set\+Detection\+Score}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
+\subsubsection[{\texorpdfstring{Set\+Detection\+Score(double score)}{SetDetectionScore(double score)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+::\+Set\+Detection\+Score (
 \begin{DoxyParamCaption}
-\item[{std\+::ostream \&}]{os}
+\item[{double}]{score}
 \end{DoxyParamCaption}
-) const\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectData_aa26949b0456068d67802d9f6067aa657}{}\label{classcore_1_1ObjectData_aa26949b0456068d67802d9f6067aa657}
-Used in the $<$$<$ operator 
+)}\hypertarget{classcore_1_1ObjectData_a737216c2689aefa216c1c842922d7dd8}{}\label{classcore_1_1ObjectData_a737216c2689aefa216c1c842922d7dd8}
+Sets the detection score 
 \begin{DoxyParams}{Parameters}
-{\em os} & The stream to write to \\
+{\em score} & The detection score \\
+\hline
+\end{DoxyParams}
+\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Set\+Frame\+Index@{Set\+Frame\+Index}}
+\index{Set\+Frame\+Index@{Set\+Frame\+Index}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
+\subsubsection[{\texorpdfstring{Set\+Frame\+Index(size\+\_\+t index)}{SetFrameIndex(size\_t index)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+::\+Set\+Frame\+Index (
+\begin{DoxyParamCaption}
+\item[{size\+\_\+t}]{index}
+\end{DoxyParamCaption}
+)}\hypertarget{classcore_1_1ObjectData_aedfe00fa37d5ac7ef554bda746931148}{}\label{classcore_1_1ObjectData_aedfe00fa37d5ac7ef554bda746931148}
+Sets the frame index 
+\begin{DoxyParams}{Parameters}
+{\em index} & The new frame index \\
+\hline
+\end{DoxyParams}
+\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!Visualize@{Visualize}}
+\index{Visualize@{Visualize}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
+\subsubsection[{\texorpdfstring{Visualize(cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const}{Visualize(cv::Mat \&image, cv::Scalar \&color) const}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+::\+Visualize (
+\begin{DoxyParamCaption}
+\item[{cv\+::\+Mat \&}]{image, }
+\item[{cv\+::\+Scalar \&}]{color}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectData_aae2c4fceddc529570dbe8909309f9961}{}\label{classcore_1_1ObjectData_aae2c4fceddc529570dbe8909309f9961}
+Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. 
+\begin{DoxyParams}{Parameters}
+{\em image} & The image to write into \\
+\hline
+{\em color} & The color to use \\
 \hline
 \end{DoxyParams}
 
 
-Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_a16fbcc2b99feb1545e1a66f828680b1a}{core\+::\+Object\+Data\+Map}.
+Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_a8a0f71318dd58e0d527a63b904c6afac}{core\+::\+Object\+Data\+Map}, \hyperlink{classcore_1_1Tracklet_a85f92a4059bf89f24a83f28935675181}{core\+::\+Tracklet}, \hyperlink{classcore_1_1ObjectData3D_a86216fae3dc86f1107eb1b4530b574d2}{core\+::\+Object\+Data3D}, and \hyperlink{classcore_1_1ObjectDataAngular_acb4265f6de511238460df118148bc85c}{core\+::\+Object\+Data\+Angular}.
 
 
 
@@ -132,7 +191,7 @@ Reimplemented in \hyperlink{classcore_1_1ObjectDataMap_a16fbcc2b99feb1545e1a66f8
 \item[{const {\bf Object\+Data} \&}]{obj}
 \end{DoxyParamCaption}
 )\hspace{0.3cm}{\ttfamily [friend]}}\hypertarget{classcore_1_1ObjectData_a56fc9b6184428bf4d80826bbb9fe4c6f}{}\label{classcore_1_1ObjectData_a56fc9b6184428bf4d80826bbb9fe4c6f}
-Overrides the $<$$<$ operator for easy output. Calls the print method. 
+Overrides the $<$$<$ operator for custom output. Calls the print method. 
 \begin{DoxyParams}{Parameters}
 {\em os} & The stream to write to \\
 \hline
@@ -144,12 +203,6 @@ The stream written to
 \end{DoxyReturn}
 
 
-\subsection{Member Data Documentation}
-\index{core\+::\+Object\+Data@{core\+::\+Object\+Data}!frame\+\_\+index\+\_\+@{frame\+\_\+index\+\_\+}}
-\index{frame\+\_\+index\+\_\+@{frame\+\_\+index\+\_\+}!core\+::\+Object\+Data@{core\+::\+Object\+Data}}
-\subsubsection[{\texorpdfstring{frame\+\_\+index\+\_\+}{frame\_index\_}}]{\setlength{\rightskip}{0pt plus 5cm}std\+::size\+\_\+t core\+::\+Object\+Data\+::frame\+\_\+index\+\_\+\hspace{0.3cm}{\ttfamily [protected]}}\hypertarget{classcore_1_1ObjectData_ade1423dbad9323431d22750121fa59e5}{}\label{classcore_1_1ObjectData_ade1423dbad9323431d22750121fa59e5}
-The frame the object was detected in 
-
 The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
 \item 
 core/Object\+Data.\+h\item 

BIN
Documentation/latex/classcore_1_1ObjectDataMap.pdf


+ 52 - 46
Documentation/latex/classcore_1_1ObjectDataMap.tex

@@ -25,20 +25,16 @@ double \hyperlink{classcore_1_1ObjectDataMap_a276c89da6f3318d2baa2e9678e9508f7}{
 \item 
 double \hyperlink{classcore_1_1ObjectDataMap_a4cd92ab91559063b4e6ab12fec53cc05}{Get\+Weight} (std\+::string key)
 \item 
-void \hyperlink{classcore_1_1ObjectDataMap_a61eb1326be41c3411dc0c1757f360591}{Put\+Value\+Weight} (std\+::string key, double value, double weight)
+void \hyperlink{classcore_1_1ObjectDataMap_a2d104f34385edf8c3fdfda7390c28bf5}{Put} (std\+::string key, double value, double weight)
 \item 
-void \hyperlink{classcore_1_1ObjectDataMap_a8c2ef0cebadf12e4aa67056823020cc3}{Put\+Value\+Weight} (std\+::string key, std\+::pair$<$ double, double $>$ value\+\_\+weight)
+void \hyperlink{classcore_1_1ObjectDataMap_a5cdd71b9124b5ca41419a0049fbbdaa1}{Put} (std\+::string key, std\+::pair$<$ double, double $>$ value\+\_\+weight)
 \item 
-virtual double \hyperlink{classcore_1_1ObjectDataMap_ad00d1998652e4d2ffa2629128c9c2947}{Compare\+To} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} $\ast$obj)
+virtual double \hyperlink{classcore_1_1ObjectDataMap_a7fcc9ef5b684f14d33711348610d9b74}{Compare\+To} (Object\+Data\+Ptr obj) const override
 \item 
-virtual double \hyperlink{classcore_1_1ObjectDataMap_a38ec46bab19a5770cecb00533e8d37c3}{Compare\+To} (\hyperlink{classcore_1_1ObjectDataMap}{Object\+Data\+Map} $\ast$obj)
-\end{DoxyCompactItemize}
-\subsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
+virtual Object\+Data\+Ptr \hyperlink{classcore_1_1ObjectDataMap_ac6a739ea0509371929dbe7cbac601a3e}{Interpolate} (Object\+Data\+Ptr obj, double fraction) const override
 \item 
-virtual void \hyperlink{classcore_1_1ObjectDataMap_a16fbcc2b99feb1545e1a66f828680b1a}{Print} (std\+::ostream \&os) const
+virtual void \hyperlink{classcore_1_1ObjectDataMap_a8a0f71318dd58e0d527a63b904c6afac}{Visualize} (cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const override
 \end{DoxyCompactItemize}
-\subsection*{Additional Inherited Members}
 
 
 \subsection{Detailed Description}
@@ -119,38 +115,23 @@ Creates a object data map with the given keys and value-\/weight pairs.
 \subsection{Member Function Documentation}
 \index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Compare\+To@{Compare\+To}}
 \index{Compare\+To@{Compare\+To}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
-\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data $\ast$obj)}{CompareTo(ObjectData *obj)}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+Map\+::\+Compare\+To (
+\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data\+Ptr obj) const override}{CompareTo(ObjectDataPtr obj) const override}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+Map\+::\+Compare\+To (
 \begin{DoxyParamCaption}
-\item[{{\bf Object\+Data} $\ast$}]{obj}
+\item[{Object\+Data\+Ptr}]{obj}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_ad00d1998652e4d2ffa2629128c9c2947}{}\label{classcore_1_1ObjectDataMap_ad00d1998652e4d2ffa2629128c9c2947}
-Compares this object with the given object by calculating the difference in every value and applies the corresponding weight to that difference. Than all weighted differences are summed up. 
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_a7fcc9ef5b684f14d33711348610d9b74}{}\label{classcore_1_1ObjectDataMap_a7fcc9ef5b684f14d33711348610d9b74}
+Compares this object with the given object. 
 \begin{DoxyParams}{Parameters}
 {\em obj} & A pointer to the object to compare this object to \\
 \hline
 \end{DoxyParams}
 \begin{DoxyReturn}{Returns}
-The summed up weighted differences 
+A double value indicating the comparison result 
 \end{DoxyReturn}
 
 
-Reimplemented from \hyperlink{classcore_1_1ObjectData_a01f04d64b1e62f567d819a8fcbe38319}{core\+::\+Object\+Data}.
+Reimplemented from \hyperlink{classcore_1_1ObjectData_afbf7a1e87235f1b204d4d2eb8a37a9a6}{core\+::\+Object\+Data}.
 
-\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Compare\+To@{Compare\+To}}
-\index{Compare\+To@{Compare\+To}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
-\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data\+Map $\ast$obj)}{CompareTo(ObjectDataMap *obj)}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+Map\+::\+Compare\+To (
-\begin{DoxyParamCaption}
-\item[{{\bf Object\+Data\+Map} $\ast$}]{obj}
-\end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_a38ec46bab19a5770cecb00533e8d37c3}{}\label{classcore_1_1ObjectDataMap_a38ec46bab19a5770cecb00533e8d37c3}
-Compares this object with the given object by calculating the difference in every value and applies the corresponding weight to that difference. Than all weighted differences are summed up. 
-\begin{DoxyParams}{Parameters}
-{\em obj} & A pointer to the object to compare this object to \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The summed up weighted differences 
-\end{DoxyReturn}
 \index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Get\+Value@{Get\+Value}}
 \index{Get\+Value@{Get\+Value}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
 \subsubsection[{\texorpdfstring{Get\+Value(std\+::string key)}{GetValue(std::string key)}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Object\+Data\+Map\+::\+Get\+Value (
@@ -181,31 +162,37 @@ Gets the weight of the given key.
 \begin{DoxyReturn}{Returns}
 The weight 
 \end{DoxyReturn}
-\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Print@{Print}}
-\index{Print@{Print}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
-\subsubsection[{\texorpdfstring{Print(std\+::ostream \&os) const}{Print(std::ostream \&os) const}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Print (
+\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Interpolate@{Interpolate}}
+\index{Interpolate@{Interpolate}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
+\subsubsection[{\texorpdfstring{Interpolate(\+Object\+Data\+Ptr obj, double fraction) const override}{Interpolate(ObjectDataPtr obj, double fraction) const override}}]{\setlength{\rightskip}{0pt plus 5cm}Object\+Data\+Ptr core\+::\+Object\+Data\+Map\+::\+Interpolate (
 \begin{DoxyParamCaption}
-\item[{std\+::ostream \&}]{os}
+\item[{Object\+Data\+Ptr}]{obj, }
+\item[{double}]{fraction}
 \end{DoxyParamCaption}
-) const\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_a16fbcc2b99feb1545e1a66f828680b1a}{}\label{classcore_1_1ObjectDataMap_a16fbcc2b99feb1545e1a66f828680b1a}
-Used in the $<$$<$ operator 
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_ac6a739ea0509371929dbe7cbac601a3e}{}\label{classcore_1_1ObjectDataMap_ac6a739ea0509371929dbe7cbac601a3e}
+Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. 
 \begin{DoxyParams}{Parameters}
-{\em os} & The stream to write to \\
+{\em obj} & A pointer to the target object \\
+\hline
+{\em fraction} & Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. \\
 \hline
 \end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The interpolated object 
+\end{DoxyReturn}
 
 
-Reimplemented from \hyperlink{classcore_1_1ObjectData_aa26949b0456068d67802d9f6067aa657}{core\+::\+Object\+Data}.
+Reimplemented from \hyperlink{classcore_1_1ObjectData_ad681915317decab76c384a635fc8444e}{core\+::\+Object\+Data}.
 
-\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Put\+Value\+Weight@{Put\+Value\+Weight}}
-\index{Put\+Value\+Weight@{Put\+Value\+Weight}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
-\subsubsection[{\texorpdfstring{Put\+Value\+Weight(std\+::string key, double value, double weight)}{PutValueWeight(std::string key, double value, double weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Put\+Value\+Weight (
+\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Put@{Put}}
+\index{Put@{Put}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
+\subsubsection[{\texorpdfstring{Put(std\+::string key, double value, double weight)}{Put(std::string key, double value, double weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Put (
 \begin{DoxyParamCaption}
 \item[{std\+::string}]{key, }
 \item[{double}]{value, }
 \item[{double}]{weight}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1ObjectDataMap_a61eb1326be41c3411dc0c1757f360591}{}\label{classcore_1_1ObjectDataMap_a61eb1326be41c3411dc0c1757f360591}
+)}\hypertarget{classcore_1_1ObjectDataMap_a2d104f34385edf8c3fdfda7390c28bf5}{}\label{classcore_1_1ObjectDataMap_a2d104f34385edf8c3fdfda7390c28bf5}
 Stores the given value-\/weight pair with the given key. If the key is already stored it will be overridden with the new pair. 
 \begin{DoxyParams}{Parameters}
 {\em key} & The key to store the value-\/weight pair at \\
@@ -215,14 +202,14 @@ Stores the given value-\/weight pair with the given key. If the key is already s
 {\em weight} & The weight of the value-\/weight pair \\
 \hline
 \end{DoxyParams}
-\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Put\+Value\+Weight@{Put\+Value\+Weight}}
-\index{Put\+Value\+Weight@{Put\+Value\+Weight}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
-\subsubsection[{\texorpdfstring{Put\+Value\+Weight(std\+::string key, std\+::pair$<$ double, double $>$ value\+\_\+weight)}{PutValueWeight(std::string key, std::pair< double, double > value\_weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Put\+Value\+Weight (
+\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Put@{Put}}
+\index{Put@{Put}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
+\subsubsection[{\texorpdfstring{Put(std\+::string key, std\+::pair$<$ double, double $>$ value\+\_\+weight)}{Put(std::string key, std::pair< double, double > value\_weight)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Put (
 \begin{DoxyParamCaption}
 \item[{std\+::string}]{key, }
 \item[{std\+::pair$<$ double, double $>$}]{value\+\_\+weight}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1ObjectDataMap_a8c2ef0cebadf12e4aa67056823020cc3}{}\label{classcore_1_1ObjectDataMap_a8c2ef0cebadf12e4aa67056823020cc3}
+)}\hypertarget{classcore_1_1ObjectDataMap_a5cdd71b9124b5ca41419a0049fbbdaa1}{}\label{classcore_1_1ObjectDataMap_a5cdd71b9124b5ca41419a0049fbbdaa1}
 Stores the given value-\/weight pair with the given key. If the key is already stored it will be overridden with the new pair. 
 \begin{DoxyParams}{Parameters}
 {\em key} & The key to store the value-\/weight pair at \\
@@ -230,6 +217,25 @@ Stores the given value-\/weight pair with the given key. If the key is already s
 {\em value\+\_\+weight} & The value-\/weight pair \\
 \hline
 \end{DoxyParams}
+\index{core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}!Visualize@{Visualize}}
+\index{Visualize@{Visualize}!core\+::\+Object\+Data\+Map@{core\+::\+Object\+Data\+Map}}
+\subsubsection[{\texorpdfstring{Visualize(cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const override}{Visualize(cv::Mat \&image, cv::Scalar \&color) const override}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Object\+Data\+Map\+::\+Visualize (
+\begin{DoxyParamCaption}
+\item[{cv\+::\+Mat \&}]{image, }
+\item[{cv\+::\+Scalar \&}]{color}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1ObjectDataMap_a8a0f71318dd58e0d527a63b904c6afac}{}\label{classcore_1_1ObjectDataMap_a8a0f71318dd58e0d527a63b904c6afac}
+Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. 
+\begin{DoxyParams}{Parameters}
+{\em image} & The image to write into \\
+\hline
+{\em color} & The color to use \\
+\hline
+\end{DoxyParams}
+
+
+Reimplemented from \hyperlink{classcore_1_1ObjectData_aae2c4fceddc529570dbe8909309f9961}{core\+::\+Object\+Data}.
+
 
 
 The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}

BIN
Documentation/latex/classcore_1_1Tracklet.pdf


+ 130 - 55
Documentation/latex/classcore_1_1Tracklet.tex

@@ -15,25 +15,32 @@ Inheritance diagram for core\+:\+:Tracklet\+:\begin{figure}[H]
 \item 
 \hyperlink{classcore_1_1Tracklet_aedf59b5a9a068a28bb7570f2a031d4e7}{Tracklet} ()
 \item 
-\hyperlink{classcore_1_1Tracklet_a5a91e01f9cd8404915dce73a0d659064}{Tracklet} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} first\+\_\+object)
+void \hyperlink{classcore_1_1Tracklet_ab0b397f2d0685a927de886dbd36c3bc8}{Add\+Path\+Object} (Object\+Data\+Ptr obj, bool overwrite=false)
 \item 
-void \hyperlink{classcore_1_1Tracklet_ac7f660efeed15a8925482d8d63073bcf}{Add\+Path\+Object\+First} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} obj)
+size\+\_\+t \hyperlink{classcore_1_1Tracklet_a1b963319d6c65614baec02a925f31691}{Get\+First\+Frame\+Index} () const
 \item 
-void \hyperlink{classcore_1_1Tracklet_ad9f018cb26a5fcb1ab00c8f336f24de5}{Add\+Path\+Object\+Last} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} obj)
+size\+\_\+t \hyperlink{classcore_1_1Tracklet_ad8e195b523cf2021394455cc21867d96}{Get\+Last\+Frame\+Index} () const
 \item 
-size\+\_\+t \hyperlink{classcore_1_1Tracklet_ae544127ff912eefeb3698e94da27f91e}{Get\+First\+Frame\+Index} ()
+Object\+Data\+Ptr \hyperlink{classcore_1_1Tracklet_a9758349e8f25c479ffc4b21a90149a81}{Get\+Path\+Object} (size\+\_\+t i)
 \item 
-size\+\_\+t \hyperlink{classcore_1_1Tracklet_abbfc0ac1abd459962142ee96def46731}{Get\+Last\+Frame\+Index} ()
+size\+\_\+t \hyperlink{classcore_1_1Tracklet_aee4298a7b734b2b7533d4536006a8aa8}{Get\+Path\+Object\+Count} () const
 \item 
-\hyperlink{classcore_1_1ObjectData}{Object\+Data} \hyperlink{classcore_1_1Tracklet_a95387d8a86e5b81b5cc1ff479c96494c}{Get\+Path\+Object} (size\+\_\+t i)
+void \hyperlink{classcore_1_1Tracklet_a10b56b608b24ef547550540e5a755bce}{Interpolate\+Missing\+Frames} ()
 \item 
-virtual double \hyperlink{classcore_1_1Tracklet_ab45f28ba6abde0944820ac614560ea89}{Compare\+To} (\hyperlink{classcore_1_1ObjectData}{Object\+Data} $\ast$obj)
+virtual double \hyperlink{classcore_1_1Tracklet_a0357f2fa173941800571432dcbc96dc2}{Compare\+To} (Object\+Data\+Ptr obj) const override
+\item 
+virtual Object\+Data\+Ptr \hyperlink{classcore_1_1Tracklet_a5fb5e6ab9df668c3477e8b52f115b188}{Interpolate} (Object\+Data\+Ptr obj, double fraction) const override
+\item 
+virtual void \hyperlink{classcore_1_1Tracklet_a85f92a4059bf89f24a83f28935675181}{Visualize} (cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const override
+\item 
+void \hyperlink{classcore_1_1Tracklet_a3a2b241939559e47aef701d2e2c4d4bd}{Visualize} (cv\+::\+Mat \&image, cv\+::\+Scalar \&color, size\+\_\+t frame, size\+\_\+t predecessor\+\_\+count, size\+\_\+t successor\+\_\+count) const
+\item 
+void \hyperlink{classcore_1_1Tracklet_a2bdb2f2c8249145808e7029dde6e7df0}{Flatten} ()
 \end{DoxyCompactItemize}
-\subsection*{Additional Inherited Members}
 
 
 \subsection{Detailed Description}
-A class for storing multiple object data objects. The object data objects are handled as a path. 
+A class for storing multiple object data objects. The object data objects are handled as a path. All objects are stored sorted ascending by their frame index. 
 
 \subsection{Constructor \& Destructor Documentation}
 \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Tracklet@{Tracklet}}
@@ -43,55 +50,31 @@ A class for storing multiple object data objects. The object data objects are ha
 {}
 \end{DoxyParamCaption}
 )}\hypertarget{classcore_1_1Tracklet_aedf59b5a9a068a28bb7570f2a031d4e7}{}\label{classcore_1_1Tracklet_aedf59b5a9a068a28bb7570f2a031d4e7}
-Creates a empty tracklet to store path object in. This is N\+OT a virtual object. \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Tracklet@{Tracklet}}
-\index{Tracklet@{Tracklet}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Tracklet(\+Object\+Data first\+\_\+object)}{Tracklet(ObjectData first\_object)}}]{\setlength{\rightskip}{0pt plus 5cm}core\+::\+Tracklet\+::\+Tracklet (
-\begin{DoxyParamCaption}
-\item[{{\bf Object\+Data}}]{first\+\_\+object}
-\end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_a5a91e01f9cd8404915dce73a0d659064}{}\label{classcore_1_1Tracklet_a5a91e01f9cd8404915dce73a0d659064}
-Creates a tracklet with the given initial object. \begin{DoxySeeAlso}{See also}
-\hyperlink{classcore_1_1ObjectData}{Object\+Data} 
-\end{DoxySeeAlso}
-
-\begin{DoxyParams}{Parameters}
-{\em first\+\_\+object} & The first object to store in the path \\
-\hline
-\end{DoxyParams}
-
+Creates a empty tracklet to store path object in. This is N\+OT a virtual object. 
 
 \subsection{Member Function Documentation}
-\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Add\+Path\+Object\+First@{Add\+Path\+Object\+First}}
-\index{Add\+Path\+Object\+First@{Add\+Path\+Object\+First}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Add\+Path\+Object\+First(\+Object\+Data obj)}{AddPathObjectFirst(ObjectData obj)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Add\+Path\+Object\+First (
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Add\+Path\+Object@{Add\+Path\+Object}}
+\index{Add\+Path\+Object@{Add\+Path\+Object}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Add\+Path\+Object(\+Object\+Data\+Ptr obj, bool overwrite=false)}{AddPathObject(ObjectDataPtr obj, bool overwrite=false)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Add\+Path\+Object (
 \begin{DoxyParamCaption}
-\item[{{\bf Object\+Data}}]{obj}
+\item[{Object\+Data\+Ptr}]{obj, }
+\item[{bool}]{overwrite = {\ttfamily false}}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_ac7f660efeed15a8925482d8d63073bcf}{}\label{classcore_1_1Tracklet_ac7f660efeed15a8925482d8d63073bcf}
-Adds the object in the first place of the path. 
+)}\hypertarget{classcore_1_1Tracklet_ab0b397f2d0685a927de886dbd36c3bc8}{}\label{classcore_1_1Tracklet_ab0b397f2d0685a927de886dbd36c3bc8}
+Adds the path object sorted into the tracklet. 
 \begin{DoxyParams}{Parameters}
-{\em obj} & The object to add \\
+{\em obj} & The path object to add \\
 \hline
-\end{DoxyParams}
-\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Add\+Path\+Object\+Last@{Add\+Path\+Object\+Last}}
-\index{Add\+Path\+Object\+Last@{Add\+Path\+Object\+Last}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Add\+Path\+Object\+Last(\+Object\+Data obj)}{AddPathObjectLast(ObjectData obj)}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Add\+Path\+Object\+Last (
-\begin{DoxyParamCaption}
-\item[{{\bf Object\+Data}}]{obj}
-\end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_ad9f018cb26a5fcb1ab00c8f336f24de5}{}\label{classcore_1_1Tracklet_ad9f018cb26a5fcb1ab00c8f336f24de5}
-Adds the object in the last place of the path. 
-\begin{DoxyParams}{Parameters}
-{\em obj} & The object to add \\
+{\em overwrite} & If true and an object in the same frame as the given object already exists, the old one will be replaced by the new one \\
 \hline
 \end{DoxyParams}
 \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Compare\+To@{Compare\+To}}
 \index{Compare\+To@{Compare\+To}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data $\ast$obj)}{CompareTo(ObjectData *obj)}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Tracklet\+::\+Compare\+To (
+\subsubsection[{\texorpdfstring{Compare\+To(\+Object\+Data\+Ptr obj) const override}{CompareTo(ObjectDataPtr obj) const override}}]{\setlength{\rightskip}{0pt plus 5cm}double core\+::\+Tracklet\+::\+Compare\+To (
 \begin{DoxyParamCaption}
-\item[{{\bf Object\+Data} $\ast$}]{obj}
+\item[{Object\+Data\+Ptr}]{obj}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [virtual]}}\hypertarget{classcore_1_1Tracklet_ab45f28ba6abde0944820ac614560ea89}{}\label{classcore_1_1Tracklet_ab45f28ba6abde0944820ac614560ea89}
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1Tracklet_a0357f2fa173941800571432dcbc96dc2}{}\label{classcore_1_1Tracklet_a0357f2fa173941800571432dcbc96dc2}
 Compares this object with the given object. 
 \begin{DoxyParams}{Parameters}
 {\em obj} & A pointer to the object to compare this object to \\
@@ -102,36 +85,128 @@ A double value indicating the comparison result
 \end{DoxyReturn}
 
 
-Reimplemented from \hyperlink{classcore_1_1ObjectData_a01f04d64b1e62f567d819a8fcbe38319}{core\+::\+Object\+Data}.
+Reimplemented from \hyperlink{classcore_1_1ObjectData_afbf7a1e87235f1b204d4d2eb8a37a9a6}{core\+::\+Object\+Data}.
 
-\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Get\+First\+Frame\+Index@{Get\+First\+Frame\+Index}}
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Flatten@{Flatten}}
+\index{Flatten@{Flatten}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Flatten()}{Flatten()}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Flatten (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\hypertarget{classcore_1_1Tracklet_a2bdb2f2c8249145808e7029dde6e7df0}{}\label{classcore_1_1Tracklet_a2bdb2f2c8249145808e7029dde6e7df0}
+Flattens the current tracklet one level. That means, that if this tracklet contains other tracklets as path objects, their path objects are all extracted and used as the new path objects of this tracklet. The old tracklet path objects are removed. \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Get\+First\+Frame\+Index@{Get\+First\+Frame\+Index}}
 \index{Get\+First\+Frame\+Index@{Get\+First\+Frame\+Index}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Get\+First\+Frame\+Index()}{GetFirstFrameIndex()}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Tracklet\+::\+Get\+First\+Frame\+Index (
+\subsubsection[{\texorpdfstring{Get\+First\+Frame\+Index() const}{GetFirstFrameIndex() const}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Tracklet\+::\+Get\+First\+Frame\+Index (
 \begin{DoxyParamCaption}
 {}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_ae544127ff912eefeb3698e94da27f91e}{}\label{classcore_1_1Tracklet_ae544127ff912eefeb3698e94da27f91e}
+) const}\hypertarget{classcore_1_1Tracklet_a1b963319d6c65614baec02a925f31691}{}\label{classcore_1_1Tracklet_a1b963319d6c65614baec02a925f31691}
 Gets the lowest frame index of all path objects. \begin{DoxyReturn}{Returns}
 The lowest frame index 
 \end{DoxyReturn}
 \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Get\+Last\+Frame\+Index@{Get\+Last\+Frame\+Index}}
 \index{Get\+Last\+Frame\+Index@{Get\+Last\+Frame\+Index}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Get\+Last\+Frame\+Index()}{GetLastFrameIndex()}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Tracklet\+::\+Get\+Last\+Frame\+Index (
+\subsubsection[{\texorpdfstring{Get\+Last\+Frame\+Index() const}{GetLastFrameIndex() const}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Tracklet\+::\+Get\+Last\+Frame\+Index (
 \begin{DoxyParamCaption}
 {}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_abbfc0ac1abd459962142ee96def46731}{}\label{classcore_1_1Tracklet_abbfc0ac1abd459962142ee96def46731}
+) const}\hypertarget{classcore_1_1Tracklet_ad8e195b523cf2021394455cc21867d96}{}\label{classcore_1_1Tracklet_ad8e195b523cf2021394455cc21867d96}
 Gets the highest frame index of all path objects. \begin{DoxyReturn}{Returns}
 The highest frame index 
 \end{DoxyReturn}
 \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Get\+Path\+Object@{Get\+Path\+Object}}
 \index{Get\+Path\+Object@{Get\+Path\+Object}!core\+::\+Tracklet@{core\+::\+Tracklet}}
-\subsubsection[{\texorpdfstring{Get\+Path\+Object(size\+\_\+t i)}{GetPathObject(size\_t i)}}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Object\+Data} core\+::\+Tracklet\+::\+Get\+Path\+Object (
+\subsubsection[{\texorpdfstring{Get\+Path\+Object(size\+\_\+t i)}{GetPathObject(size\_t i)}}]{\setlength{\rightskip}{0pt plus 5cm}Object\+Data\+Ptr core\+::\+Tracklet\+::\+Get\+Path\+Object (
 \begin{DoxyParamCaption}
 \item[{size\+\_\+t}]{i}
 \end{DoxyParamCaption}
-)}\hypertarget{classcore_1_1Tracklet_a95387d8a86e5b81b5cc1ff479c96494c}{}\label{classcore_1_1Tracklet_a95387d8a86e5b81b5cc1ff479c96494c}
-Gets the path object at the given index. 
+)}\hypertarget{classcore_1_1Tracklet_a9758349e8f25c479ffc4b21a90149a81}{}\label{classcore_1_1Tracklet_a9758349e8f25c479ffc4b21a90149a81}
+Gets the path object at the given index. The index is N\+OT the frame index \begin{DoxyReturn}{Returns}
+A pointer to the path object 
+\end{DoxyReturn}
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Get\+Path\+Object\+Count@{Get\+Path\+Object\+Count}}
+\index{Get\+Path\+Object\+Count@{Get\+Path\+Object\+Count}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Get\+Path\+Object\+Count() const}{GetPathObjectCount() const}}]{\setlength{\rightskip}{0pt plus 5cm}size\+\_\+t core\+::\+Tracklet\+::\+Get\+Path\+Object\+Count (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+) const}\hypertarget{classcore_1_1Tracklet_aee4298a7b734b2b7533d4536006a8aa8}{}\label{classcore_1_1Tracklet_aee4298a7b734b2b7533d4536006a8aa8}
+Gets the count of all path objects. \begin{DoxyReturn}{Returns}
+The path object count 
+\end{DoxyReturn}
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Interpolate@{Interpolate}}
+\index{Interpolate@{Interpolate}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Interpolate(\+Object\+Data\+Ptr obj, double fraction) const override}{Interpolate(ObjectDataPtr obj, double fraction) const override}}]{\setlength{\rightskip}{0pt plus 5cm}Object\+Data\+Ptr core\+::\+Tracklet\+::\+Interpolate (
+\begin{DoxyParamCaption}
+\item[{Object\+Data\+Ptr}]{obj, }
+\item[{double}]{fraction}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1Tracklet_a5fb5e6ab9df668c3477e8b52f115b188}{}\label{classcore_1_1Tracklet_a5fb5e6ab9df668c3477e8b52f115b188}
+Linearly interpolates between this and the given object. Creates a new object to fit between the two objects. 
+\begin{DoxyParams}{Parameters}
+{\em obj} & A pointer to the target object \\
+\hline
+{\em fraction} & Describes where the interpolation should be done. A fraction of zero is a clone of this object, a fraction of one is a clone of the target object. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The interpolated object 
+\end{DoxyReturn}
+
+
+Reimplemented from \hyperlink{classcore_1_1ObjectData_ad681915317decab76c384a635fc8444e}{core\+::\+Object\+Data}.
+
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Interpolate\+Missing\+Frames@{Interpolate\+Missing\+Frames}}
+\index{Interpolate\+Missing\+Frames@{Interpolate\+Missing\+Frames}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Interpolate\+Missing\+Frames()}{InterpolateMissingFrames()}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Interpolate\+Missing\+Frames (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}\hypertarget{classcore_1_1Tracklet_a10b56b608b24ef547550540e5a755bce}{}\label{classcore_1_1Tracklet_a10b56b608b24ef547550540e5a755bce}
+Interpolates between the current path objects until every missing frame has an object. Only frames between the first frame index and the last frame index are interpolated. \index{core\+::\+Tracklet@{core\+::\+Tracklet}!Visualize@{Visualize}}
+\index{Visualize@{Visualize}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Visualize(cv\+::\+Mat \&image, cv\+::\+Scalar \&color) const override}{Visualize(cv::Mat \&image, cv::Scalar \&color) const override}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Visualize (
+\begin{DoxyParamCaption}
+\item[{cv\+::\+Mat \&}]{image, }
+\item[{cv\+::\+Scalar \&}]{color}
+\end{DoxyParamCaption}
+) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}\hypertarget{classcore_1_1Tracklet_a85f92a4059bf89f24a83f28935675181}{}\label{classcore_1_1Tracklet_a85f92a4059bf89f24a83f28935675181}
+Visualizes the object in the given image with the given color. This method does nothing, it needs to be overwritten to visualize something. 
+\begin{DoxyParams}{Parameters}
+{\em image} & The image to write into \\
+\hline
+{\em color} & The color to use \\
+\hline
+\end{DoxyParams}
+
+
+Reimplemented from \hyperlink{classcore_1_1ObjectData_aae2c4fceddc529570dbe8909309f9961}{core\+::\+Object\+Data}.
+
+\index{core\+::\+Tracklet@{core\+::\+Tracklet}!Visualize@{Visualize}}
+\index{Visualize@{Visualize}!core\+::\+Tracklet@{core\+::\+Tracklet}}
+\subsubsection[{\texorpdfstring{Visualize(cv\+::\+Mat \&image, cv\+::\+Scalar \&color, size\+\_\+t frame, size\+\_\+t predecessor\+\_\+count, size\+\_\+t successor\+\_\+count) const}{Visualize(cv::Mat \&image, cv::Scalar \&color, size\_t frame, size\_t predecessor\_count, size\_t successor\_count) const}}]{\setlength{\rightskip}{0pt plus 5cm}void core\+::\+Tracklet\+::\+Visualize (
+\begin{DoxyParamCaption}
+\item[{cv\+::\+Mat \&}]{image, }
+\item[{cv\+::\+Scalar \&}]{color, }
+\item[{size\+\_\+t}]{frame, }
+\item[{size\+\_\+t}]{predecessor\+\_\+count, }
+\item[{size\+\_\+t}]{successor\+\_\+count}
+\end{DoxyParamCaption}
+) const}\hypertarget{classcore_1_1Tracklet_a3a2b241939559e47aef701d2e2c4d4bd}{}\label{classcore_1_1Tracklet_a3a2b241939559e47aef701d2e2c4d4bd}
+Visualizes the tracklet by visualizing the path object in the given frame and the number of path objects in the given range before and after the given frame. 
+\begin{DoxyParams}{Parameters}
+{\em image} & The image to write into \\
+\hline
+{\em color} & The color to use \\
+\hline
+{\em frame} & The frame index to visualize the path objects from \\
+\hline
+{\em predecessor\+\_\+count} & The number of path objects to visualize before the given frame \\
+\hline
+{\em successor\+\_\+count} & The number of path objects to visualize after the given frame \\
+\hline
+\end{DoxyParams}
+
 
 The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
 \item 

+ 14 - 14
Documentation/latex/classutil_1_1FileIO.tex

@@ -7,9 +7,9 @@
 \subsection*{Static Public Member Functions}
 \begin{DoxyCompactItemize}
 \item 
-static void \hyperlink{classutil_1_1FileIO_aa92b94ba7a5e0fea0e8c2f801c8d14b8}{Read\+C\+SV} (const std\+::string \&filename, const char \&delimiter, core\+::\+Vector3d \&values)
+static void \hyperlink{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}{Read\+C\+SV} (core\+::\+Vector3d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})
 \item 
-static void \hyperlink{classutil_1_1FileIO_ab33278a4ae57c8c5a56b6d80cbc27184}{Read\+C\+SV} (const std\+::string \&filename, const char \&delimiter, core\+::\+Vector2d \&values)
+static void \hyperlink{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}{Read\+C\+SV} (core\+::\+Vector2d \&values, const std\+::string \&filename, const char \&delimiter=\textquotesingle{};\textquotesingle{})
 \end{DoxyCompactItemize}
 
 
@@ -19,39 +19,39 @@ Utility class for file in-\/ and output.
 \subsection{Member Function Documentation}
 \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(const std\+::string \&filename, const char \&delimiter, core\+::\+Vector3d \&values)}{ReadCSV(const std::string \&filename, const char \&delimiter, core::Vector3d \&values)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
+\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 (
 \begin{DoxyParamCaption}
+\item[{core\+::\+Vector3d \&}]{values, }
 \item[{const std\+::string \&}]{filename, }
-\item[{const char \&}]{delimiter, }
-\item[{core\+::\+Vector3d \&}]{values}
+\item[{const char \&}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_aa92b94ba7a5e0fea0e8c2f801c8d14b8}{}\label{classutil_1_1FileIO_aa92b94ba7a5e0fea0e8c2f801c8d14b8}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}{}\label{classutil_1_1FileIO_acfce3977f435f2b024984da05408dfb4}
 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 \\
+\hline
 {\em filename} & The filename to read from \\
 \hline
 {\em delimiter} & The delimiter used to separate the values in the file \\
 \hline
-{\em values} & The 3D array of values to store the read values in \\
-\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(const std\+::string \&filename, const char \&delimiter, core\+::\+Vector2d \&values)}{ReadCSV(const std::string \&filename, const char \&delimiter, core::Vector2d \&values)}}]{\setlength{\rightskip}{0pt plus 5cm}void util\+::\+File\+I\+O\+::\+Read\+C\+SV (
+\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 (
 \begin{DoxyParamCaption}
+\item[{core\+::\+Vector2d \&}]{values, }
 \item[{const std\+::string \&}]{filename, }
-\item[{const char \&}]{delimiter, }
-\item[{core\+::\+Vector2d \&}]{values}
+\item[{const char \&}]{delimiter = {\ttfamily \textquotesingle{};\textquotesingle{}}}
 \end{DoxyParamCaption}
-)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_ab33278a4ae57c8c5a56b6d80cbc27184}{}\label{classutil_1_1FileIO_ab33278a4ae57c8c5a56b6d80cbc27184}
+)\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}{}\label{classutil_1_1FileIO_a5d145cb872989165f76d00c343170bc5}
 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 \\
+\hline
 {\em filename} & The filename to read from \\
 \hline
 {\em delimiter} & The delimiter used to separate the values in the file \\
 \hline
-{\em values} & The 2D array of values to store the read values in \\
-\hline
 \end{DoxyParams}
 
 

+ 61 - 6
Documentation/latex/classutil_1_1Parser.tex

@@ -8,6 +8,12 @@
 \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)
+\item 
+static void \hyperlink{classutil_1_1Parser_afbc0421d8672a418284efb5a9b6cec92}{Parse\+Object\+Data3D} (const core\+::\+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)
+\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)
 \end{DoxyCompactItemize}
 
 
@@ -15,6 +21,60 @@ static void \hyperlink{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}{Pa
 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 (
+\begin{DoxyParamCaption}
+\item[{const core\+::\+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}
+Parses the values into a Detection\+Sequence of Object\+Data3D 
+\begin{DoxyParams}{Parameters}
+{\em values} & A 3D vector of values \\
+\hline
+{\em sequence} & The sequence to store the created objects in \\
+\hline
+\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 (
+\begin{DoxyParamCaption}
+\item[{const core\+::\+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}
+Parses the values into a Detection\+Sequence of Object\+Data\+Angular objects. 
+\begin{DoxyParams}{Parameters}
+{\em values} & A 3D vector of values \\
+\hline
+{\em sequence} & The sequence to store the created objects in \\
+\hline
+\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 (
+\begin{DoxyParamCaption}
+\item[{const core\+::\+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}
+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 \\
+\hline
+{\em sequence} & The sequence to store the created objects in \\
+\hline
+{\em temporal\+\_\+weight} & The temporal weight \\
+\hline
+{\em spatial\+\_\+weight} & The spatial weight \\
+\hline
+{\em angular\+\_\+weight} & The angular weight \\
+\hline
+\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 (
@@ -24,12 +84,7 @@ Utility class for parsing diverse objects.
 \item[{{\bf core\+::\+Detection\+Sequence} \&}]{sequence}
 \end{DoxyParamCaption}
 )\hspace{0.3cm}{\ttfamily [static]}}\hypertarget{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}{}\label{classutil_1_1Parser_ac2095e8699706079dde135098f30de0a}
-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{DoxySeeAlso}{See also}
-Detection\+Sequence 
-
-Object\+Data\+Map 
-\end{DoxySeeAlso}
-
+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 \\
 \hline

+ 6 - 0
Documentation/latex/hierarchy.tex

@@ -2,8 +2,14 @@
 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}{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}}{}
 \begin{DoxyCompactList}
+\item \contentsline{section}{core\+:\+:Object\+Data3D}{\pageref{classcore_1_1ObjectData3D}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{core\+:\+:Object\+Data\+Angular}{\pageref{classcore_1_1ObjectDataAngular}}{}
+\end{DoxyCompactList}
 \item \contentsline{section}{core\+:\+:Object\+Data\+Map}{\pageref{classcore_1_1ObjectDataMap}}{}
 \item \contentsline{section}{core\+:\+:Tracklet}{\pageref{classcore_1_1Tracklet}}{}
 \end{DoxyCompactList}

+ 4 - 0
Documentation/latex/refman.tex

@@ -145,7 +145,11 @@
 \chapter{Class Documentation}
 \input{classcore_1_1DetectionSequence}
 \input{classutil_1_1FileIO}
+\input{classutil_1_1Logger}
+\input{classutil_1_1MyMath}
 \input{classcore_1_1ObjectData}
+\input{classcore_1_1ObjectData3D}
+\input{classcore_1_1ObjectDataAngular}
 \input{classcore_1_1ObjectDataMap}
 \input{classutil_1_1Parser}
 \input{classcore_1_1Tracklet}

+ 1 - 1
Doxyfile

@@ -604,7 +604,7 @@ STRICT_PROTO_MATCHING  = NO
 # list. This list is created by putting \todo commands in the documentation.
 # The default value is: YES.
 
-GENERATE_TODOLIST      = YES
+GENERATE_TODOLIST      = NO
 
 # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
 # list. This list is created by putting \test commands in the documentation.

+ 3 - 4
algo/Definitions.h

@@ -9,19 +9,18 @@
 #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
-    //TODO check types (move to core)
     typedef boost::property<boost::edge_weight_t, double> EdgeProp;
-    typedef boost::property<boost::vertex_name_t, core::ObjectData>
+    typedef boost::property<boost::vertex_name_t, core::ObjectDataPtr>
             VertexProp;
     typedef boost::adjacency_list<
-            boost::listS, boost::vecS, boost::directedS,
-            VertexProp, EdgeProp>
+            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

+ 62 - 48
algo/TwoStage.cpp

@@ -3,6 +3,7 @@
 //
 
 #include "TwoStage.h"
+#include "../util/Logger.h"
 
 namespace algo
 {
@@ -14,13 +15,15 @@ namespace algo
         max_tracklet_count_ = max_tracklet_count;
     }
 
-    DirectedGraph TwoStage::CreateObjectGraph(core::DetectionSequence detections)
+    void TwoStage::CreateObjectGraph(DirectedGraph& graph,
+                                     core::DetectionSequence& detections)
     {
-        DirectedGraph graph;
+        util::Logger::LogInfo("Creating object graph");
+
         std::vector<std::vector<Vertex>> layers;
 
         // Add source as the vertex with the lowest index
-        Vertex source = boost::add_vertex(core::ObjectData(), graph);
+        Vertex source = boost::add_vertex(core::ObjectDataPtr(new core::ObjectData()), graph);
 
         // Add vertices from detection sequence to directed graph
         // Save the vertices which are in one frame/layer for later use to
@@ -31,8 +34,8 @@ namespace algo
 
             for (size_t j = 0; j < detections.GetObjectCount(i); ++j)
             {
-                Vertex v =
-                        boost::add_vertex(detections.GetObject(i, j), graph);
+                Vertex v = boost::add_vertex(detections.GetObject(i, j),
+                                             graph);
 
                 layer.push_back(v);
             }
@@ -41,7 +44,7 @@ namespace algo
         }
 
         // Add sink as the vertex with the highest index
-        Vertex sink = boost::add_vertex(core::ObjectData(), graph);
+        Vertex sink = boost::add_vertex(core::ObjectDataPtr(new core::ObjectData()), graph);
 
         // Vertex objects
         VertexValueMap values = boost::get(boost::vertex_name, graph);
@@ -56,7 +59,7 @@ namespace algo
 
                 // For each next frame/layer until maxFrameSkip or end
                 for (size_t k = 1;
-                     k < max_frame_skip_ && i + k < layers.size();
+                     k <= max_frame_skip_ && i + k < layers.size();
                      ++k)
                 {
                     // To every edge in the next frame/layer
@@ -65,7 +68,7 @@ namespace algo
                         Vertex v = layers[i + k][l];
 
                         boost::add_edge(u, v,
-                                        values[u].CompareTo(&values[v]),
+                                        values[u]->CompareTo(values[v]),
                                         graph);
                     }
                 }
@@ -81,24 +84,19 @@ namespace algo
             }
         }
 
-        obj_graph_ = graph;
-        frame_count_ = layers.size();
-
-        return graph;
-    }
-
-    DirectedGraph TwoStage::CreateTrackletGraph()
-    {
-        return CreateTrackletGraph(obj_graph_, frame_count_);
+        util::Logger::LogDebug("vertex count " + std::to_string(boost::num_vertices(graph)));
+        util::Logger::LogDebug("edge count " + std::to_string(boost::num_edges(graph)));
     }
 
-    DirectedGraph TwoStage::CreateTrackletGraph(DirectedGraph obj_graph,
-                                                size_t frame_count)
+    void TwoStage::CreateTrackletGraph(DirectedGraph& obj_graph,
+                                       DirectedGraph& tlt_graph,
+                                       size_t frame_count)
     {
-        DirectedGraph tlt_graph;
+        util::Logger::LogInfo("Creating tracklet graph");
 
         // Add source to tracklet graph
-        Vertex tlt_src = boost::add_vertex(core::ObjectData(), tlt_graph);
+        Vertex tlt_src = boost::add_vertex(
+                core::ObjectDataPtr(new core::ObjectData()), tlt_graph);
 
         // Prepare parameter for dijkstra
         size_t obj_graph_size = boost::num_vertices(obj_graph);
@@ -120,23 +118,30 @@ namespace algo
                                            boost::predecessor_map(obj_pred_map)
                                                    .distance_map(obj_dist_map));
 
+            if (obj_dist_map[obj_snk] == std::numeric_limits<double>::max())
+            {
+                break;
+            }
+
             // Create the tracklet
-            core::Tracklet tracklet;
-            Vertex v = obj_snk;
-            for (Vertex u = obj_pred_map[obj_snk];
+            core::TrackletPtr tracklet(new core::Tracklet);
+            for (Vertex u = obj_pred_map[obj_snk], v = obj_snk;
                  u != v;
                  v = u, u = obj_pred_map[v])
             {
-                tracklet.AddPathObjectFirst(obj_values[u]);
+                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())
+                if (!obj_values[u]->IsVirtual())
                 {
                     // Remove the path by setting all used edges to a weight of
                     // infinity
                     std::pair<DirectedGraph::out_edge_iterator,
                               DirectedGraph::out_edge_iterator>
-                            edge_iter = boost::out_edges(u, obj_graph);
+                              edge_iter = boost::out_edges(u, obj_graph);
 
                     for (DirectedGraph::out_edge_iterator iter = edge_iter.first;
                          iter != edge_iter.second;
@@ -147,13 +152,14 @@ namespace algo
                     }
                 }
             }
+            core::ObjectDataPtr tracklet_base = tracklet;
 
             // Add tracklet into tracklet graph
-            boost::add_vertex(tracklet, tlt_graph);
+            boost::add_vertex(tracklet_base, tlt_graph);
         }
 
         // Add sink to tracklet graph
-        Vertex tlt_snk = boost::add_vertex(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);
@@ -164,10 +170,9 @@ namespace algo
         for (size_t i = 1; i < tlt_graph_size - 1; ++i)
         {
             Vertex u = tlt_indices[i];
-            size_t u_first_frame =
-                    ((core::Tracklet)tlt_values[u]).GetFirstFrameIndex();
-            size_t u_last_frame =
-                    ((core::Tracklet)tlt_values[u]).GetLastFrameIndex();
+            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();
 
             // Create edges between tracklets
             for (size_t j = 1; j < tlt_graph_size - 1; ++j)
@@ -175,13 +180,13 @@ namespace algo
                 if (i != j)
                 {
                     Vertex v = tlt_indices[j];
-                    size_t v_first_frame =
-                            ((core::Tracklet)tlt_values[v]).GetFirstFrameIndex();
+                    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)
                     {
                         boost::add_edge(u, v,
-                                        tlt_values[u].CompareTo(&tlt_values[v]),
+                                        tlt_values[u]->CompareTo(tlt_values[v]),
                                         tlt_graph);
                     }
                 }
@@ -198,23 +203,32 @@ namespace algo
                             tlt_graph);
         }
 
-        tlt_graph_ = tlt_graph;
-
-        return tlt_graph;
+        util::Logger::LogDebug("vertex count " + std::to_string(boost::num_vertices(tlt_graph)));
+        util::Logger::LogDebug("edge count " + std::to_string(boost::num_edges(tlt_graph)));
     }
 
-    std::vector<core::Tracklet> TwoStage::ExtractTracks()
+    void TwoStage::ExtractTracks(DirectedGraph& tlt_graph, size_t depth,
+                                 std::vector<core::TrackletPtr>& tracks)
     {
-        return ExtractTracks(tlt_graph_);
-    }
+        util::Logger::LogInfo("Extracting tracks");
 
-    std::vector<core::Tracklet> TwoStage::ExtractTracks(DirectedGraph tlt_graph)
-    {
-        std::vector<core::Tracklet> tracks;
+        VertexValueMap tlt_values = boost::get(boost::vertex_name, tlt_graph);
+        for (size_t i = 0; i < boost::num_vertices(tlt_graph); ++i)
+        {
+            core::ObjectDataPtr obj = tlt_values[i];
+            if (!obj->IsVirtual())
+            {
+                core::TrackletPtr tlt = std::static_pointer_cast<core::Tracklet>(obj);
 
-        //TODO implement
-        //TODO convert tracklets graph into list of tracklets/tracks
+                for (size_t j = 0; j < depth; j++)
+                {
+                    tlt->Flatten();
+                }
+
+                tracks.push_back(tlt);
+            }
+        }
 
-        return tracks;
+        util::Logger::LogDebug("track count " + std::to_string(tracks.size()));
     }
 }

+ 14 - 33
algo/TwoStage.h

@@ -13,7 +13,7 @@
 namespace algo
 {
     /**
-     * Implementation if the two-staged graph-based multi-object tracker.
+     * Implementation of the two-staged graph-based multi-object tracker.
      */
     class TwoStage
     {
@@ -22,26 +22,16 @@ namespace algo
          * Maximum edge length to link object
          */
         size_t max_frame_skip_;
+
         /**
          * Edge value to link to source and sink
          */
         double penalty_value_;
-        /*
+
+        /**
          * Maximum dijkstra iterations / number of tracklets to create
          */
         size_t max_tracklet_count_;
-        /*
-         * The last created object graph
-         */
-        DirectedGraph obj_graph_;
-        /*
-         * The last created tracklet graph
-         */
-        DirectedGraph tlt_graph_;
-        /**
-         * The frame count of the last read sequence
-         */
-        size_t frame_count_;
     public:
         /**
          * Initializes the algorithm wih the given values.
@@ -54,38 +44,29 @@ namespace algo
 
         /**
          * Creates a graph with vertices for every detected object
+         * @param graph The graph to write into
          * @param detections The objects to use for the graph
-         * @return The created graph containing the object data
          */
-        DirectedGraph CreateObjectGraph(core::DetectionSequence detections);
-
-        /**
-         * Reduces the object graph into linked tracklets.
-         * The last created graph is used, as well as his frame count.
-         *
-         */
-        DirectedGraph CreateTrackletGraph();
+        void CreateObjectGraph(DirectedGraph& graph,
+                               core::DetectionSequence& detections);
 
         /**
          * Reduces the object graph into linked tracklets.
          * @param obj_graph The object graph to reduce
+         * @param tlt_graph The graph to write the tracklets in
          * @param frame_count The frame count of the object graph
-         * @return The created graph containing the tracklet data
-         */
-        DirectedGraph CreateTrackletGraph(DirectedGraph obj_graph, size_t frame_count);
-
-        /**
-         * Extracts the finished tracks from the last created tracklet graph.
-         * @return The vector of finished object tracks
          */
-        std::vector<core::Tracklet> ExtractTracks();
+        void CreateTrackletGraph(DirectedGraph& obj_graph,
+                                 DirectedGraph& tlt_graph, size_t frame_count);
 
         /**
          * Extracts the finished tracks from the given tracklet graph.
          * @param tlt_graph The tracklet graph to extract from
-         * @return The vector of finished object tracks
+         * @param depth The depth to flatten the tracklets to
+         * @param tracks The vector to write the extracted tracks in
          */
-        std::vector<core::Tracklet> ExtractTracks(DirectedGraph tlt_graph);
+        void ExtractTracks(DirectedGraph& tlt_graph, size_t depth,
+                           std::vector<core::TrackletPtr>& tracks);
     };
 }
 

+ 12 - 4
core/Definitions.h

@@ -6,15 +6,23 @@
 #define GBMOT_CONSTANTS_H
 
 #include <vector>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/graph_selectors.hpp>
-#include "ObjectData.h"
+#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

+ 14 - 34
core/DetectionSequence.cpp

@@ -6,19 +6,19 @@
 
 namespace core
 {
-    DetectionSequence::DetectionSequence(std::string name)
+    DetectionSequence::DetectionSequence(const std::string& name)
     {
         name_ = name;
-        objects_ = std::vector<std::vector<ObjectData>>();
+        objects_ = std::vector<std::vector<ObjectDataPtr>>();
     }
 
-    void DetectionSequence::AddObject(ObjectData object_data)
+    void DetectionSequence::AddObject(ObjectDataPtr object_data)
     {
-        if (object_data.GetFrameIndex() >= objects_.size())
+        if (object_data->GetFrameIndex() >= objects_.size())
         {
-            objects_.push_back(std::vector<ObjectData>());
+            objects_.push_back(std::vector<ObjectDataPtr>());
         }
-        objects_[object_data.GetFrameIndex()].push_back(object_data);
+        objects_[object_data->GetFrameIndex()].push_back(object_data);
     }
 
     void DetectionSequence::Clear()
@@ -31,8 +31,8 @@ namespace core
         return name_;
     }
 
-    ObjectData DetectionSequence::GetObject(
-            size_t frame_index, size_t object_index)
+    ObjectDataPtr DetectionSequence::GetObject
+            (size_t frame_index, size_t object_index) const
     {
         return objects_[frame_index][object_index];
     }
@@ -47,38 +47,18 @@ namespace core
         return objects_[frame_index].size();
     }
 
-    void DetectionSequence::Print(std::ostream &os) const
+    std::ostream& operator<<(std::ostream& os, const DetectionSequence& obj)
     {
-        for (size_t frame_i = 0; frame_i < objects_.size(); ++frame_i)
+        for (size_t frame = 0; frame < obj.objects_.size(); ++frame)
         {
-            os << "Frame: " << frame_i << std::endl;
+            os << "Frame: " << frame << std::endl;
 
-            for (size_t object_i = 0;
-                 object_i < objects_[frame_i].size();
-                 ++object_i)
+            for (auto obj_in_frame : obj.objects_[frame])
             {
-                os << objects_[frame_i][object_i] << std::endl;
+                os << *obj_in_frame << std::endl;
             }
         }
 
-        os << std::endl;
-
-    }
-
-    std::ostream& operator<<(std::ostream &os, const DetectionSequence &obj)
-    {
-        obj.Print(os);
         return os;
     }
-}
-
-
-
-
-
-
-
-
-
-
-
+}

+ 11 - 15
core/DetectionSequence.h

@@ -24,31 +24,26 @@ namespace core
          * Display name
          */
         std::string name_;
+
         /**
-         * Two dimensional vector of all detected objects.
+         * Two dimensional vector of pointers to all detected objects.
          * The first dimension is the frame.
          * The second dimension is the object in that frame.
          */
-        std::vector<std::vector<ObjectData>> objects_;
-    protected:
-        /**
-         * Used in the << operator
-         * @param os The stream to write to
-         */
-        virtual void Print(std::ostream& os) const;
+        std::vector<std::vector<ObjectDataPtr>> objects_;
     public:
         /**
          * Creates a detection sequence with the given name.
          * @param name The name of this sequence
          */
-        DetectionSequence(std::string name);
+        DetectionSequence(const std::string& name = "DetectionSequence");
 
         /**
          * Adds a new object, creates a new frame vector if the given objects
          * frame index is greater than the current frame vector size.
          * @param object_data The object to add
          */
-        void AddObject(ObjectData object_data);
+        void AddObject(ObjectDataPtr object_data);
 
         /**
          * Removes all objects.
@@ -62,11 +57,12 @@ namespace core
         std::string GetName() const;
 
         /**
-         * Gets the object in the given frame with the given index.
+         * Gets a pointer to the object in the given frame with the given index.
          * @param frame_index The frame to get the object from
          * @param object_index The objects index in the corresponding frame
+         * @return A pointer to the stored object data
          */
-        ObjectData GetObject(size_t frame_index, size_t object_index);
+        ObjectDataPtr GetObject(size_t frame_index, size_t object_index) const;
 
         /**
          * Gets the frame count.
@@ -77,18 +73,18 @@ namespace core
         /**
          * Gets the object count in the given frame.
          * @param frame_index The frame to get the object count of
-         * @return The number of object in this frame
+         * @return The number of objects in this frame
          */
         size_t GetObjectCount(size_t frame_index) const;
 
         /**
          * Overrides the << operator for easy output.
-         * Calls the print method.
          * @param os The stream to write to
          * @param obj The object to write into the stream
          * @return The stream written to
          */
-        friend std::ostream& operator<<(std::ostream& os, const DetectionSequence& obj);
+        friend std::ostream& operator<<(std::ostream& os,
+                                        const DetectionSequence& obj);
     };
 }
 

+ 35 - 1
core/ObjectData.cpp

@@ -2,7 +2,9 @@
 // Created by wrede on 19.04.16.
 //
 
+#include <cmath>
 #include "ObjectData.h"
+#include "../util/MyMath.h"
 
 namespace core
 {
@@ -10,12 +12,14 @@ namespace core
     {
         frame_index_ = 0;
         is_virtual_ = true;
+        detection_score_ = 0.0;
     }
 
     ObjectData::ObjectData(std::size_t frame_index)
     {
         frame_index_ = frame_index;
         is_virtual_ = false;
+        detection_score_ = 0.0;
     }
 
     std::size_t ObjectData::GetFrameIndex() const
@@ -33,16 +37,46 @@ namespace core
         os << "Object in frame " << frame_index_;
     }
 
-    double ObjectData::CompareTo(ObjectData *obj)
+    double ObjectData::CompareTo(ObjectDataPtr obj) const
     {
         return 0.0;
     }
 
+    ObjectDataPtr ObjectData::Interpolate(ObjectDataPtr obj,
+                                       double fraction) const
+    {
+        size_t index = static_cast<size_t>(
+                util::MyMath::Lerp(
+                        GetFrameIndex(), obj->GetFrameIndex(), fraction));
+
+        return ObjectDataPtr(new ObjectData(index));
+    }
+
     std::ostream& operator<<(std::ostream &os, const ObjectData &obj)
     {
         obj.Print(os);
         return os;
     }
+
+    void ObjectData::SetFrameIndex(size_t index)
+    {
+        frame_index_ = index;
+    }
+
+    void ObjectData::Visualize(cv::Mat& image, cv::Scalar& color) const
+    {
+        /* EMPTY */
+    }
+
+    void ObjectData::SetDetectionScore(double score)
+    {
+        detection_score_ = score;
+    }
+
+    double ObjectData::GetDetectionScore()
+    {
+        return detection_score_;
+    }
 }
 
 

+ 55 - 10
core/ObjectData.h

@@ -6,14 +6,15 @@
 #define GBMOT_NODEDATA_H
 
 
+#include "Definitions.h"
 #include <string>
 #include <unordered_map>
 #include <iostream>
+#include <opencv2/core/core.hpp>
 
 namespace core
 {
-    //TODO RENAME
-    //TODO ObjectDataBase / ObjectBase / DataBase / AObject ...
+    //TODO RENAME ObjectDataBase / ObjectBase / DataBase / AObject / DetectionBase ...
     /**
      * Base class for all detected objects.
      * Stores the corresponding frame index.
@@ -25,11 +26,18 @@ namespace core
          * If this node is considered virtual
          */
         bool is_virtual_;
-    protected:
+
         /**
          * The frame the object was detected in
          */
         std::size_t frame_index_;
+
+        /**
+         * The detection score.
+         * Defines the quality of this detection.
+         */
+        double detection_score_;
+
         /**
          * Used in the << operator
          * @param os The stream to write to
@@ -37,7 +45,7 @@ namespace core
         virtual void Print(std::ostream& os) const;
     public:
         /**
-         * Creates a new empty ObjectData (e.g. for virtual objects)
+         * Creates a new empty virtual ObjectData
          */
         ObjectData();
 
@@ -48,28 +56,65 @@ namespace core
         ObjectData(std::size_t frame_index);
 
         /**
-         * Getter for the frame index
+         * Gets the frame index
          * @return The frame index
          */
         std::size_t GetFrameIndex() const;
 
+        /**
+         * Sets the frame index
+         * @param index The new frame index
+         */
+        void SetFrameIndex(size_t index);
+
+        /**
+         * Sets the detection score
+         * @param score The detection score
+         */
+        void SetDetectionScore(double score);
+
+        /**
+         * Gets the detection score
+         * @return The detection score
+         */
+        double GetDetectionScore();
+
         /**
          * Is this node considered a virtual node
-         * @return Whether this node is virtual
+         * @return True, if this node is virtual
          */
         bool IsVirtual() const;
 
-        //TODO RENAME
-        //TODO ObjectDataComparable / IComparable ...
+        //TODO RENAME ObjectDataComparable / IComparable ...
         /**
          * Compares this object with the given object.
          * @param obj A pointer to the object to compare this object to
          * @return A double value indicating the comparison result
          */
-        virtual double CompareTo(ObjectData *obj);
+        virtual double CompareTo(ObjectDataPtr obj) const;
+
+        /**
+         * Linearly interpolates between this and the given object.
+         * Creates a new object to fit between the two objects.
+         * @param obj A pointer to the target object
+         * @param fraction Describes where the interpolation should
+         *                 be done. A fraction of zero is a clone of this object,
+         *                 a fraction of one is a clone of the target object.
+         * @return The interpolated object
+         */
+        virtual ObjectDataPtr Interpolate(ObjectDataPtr obj, double fraction) const;
+
+        /**
+         * Visualizes the object in the given image with the given color.
+         * This method does nothing, it needs to be overwritten to visualize
+         * something.
+         * @param image The image to write into
+         * @param color The color to use
+         */
+        virtual void Visualize(cv::Mat& image, cv::Scalar& color) const;
 
         /**
-         * Overrides the << operator for easy output.
+         * Overrides the << operator for custom output.
          * Calls the print method.
          * @param os The stream to write to
          * @param obj The object to write into the stream

+ 89 - 0
core/ObjectData3D.cpp

@@ -0,0 +1,89 @@
+//
+// Created by wrede on 04.05.16.
+//
+
+#include "ObjectData3D.h"
+#include "../util/MyMath.h"
+
+namespace core
+{
+    ObjectData3D::ObjectData3D(size_t frame_index, cv::Point3d position)
+            : ObjectData(frame_index),
+              position_(position),
+              temporal_weight_(0.5),
+              spatial_weight_(0.5)
+    {
+    }
+
+    void ObjectData3D::SetTemporalWeight(double weight)
+    {
+        temporal_weight_ = weight;
+    }
+
+    void ObjectData3D::SetSpatialWeight(double weight)
+    {
+        spatial_weight_ = weight;
+    }
+
+    cv::Point3d ObjectData3D::GetPosition() const
+    {
+        return position_;
+    }
+
+    double ObjectData3D::GetTemporalWeight() const
+    {
+        return temporal_weight_;
+    }
+
+    double ObjectData3D::GetSpatialWeight() const
+    {
+        return spatial_weight_;
+    }
+
+    double ObjectData3D::CompareTo(ObjectDataPtr obj) const
+    {
+        ObjectData3DPtr obj_3d = std::static_pointer_cast<ObjectData3D>(obj);
+
+        double d_temp = obj_3d->GetFrameIndex() - GetFrameIndex();
+        double d_spat = util::MyMath::EuclideanDistance(position_, obj_3d->position_);
+
+        return d_temp * temporal_weight_ + d_spat * spatial_weight_;
+    }
+
+    ObjectDataPtr ObjectData3D::Interpolate(ObjectDataPtr obj,
+                                            double fraction) const
+    {
+        ObjectDataPtr obj_in = ObjectData::Interpolate(obj, fraction);
+
+        ObjectData3DPtr obj_3d = std::static_pointer_cast<ObjectData3D>(obj);
+
+        double x = util::MyMath::Lerp(position_.x, obj_3d->position_.x, fraction);
+        double y = util::MyMath::Lerp(position_.y, obj_3d->position_.y, fraction);
+        double z = util::MyMath::Lerp(position_.z, obj_3d->position_.z, fraction);
+
+        ObjectData3DPtr obj_out(
+                new ObjectData3D(obj_in->GetFrameIndex(), cv::Point3d(x, y, z)));
+
+        return obj_out;
+    }
+
+    void ObjectData3D::Print(std::ostream& os) const
+    {
+        os << "ObjectData3D{"
+           << "frame: " << GetFrameIndex() << ","
+           << "x: " << position_.x << ","
+           << "y: " << position_.y << ","
+           << "z: " << position_.z << "}";
+    }
+
+    void ObjectData3D::Visualize(cv::Mat& image, cv::Scalar& color) const
+    {
+        double x = position_.x * image.cols;
+        double y = position_.y * image.rows;
+        int r = (int) (0.005 * (image.rows + image.cols) * 0.5);
+
+        cv::circle(image, cv::Point2d(x, y), r, color);
+    }
+}
+
+

+ 83 - 0
core/ObjectData3D.h

@@ -0,0 +1,83 @@
+//
+// Created by wrede on 04.05.16.
+//
+
+#ifndef GBMOT_OBJECTDATA3D_H
+#define GBMOT_OBJECTDATA3D_H
+
+#include "ObjectData.h"
+#include <opencv2/opencv.hpp>
+
+namespace core
+{
+    /**
+     * Class for storing a detection in three dimensional space.
+     */
+    class ObjectData3D : public ObjectData
+    {
+    private:
+        /**
+         * The position in the three dimensional space
+         */
+        cv::Point3d position_;
+
+        /**
+         * The weight of the temporal distance for the comparison.
+         * The temporal distance is the frame difference.
+         */
+        double temporal_weight_;
+
+        /**
+         * The weight of the spatial distance for the comparison.
+         * The spatial distance is the euclidean distance of the positions.
+         */
+        double spatial_weight_;
+
+        virtual void Print(std::ostream& os) const override;
+    public:
+        /**
+         * Creates a new detection with the given index and position.
+         * @param frame_index The frame index
+         * @param position The position in three dimensional space
+         */
+        ObjectData3D(size_t frame_index, cv::Point3d position);
+
+        /**
+         * Sets the temporal weight.
+         * @param weight The temporal weight
+         */
+        void SetTemporalWeight(double weight);
+
+        /**
+         * Sets the spatial weight
+         * @param weight The spatial weight
+         */
+        void SetSpatialWeight(double weight);
+
+        /**
+         * Gets the position in three dimensional space.
+         * @return The position
+         */
+        cv::Point3d GetPosition() const;
+
+        /**
+         * Gets the temporal weight.
+         * @return The temporal weight
+         */
+        double GetTemporalWeight() const;
+
+        /**
+         * Gets the spatial weight
+         * @return The spatial weight
+         */
+        double GetSpatialWeight() const;
+
+        virtual double CompareTo(ObjectDataPtr obj) const override;
+        virtual ObjectDataPtr Interpolate(ObjectDataPtr obj,
+                                          double fraction) const override;
+        virtual void Visualize(cv::Mat& image, cv::Scalar& color) const override;
+    };
+}
+
+
+#endif //GBMOT_OBJECTDATA3D_H

+ 99 - 0
core/ObjectDataAngular.cpp

@@ -0,0 +1,99 @@
+//
+// Created by wrede on 19.05.16.
+//
+
+#include "ObjectDataAngular.h"
+#include "../util/MyMath.h"
+
+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)
+    {
+        SetSpatialWeight(1.0 / 3.0);
+        SetTemporalWeight(1.0 / 3.0);
+    }
+
+    void ObjectDataAngular::SetAngularWeight(double weight)
+    {
+        angular_weight_ = weight;
+    }
+
+    double ObjectDataAngular::GetAngle() const
+    {
+        return angle_;
+    }
+
+    double ObjectDataAngular::GetAngularWeight() const
+    {
+        return angular_weight_;
+    }
+
+    double ObjectDataAngular::CompareTo(ObjectDataPtr obj) const
+    {
+        ObjectDataAngularPtr obj_ang =
+                std::static_pointer_cast<ObjectDataAngular>(obj);
+
+        double d_ang = std::abs(obj_ang->angle_ - angle_);
+
+        return ObjectData3D::CompareTo(obj) + d_ang * angular_weight_;
+    }
+
+    ObjectDataPtr ObjectDataAngular::Interpolate(ObjectDataPtr obj,
+                                                 double fraction) const
+    {
+        ObjectData3DPtr obj_in =
+                std::static_pointer_cast<ObjectData3D>(
+                        ObjectData3D::Interpolate(obj, fraction));
+
+        ObjectDataAngularPtr obj_ang =
+                std::static_pointer_cast<ObjectDataAngular>(obj);
+
+        double angle = util::MyMath::Lerp(angle_, obj_ang->angle_, fraction);
+
+        ObjectDataAngularPtr obj_out(
+                new ObjectDataAngular(
+                        obj_in->GetFrameIndex(), obj_in->GetPosition(), angle));
+
+        return obj_out;
+    }
+
+    void ObjectDataAngular::Visualize(cv::Mat& image, cv::Scalar& color) const
+    {
+        double x = GetPosition().x * image.cols;
+        double y = GetPosition().y * image.rows;
+        int r = (int) (0.005 * (image.rows + image.cols) * 0.5);
+        double a_x = x + cos(angle_) * r * 6.0;
+        double a_y = y + sin(angle_) * r * 6.0;
+
+        cv::circle(image, cv::Point2d(x, y), r, color);
+        cv::line(image, cv::Point2d(x, y), cv::Point2d(a_x, a_y), color);
+    }
+
+    void ObjectDataAngular::Print(std::ostream& os) const
+    {
+        os << "ObjectDataAngular{"
+        << "f:" << GetFrameIndex() << ", "
+        << "x:" << GetPosition().x << ", "
+        << "y:" << GetPosition().y << ", "
+        << "z:" << GetPosition().z << ", "
+        << "a:" << GetAngle() << "}";
+    }
+
+    ObjectDataAngular::ObjectDataAngular(size_t frame_index,
+                                         const cv::Point3d& position,
+                                         double angle,
+                                         double temporal_weight,
+                                         double spatial_weight,
+                                         double angular_weight)
+            : ObjectData3D(frame_index, position)
+    {
+        angle_ = angle;
+        angular_weight_ = angular_weight;
+
+        SetTemporalWeight(temporal_weight);
+        SetSpatialWeight(spatial_weight);
+    }
+}

+ 79 - 0
core/ObjectDataAngular.h

@@ -0,0 +1,79 @@
+//
+// Created by wrede on 19.05.16.
+//
+
+#ifndef GBMOT_OBJECTDATAANGULAR_H
+#define GBMOT_OBJECTDATAANGULAR_H
+
+#include "ObjectData3D.h"
+
+namespace core
+{
+    /**
+     * Class for storing a detection in three dimensional space with an rotation
+     * angle in radians.
+     */
+    class ObjectDataAngular : public ObjectData3D
+    {
+    private:
+        /**
+         * The rotation angle in radians
+         */
+        double angle_;
+
+        /**
+         * The weight of the angular difference for the comparison
+         */
+        double angular_weight_;
+
+        virtual void Print(std::ostream& os) const override;
+    public:
+        /**
+         * Creates a new object in the given frame, with the given position and
+         * the given angle.
+         * @param frame_index The index of the frame
+         * @param position The position in three dimensional space
+         * @param angle The rotation angle in radians
+         */
+        ObjectDataAngular(size_t frame_index, const cv::Point3d& position, double angle);
+
+        /**
+         * Creates a new object in the given frame, with the given position and
+         * the given angle. The weights are used in the comparison calculation.
+         * @param frame_index The index of the frame
+         * @param position The position in three dimensional space
+         * @param angle The rotation angle in radians
+         * @param temporal_weight The temporal weight
+         * @param spatial_weight The spatial weight
+         * @param angular_weight The angular weight
+         */
+        ObjectDataAngular(size_t frame_index, const cv::Point3d& position,
+                          double angle, double temporal_weight,
+                          double spatial_weight, double angular_weight);
+
+        /**
+         * Sets the angular weight.
+         * @param weight The angular weight
+         */
+        void SetAngularWeight(double weight);
+
+        /**
+         * Gets the rotation angle in radians.
+         * @return The rotation angle in radians
+         */
+        double GetAngle() const;
+
+        /**
+         * Gets the angular weight.
+         * @return The angular weight
+         */
+        double GetAngularWeight() const;
+
+        virtual double CompareTo(ObjectDataPtr obj) const override;
+        virtual ObjectDataPtr Interpolate(ObjectDataPtr obj, double fraction) const override;
+        virtual void Visualize(cv::Mat& image, cv::Scalar& color) const override;
+    };
+}
+
+
+#endif //GBMOT_OBJECTDATAANGULAR_H

+ 44 - 20
core/ObjectDataMap.cpp

@@ -3,12 +3,13 @@
 //
 
 #include "ObjectDataMap.h"
+#include "../util/MyMath.h"
 
 namespace core
 {
     void ObjectDataMap::Print(std::ostream& os) const
     {
-        os << "ObjectDataMap{" << GetFrameIndex();
+        os << "ObjectDataMap{frame:" << GetFrameIndex();
 
         for (auto it = value_weight_map_.begin(); it != value_weight_map_.end(); ++it)
         {
@@ -74,44 +75,67 @@ namespace core
         return value_weight_map_[key].second;
     }
 
-    void ObjectDataMap::PutValueWeight(std::string key, double value,
-                                       double weight)
+    void ObjectDataMap::Put(std::string key, double value,
+                            double weight)
     {
         value_weight_map_[key] = std::make_pair(value, weight);
     }
 
-    void ObjectDataMap::PutValueWeight(std::string key,
-                                       std::pair<double, double> value_weight)
+    void ObjectDataMap::Put(std::string key,
+                            std::pair<double, double> value_weight)
     {
         value_weight_map_[key] = value_weight;
     }
 
-    double ObjectDataMap::CompareTo(ObjectData *obj)
+    double ObjectDataMap::CompareTo(ObjectDataPtr obj) const
     {
-        ObjectDataMap* obj_dm = dynamic_cast<ObjectDataMap*>(obj);
+        ObjectDataMapPtr obj_map = std::static_pointer_cast<ObjectDataMap>(obj);
 
-        if (obj_dm)
-        {
-            return CompareTo(obj_dm);
-        }
-        else
-        {
-            return 0.0;
-        }
-    }
-
-    double ObjectDataMap::CompareTo(ObjectDataMap *obj)
-    {
         double diff = 0.0;
 
         for (auto it = value_weight_map_.begin(); it != value_weight_map_.end(); ++it)
         {
             // |other_value - this_value| * this_weight;
-            diff += fabs(obj->value_weight_map_[it->first].first - it->second.first)
+            diff += fabs(obj_map->value_weight_map_[it->first].first - it->second.first)
                     * it->second.second;
         }
 
         return diff;
     }
+
+    ObjectDataPtr ObjectDataMap::Interpolate(ObjectDataPtr obj,
+                                          double fraction) const
+    {
+        ObjectDataMapPtr obj_map = std::static_pointer_cast<ObjectDataMap>(obj);
+
+        fraction = util::MyMath::Clamp(0.0, 1.0, fraction);
+
+        double frame_index = util::MyMath::Lerp(GetFrameIndex(),
+                                              obj_map->GetFrameIndex(),
+                                              fraction);
+
+        ObjectDataMapPtr obj_out(new ObjectDataMap(static_cast<size_t>(fabs(frame_index))));
+
+        // Interpolate all values but leave the weights untouched
+        for (auto iter = value_weight_map_.begin();
+             iter != value_weight_map_.end();
+             ++iter)
+        {
+            obj_out->Put(
+                    iter->first,
+                    util::MyMath::Lerp(iter->second.first,
+                                     obj_map->value_weight_map_[iter->first].first,
+                                     fraction),
+                    iter->second.second
+            );
+        }
+
+        return obj_out;
+    }
+
+    void ObjectDataMap::Visualize(cv::Mat& image, cv::Scalar& color) const
+    {
+        ObjectData::Visualize(image, color);
+    }
 }
 

+ 9 - 24
core/ObjectDataMap.h

@@ -25,11 +25,7 @@ namespace core
          * The stored value-weight-pairs.
          */
         std::unordered_map<std::string, std::pair<double, double>> value_weight_map_;
-    protected:
-        /**
-         * Used in the << operator
-         * @param os The stream to write to
-         */
+
         virtual void Print(std::ostream& os) const;
     public:
         /**
@@ -49,6 +45,7 @@ namespace core
                 size_t frame_index,
                 std::vector<std::string> keys,
                 std::vector<double> value_list);
+
         /**
          * Creates a object data map with the given keys and values and an
          * given weight for the corresponding key-value pair.
@@ -88,7 +85,7 @@ namespace core
          */
         double GetWeight(std::string key);
 
-        //TODO find a better name
+        //TODO RENAME
         /**
          * Stores the given value-weight pair with the given key.
          * If the key is already stored it will be overridden with the new pair.
@@ -96,7 +93,7 @@ namespace core
          * @param value The value of the value-weight pair
          * @param weight The weight of the value-weight pair
          */
-        void PutValueWeight(std::string key, double value, double weight);
+        void Put(std::string key, double value, double weight);
 
         /**
          * Stores the given value-weight pair with the given key.
@@ -104,25 +101,13 @@ namespace core
          * @param key The key to store the value-weight pair at
          * @param value_weight The value-weight pair
          */
-        void PutValueWeight(std::string key, std::pair<double, double> value_weight);
+        void Put(std::string key, std::pair<double, double> value_weight);
 
-        /**
-         * Compares this object with the given object by calculating the difference
-         * in every value and applies the corresponding weight to that difference.
-         * Than all weighted differences are summed up.
-         * @param obj A pointer to the object to compare this object to
-         * @return The summed up weighted differences
-         */
-        virtual double CompareTo(ObjectData *obj);
+        virtual double CompareTo(ObjectDataPtr obj) const override;
 
-        /**
-         * Compares this object with the given object by calculating the difference
-         * in every value and applies the corresponding weight to that difference.
-         * Than all weighted differences are summed up.
-         * @param obj A pointer to the object to compare this object to
-         * @return The summed up weighted differences
-         */
-        virtual double CompareTo(ObjectDataMap *obj);
+        virtual ObjectDataPtr Interpolate(ObjectDataPtr obj, double fraction) const override;
+
+        virtual void Visualize(cv::Mat& image, cv::Scalar& color) const override;
     };
 }
 

+ 117 - 33
core/Tracklet.cpp

@@ -6,73 +6,157 @@
 
 namespace core
 {
-    Tracklet::Tracklet() : ObjectData(0)
+    void Tracklet::Print(std::ostream& os) const
     {
-        path_objects_ = std::vector<ObjectData>();
-        last_frame_index_ = 0;
+        os << "Tracklet{\n";
+        for (auto obj : path_objects_)
+        {
+            os << *obj << std::endl;
+        }
+        os << "}";
     }
 
-    Tracklet::Tracklet(ObjectData first_object)
-            : ObjectData(first_object.GetFrameIndex())
+    Tracklet::Tracklet()
+            : ObjectData(0)
     {
-        path_objects_ = std::vector<ObjectData>();
-        path_objects_.push_back(first_object);
-
-        last_frame_index_ = first_object.GetFrameIndex();
+        path_objects_ = std::vector<ObjectDataPtr>();
+        last_frame_index_ = 0;
     }
 
-    size_t Tracklet::GetFirstFrameIndex()
+    size_t Tracklet::GetFirstFrameIndex() const
     {
-        return frame_index_;
+        return GetFrameIndex();
     }
 
-    size_t Tracklet::GetLastFrameIndex()
+    size_t Tracklet::GetLastFrameIndex() const
     {
         return last_frame_index_;
     }
 
-    ObjectData Tracklet::GetPathObject(size_t i)
+    void Tracklet::AddPathObject(ObjectDataPtr obj, bool overwrite)
     {
-        return path_objects_[i];
-    }
-
-    void Tracklet::AddPathObjectFirst(ObjectData obj)
-    {
-        if (!obj.IsVirtual())
+        if (!obj->IsVirtual())
         {
-            path_objects_.insert(path_objects_.begin(), obj);
+            bool inserted = false;
 
-            if (obj.GetFrameIndex() < frame_index_)
+            if (!path_objects_.empty())
             {
-                frame_index_ = obj.GetFrameIndex();
+                for (auto iter = path_objects_.begin();
+                     iter != path_objects_.end() && !inserted;
+                     ++iter)
+                {
+                    if ((*iter)->GetFrameIndex() == obj->GetFrameIndex())
+                    {
+                        if (overwrite)
+                        {
+                            iter = path_objects_.erase(iter);
+                            iter = path_objects_.insert(iter, obj);
+                        }
+                        inserted = true;
+                    }
+                    else if ((*iter)->GetFrameIndex() > obj->GetFrameIndex())
+                    {
+                        iter = path_objects_.insert(iter, obj);
+                        inserted = true;
+                    }
+                }
             }
-            else if (obj.GetFrameIndex() > last_frame_index_)
+
+            if (!inserted)
             {
-                last_frame_index_ = obj.GetFrameIndex();
+                path_objects_.push_back(obj);
             }
+
+            SetFrameIndex(path_objects_.front()->GetFrameIndex());
+            last_frame_index_ = path_objects_.back()->GetFrameIndex();
         }
     }
 
-    void Tracklet::AddPathObjectLast(ObjectData obj)
+    ObjectDataPtr Tracklet::GetPathObject(size_t i)
+    {
+        return path_objects_[i];
+    }
+
+    double Tracklet::CompareTo(ObjectDataPtr obj) const
+    {
+        TrackletPtr tlt = std::static_pointer_cast<Tracklet>(obj);
+        return path_objects_[path_objects_.size() - 1]->CompareTo(tlt->path_objects_[0]);
+    }
+
+    ObjectDataPtr Tracklet::Interpolate(ObjectDataPtr obj, double fraction) const
+    {
+        TrackletPtr tlt = std::static_pointer_cast<Tracklet>(obj);
+
+        return path_objects_[path_objects_.size() - 1]->Interpolate(tlt->path_objects_[0], fraction);
+    }
+
+    void Tracklet::Visualize(cv::Mat& image, cv::Scalar& color) const
     {
-        if (!obj.IsVirtual())
+        for (auto obj : path_objects_)
         {
-            path_objects_.push_back(obj);
+            obj->Visualize(image, color);
+        }
+    }
+
+    void Tracklet::Visualize(cv::Mat& image, cv::Scalar& color, size_t frame,
+                             size_t predecessor_count, size_t successor_count) const
+    {
+        size_t start = (frame - predecessor_count > GetFirstFrameIndex()) ?
+                       frame - predecessor_count : GetFirstFrameIndex();
+        size_t end = (frame + successor_count < GetLastFrameIndex()) ?
+                     frame + successor_count : GetLastFrameIndex();
+
+//        util::Logger::LogDebug("tracklet frame range: " + std::to_string(GetFirstFrameIndex()) + "-" + std::to_string(GetLastFrameIndex()));
+//        util::Logger::LogDebug("tracklet visualize frames: " + std::to_string(start) + "-" + std::to_string(end));
 
-            if (obj.GetFrameIndex() > last_frame_index_)
+        for (auto obj : path_objects_)
+        {
+            if (obj->GetFrameIndex() >= start && obj->GetFrameIndex() <= end)
             {
-                last_frame_index_ = obj.GetFrameIndex();
+                obj->Visualize(image, color);
             }
-            else if (obj.GetFrameIndex() < frame_index_)
+        }
+    }
+
+    void Tracklet::InterpolateMissingFrames()
+    {
+        for (size_t i = 1; i < path_objects_.size(); ++i)
+        {
+            size_t gap = path_objects_[i]->GetFrameIndex() - path_objects_[i - 1]->GetFrameIndex();
+            if (gap > 1)
             {
-                frame_index_ = obj.GetFrameIndex();
+                path_objects_.insert(path_objects_.begin() + i,
+                                     path_objects_[i - 1]->Interpolate(path_objects_[i],
+                                                                       0.5));
+                --i;
             }
         }
     }
 
-    double Tracklet::CompareTo(ObjectData *obj)
+    size_t Tracklet::GetPathObjectCount() const
     {
-        return 0.0;
+        return path_objects_.size();
+    }
+
+    void Tracklet::Flatten()
+    {
+        std::vector<ObjectDataPtr> new_path_objects;
+
+        for (auto obj : path_objects_)
+        {
+            core::TrackletPtr tlt =
+                    std::static_pointer_cast<core::Tracklet>(obj);
+
+            for (auto intern_obj : tlt->path_objects_)
+            {
+                new_path_objects.push_back(intern_obj);
+            }
+        }
+
+        path_objects_ = new_path_objects;
+
+        SetFrameIndex(path_objects_.front()->GetFrameIndex());
+        last_frame_index_ = path_objects_.back()->GetFrameIndex();
     }
 }
 

+ 56 - 26
core/Tracklet.h

@@ -11,22 +11,26 @@
 
 namespace core
 {
-    //TODO sorted insert
     /**
      * A class for storing multiple object data objects.
      * The object data objects are handled as a path.
+     * All objects are stored sorted ascending by their frame index.
      */
     class Tracklet : public ObjectData
     {
     private:
         /**
          * The path objects.
+         * Sorted ascending by their frame index.
          */
-        std::vector<ObjectData> path_objects_;
+        std::vector<ObjectDataPtr> path_objects_;
+
         /**
          * The highest frame index of all objects in the path.
          */
         size_t last_frame_index_;
+
+        virtual void Print(std::ostream& os) const;
     public:
         /**
          * Creates a empty tracklet to store path object in.
@@ -35,50 +39,76 @@ namespace core
         Tracklet();
 
         /**
-         * Creates a tracklet with the given initial object.
-         * @see ObjectData
-         * @param first_object The first object to store in the path
+         * Adds the path object sorted into the tracklet.
+         * @param obj The path object to add
+         * @param overwrite If true and an object in the same frame as the given
+         *                  object already exists, the old one will be replaced
+         *                  by the new one
          */
-        Tracklet(ObjectData first_object);
+        void AddPathObject(ObjectDataPtr obj, bool overwrite = false);
 
         /**
-         * Adds the object in the first place of the path.
-         * @param obj The object to add
+         * Gets the lowest frame index of all path objects.
+         * @return The lowest frame index
          */
-        void AddPathObjectFirst(ObjectData obj);
+        size_t GetFirstFrameIndex() const;
 
         /**
-         * Adds the object in the last place of the path.
-         * @param obj The object to add
+         * Gets the highest frame index of all path objects.
+         * @return The highest frame index
          */
-        void AddPathObjectLast(ObjectData obj);
+        size_t GetLastFrameIndex() const;
 
         /**
-         * Gets the lowest frame index of all path objects.
-         * @return The lowest frame index
+         * Gets the path object at the given index.
+         * The index is NOT the frame index
+         * @return A pointer to the path object
          */
-        size_t GetFirstFrameIndex();
+        ObjectDataPtr GetPathObject(size_t i);
 
         /**
-         * Gets the highest frame index of all path objects.
-         * @return The highest frame index
+         * Gets the count of all path objects.
+         * @return The path object count
          */
-        size_t GetLastFrameIndex();
+        size_t GetPathObjectCount() const;
 
         /**
-         * Gets the path object at the given index.
+         * Interpolates between the current path objects until every missing
+         * frame has an object. Only frames between the first frame index and
+         * the last frame index are interpolated.
          */
-        ObjectData GetPathObject(size_t i);
+        void InterpolateMissingFrames();
+
+        virtual double CompareTo(ObjectDataPtr obj) const override;
+
+        virtual ObjectDataPtr Interpolate(ObjectDataPtr obj,
+                                          double fraction) const override;
+
+        virtual void Visualize(cv::Mat& image, cv::Scalar& color) const override;
 
         /**
-         * Compares this object with the given object.
-         * @param obj A pointer to the object to compare this object to
-         * @return A double value indicating the comparison result
+         * Visualizes the tracklet by visualizing the path object in the given
+         * frame and the number of path objects in the given range before and
+         * after the given frame.
+         * @param image The image to write into
+         * @param color The color to use
+         * @param frame The frame index to visualize the path objects from
+         * @param predecessor_count The number of path objects to visualize
+         *                          before the given frame
+         * @param successor_count The number of path objects to visualize after
+         *                        the given frame
          */
-        virtual double CompareTo(ObjectData *obj);
+        void Visualize(cv::Mat& image, cv::Scalar& color, size_t frame,
+                       size_t predecessor_count, size_t successor_count) const;
 
-        //TODO point interpolation -> object data (last object of this with first of other)
-        //TODO implement CompareTo (last object of this with first of other)
+        /**
+         * Flattens the current tracklet one level.
+         * That means, that if this tracklet contains other tracklets as path
+         * objects, their path objects are all extracted and used as the new
+         * path objects of this tracklet. The old tracklet path objects are
+         * removed.
+         */
+        void Flatten();
     };
 }
 

+ 157 - 33
main/main.cpp

@@ -1,56 +1,180 @@
 //
 // 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 "../visual/Visualizer.h"
+#include "../util/Logger.h"
+#include "../core/ObjectDataAngular.h"
+#include <boost/program_options.hpp>
 
-int main(void)
+void ReadInput(const std::string& input_file, core::DetectionSequence& sequence,
+               double temporal_weight, double spatial_weight, double angular_weight)
 {
-    //TODO boost command line input
-    //TODO boost config file input
-    std::cout << "Initializing values\n";
-    const char delimiter = ';';
-    const std::string full_file("/home/wrede/Dokumente/tmt_detections.csv");
-    const std::string test_file("/home/wrede/Dokumente/test.csv");
-    const std::string sequence_name("TMT_Detections_Raw");
-    size_t max_frame_skip = 1;
-    double penalty_value = 20.0;
-    size_t max_tracklet_count = 1;
-    std::vector<std::string> keys;
+    util::Logger::LogInfo("Reading input");
+
     core::Vector3d values;
+    util::FileIO::ReadCSV(values, input_file);
+    util::Parser::ParseObjectDataAngular(values, sequence,
+                                         temporal_weight,
+                                         spatial_weight,
+                                         angular_weight);
+
+    if (util::Logger::IsDebugEnabled())
+    {
+        size_t sequence_object_count = 0;
+        for (size_t i = 0; i < sequence.GetFrameCount(); i++)
+        {
+            sequence_object_count += sequence.GetObjectCount(i);
+        }
+        util::Logger::LogDebug("sequence object count " + std::to_string(sequence_object_count));
+    }
+}
+
+struct
+{
+    size_t max_frame_skip;
+    size_t max_tracklet_count;
+    double penalty_value;
+} two_stage_params;
 
-    keys.push_back("angle");
-    keys.push_back("score");
-    keys.push_back("x");
-    keys.push_back("y");
+void RunTwoStage(core::DetectionSequence& sequence, const std::string& output_file,
+                 const std::string& images_folder, bool display)
+{
+    util::Logger::LogInfo("Running two-stage");
+
+    algo::TwoStage two_stage(two_stage_params.max_frame_skip,
+                             two_stage_params.penalty_value,
+                             two_stage_params.max_tracklet_count);
+
+    // Running the two stage graph algorithm
+    algo::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());
+    std::vector<core::TrackletPtr> tracks;
+    two_stage.ExtractTracks(tlt_graph_2, 1, tracks);
 
-    std::cout << "Initializing sequence\n";
-    core::DetectionSequence sequence(sequence_name);
+    // Interpolate tracks
+    for (auto track : tracks)
+    {
+        track->InterpolateMissingFrames();
+    }
 
-    std::cout << "Reading CSV file\n";
-    util::FileIO::ReadCSV(full_file, delimiter, values);
+    // Display the tracking data
+    if (display)
+    {
+        util::Logger::LogInfo("Displaying data");
 
-    std::cout << "Parsing data\n";
-    util::Parser::ParseObjectDataMap(keys, values, sequence);
+        visual::Visualizer vis;
+        vis.Display(tracks, images_folder);
+    }
 
-    std::cout << "Initializing algorithm\n";
-    algo::TwoStage two_stage(max_frame_skip, penalty_value, max_tracklet_count);
+    util::Logger::LogInfo("Finished");
+}
+
+void Run(int argc, char** argv)
+{
+    // Algorithm independent values
+    std::string input_file, output_file, images_folder, algorithm;
+    bool display;
 
-    std::cout << "Creating object graph\n";
-    two_stage.CreateObjectGraph(sequence);
+    // Input dependent variables
+    double temporal_weight, spatial_weight, angular_weight;
 
-    std::cout << "Creating tracklet graph twice\n";
-    two_stage.CreateTrackletGraph();
-    two_stage.CreateTrackletGraph();
+    boost::program_options::options_description opts("Allowed options");
+    opts.add_options()
+            ("help",
+             "produce help message")
+            ("info",
+             "if the program should show progress information")
+            ("debug",
+             "if the program should show debug messages")
+            ("input-file,i",
+             boost::program_options::value<std::string>(&input_file),
+             "set detections file path")
+            ("output-file,o",
+             boost::program_options::value<std::string>(&output_file),
+             "set the output file path")
+            ("algorithm,a",
+             boost::program_options::value<std::string>(&algorithm),
+             "set the algorithm to use, current viable options: two-stage")
+            ("display",
+             "if a window with the images and the detected tracks should be opened")
+            ("images-folder,f",
+             boost::program_options::value<std::string>(&images_folder),
+             "set images folder path")
+            ("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")
+            ("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")
+            ("penalty-value",
+             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),
+             "temporal weight for difference calculations between two detections")
+            ("spatial-weight",
+             boost::program_options::value<double>(&spatial_weight)->default_value(0.3),
+             "spatial weight for difference calculations between two detections")
+            ("angular-weight",
+             boost::program_options::value<double>(&angular_weight)->default_value(0.3),
+             "angular weight for difference calculations between two detections");
 
-    std::cout << "Extracting final paths\n";
-    two_stage.ExtractTracks();
+    boost::program_options::variables_map opt_var_map;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+    boost::program_options::store(boost::program_options::parse_command_line(argc, argv, opts), opt_var_map);
+#pragma clang diagnostic pop
+    boost::program_options::notify(opt_var_map);
+
+    if (opt_var_map.count("help") != 0)
+    {
+        std::cout << opts << std::endl;
+        exit(0);
+    }
+
+    if (opt_var_map.count("info") != 0)
+    {
+        util::Logger::SetInfo(true);
+        util::Logger::LogInfo("Enabled");
+    }
+
+    if (opt_var_map.count("debug") != 0)
+    {
+        util::Logger::SetDebug(true);
+        util::Logger::LogDebug("Enabled");
+    }
+
+    display = opt_var_map.count("display") != 0;
+
+    core::DetectionSequence sequence;
+
+    ReadInput(input_file, sequence, temporal_weight, spatial_weight, angular_weight);
+
+    if (algorithm == "two-stage")
+    {
+        RunTwoStage(sequence, output_file, images_folder, display);
+    }
+    else
+    {
+        std::cout << opts << std::endl;
+        exit(0);
+    }
+}
+
+int main(int argc, char** argv)
+{
+    Run(argc, argv);
 
-    std::cout << "Finished successfully\n" << std::flush;
+    //TestTracklet();
 
     return 0;
 }

+ 15 - 10
util/FileIO.cpp

@@ -3,14 +3,15 @@
 //
 
 #include "FileIO.h"
+#include "Logger.h"
 
 namespace util
 {
-    void FileIO::ReadCSV(
-            const std::string &filename,
-            const char &delimiter,
-            core::Vector3d &values)
+    void FileIO::ReadCSV(core::Vector3d& values, const std::string& filename,
+                         const char& delimiter)
     {
+        Logger::LogInfo("Reading CSV file");
+
         std::ifstream in(filename, std::ifstream::in);
         std::string line;
 
@@ -24,7 +25,7 @@ namespace util
 
             // Get frame index
             size_t dIndex = line.find(delimiter);
-            size_t frameIndex = std::stoul(line.substr(0, dIndex).c_str()) - 1;
+            size_t frameIndex = std::stoul(line.substr(0, dIndex).c_str());
 
             // Extract point values
             std::vector<double> pointValues;
@@ -36,7 +37,7 @@ namespace util
             }
 
             // Add point data to detection data
-            if (frameIndex >= values.size())
+            while (frameIndex >= values.size())
             {
                 values.push_back(std::vector<std::vector<double>>());
             }
@@ -45,13 +46,15 @@ namespace util
         }
 
         in.close();
+
+        Logger::LogDebug("frame count " + std::to_string(values.size()));
     }
 
-    void FileIO::ReadCSV(
-            const std::string &filename,
-            const char &delimiter,
-            core::Vector2d &values)
+    void FileIO::ReadCSV(core::Vector2d& values, const std::string& filename,
+                         const char& delimiter)
     {
+        Logger::LogInfo("Reading CSV file");
+
         std::ifstream in(filename, std::ifstream::in);
         std::string line;
 
@@ -83,6 +86,8 @@ namespace util
         }
 
         in.close();
+
+        Logger::LogDebug("line count " + std::to_string(values.size()));
     }
 }
 

+ 7 - 10
util/FileIO.h

@@ -24,25 +24,22 @@ namespace util
          * single vector.
          * The second dimension is the row in the row bundle.
          * The third dimension is the value in that row.
+         * @param values The 3D array of values to store the read values in
          * @param filename The filename to read from
          * @param delimiter The delimiter used to separate the values in the file
-         * @param values The 3D array of values to store the read values in
          */
-        static void ReadCSV(
-                const std::string &filename,
-                const char &delimiter,
-                core::Vector3d &values);
+        static void ReadCSV(core::Vector3d& values, const std::string& filename,
+                            const char& delimiter = ';');
+
         /**
          * Reads a CSV file and stores the values in a 2D array.
          * The first dimension is the row and the second the value in that row.
+         * @param values The 2D array of values to store the read values in
          * @param filename The filename to read from
          * @param delimiter The delimiter used to separate the values in the file
-         * @param values The 2D array of values to store the read values in
          */
-        static void ReadCSV(
-                const std::string &filename,
-                const char &delimiter,
-                core::Vector2d &values);
+        static void ReadCSV(core::Vector2d& values, const std::string& filename,
+                            const char& delimiter = ';');
     };
 }
 

+ 56 - 0
util/Logger.cpp

@@ -0,0 +1,56 @@
+//
+// Created by wrede on 12.05.16.
+//
+
+#include <iostream>
+#include "Logger.h"
+
+namespace util
+{
+    Logger::Logger() : debug_(false), info_(false)
+    {
+        /* EMPTY */
+    }
+
+    void Logger::LogInfo(const std::string& message)
+    {
+        if (Instance().info_)
+        {
+            std::cout << "[Info] " << message << std::endl;
+        }
+    }
+
+    void Logger::LogError(const std::string& message)
+    {
+        std::cout << "[Error] " << message << std::endl;
+    }
+
+    void Logger::LogDebug(const std::string& message)
+    {
+        if (Instance().debug_)
+        {
+            std::cout << "[Debug] " << message << std::endl;
+        }
+    }
+
+    void Logger::SetDebug(bool debug)
+    {
+        Instance().debug_ = debug;
+    }
+
+    void Logger::SetInfo(bool info)
+    {
+        Instance().info_ = info;
+    }
+
+    bool Logger::IsDebugEnabled()
+    {
+        return Instance().debug_;
+    }
+
+    bool Logger::IsInfoEnabled()
+    {
+        return Instance().info_;
+    }
+}
+

+ 99 - 0
util/Logger.h

@@ -0,0 +1,99 @@
+//
+// Created by wrede on 12.05.16.
+//
+
+#ifndef GBMOT_LOGGER_H
+#define GBMOT_LOGGER_H
+#include <string>
+
+namespace util
+{
+    /**
+     * Utility class for logging.
+     * Is a singleton.
+     * Provides three different types of messages.
+     */
+    class Logger
+    {
+    private:
+        /**
+         * -> Singleton
+         */
+        Logger();
+
+        /**
+         * True, if the info messages should be logged
+         */
+        bool info_;
+
+        /**
+         * True, if the debug messages should be logged
+         */
+        bool debug_;
+    public:
+        /**
+         * -> Singleton
+         */
+        Logger(Logger const&) = delete;
+
+        /**
+         * -> Singleton
+         */
+        void operator=(Logger const&) = delete;
+
+        /**
+         * Gets THE instance of this singleton.
+         * Creates a new instance if not already created.
+         */
+        static Logger& Instance()
+        {
+            static Logger instance;
+            return instance;
+        }
+
+        /**
+         * Sets the debug message logging.
+         * @param debug True, if the debug messages should be logged
+         */
+        static void SetDebug(bool debug);
+
+        /**
+         * Sets the info message logging.
+         * @param info True, if the info messages should be logged
+         */
+        static void SetInfo(bool info);
+
+        /**
+         * If the debug messages are logged.
+         * @return True, if the debug messages are logged
+         */
+        static bool IsDebugEnabled();
+
+        /**
+         * If the info messages are logged.
+         * @return True, if the info messages are logged
+         */
+        static bool IsInfoEnabled();
+
+        /**
+         * Logs the given message as an info message.
+         * @param message The info message to log
+         */
+        static void LogInfo(const std::string& message);
+
+        /**
+         * Logs the given message as an error message.
+         * @param message The error message to log
+         */
+        static void LogError(const std::string& message);
+
+        /**
+         * Logs the given message as an debug message.
+         * @param message The debug message to log
+         */
+        static void LogDebug(const std::string& message);
+    };
+}
+
+
+#endif //GBMOT_LOGGER_H

+ 44 - 0
util/MyMath.cpp

@@ -0,0 +1,44 @@
+//
+// Created by wrede on 02.05.16.
+//
+
+#include "MyMath.h"
+
+namespace util
+{
+    double MyMath::Clamp(double min, double max, double value)
+    {
+        if (value < min)
+        {
+            return min;
+        }
+        else if (value > max)
+        {
+            return max;
+        }
+        else
+        {
+            return value;
+        }
+    }
+
+    double MyMath::Lerp(double a, double b, double value)
+    {
+        return (b - a) * value + a;
+    }
+
+    double MyMath::InverseLerp(double a, double b, double value)
+    {
+        return (value - a) / (b - a);
+    }
+
+    double MyMath::EuclideanDistance(cv::Point3d a, cv::Point3d b)
+    {
+        double dx = b.x - a.x;
+        double dy = b.y - a.y;
+        double dz = b.z - a.z;
+        return std::sqrt(dx * dx + dy * dy + dz * dz);
+    }
+}
+
+

+ 58 - 0
util/MyMath.h

@@ -0,0 +1,58 @@
+//
+// Created by wrede on 02.05.16.
+//
+
+#ifndef GBMOT_UTILITY_H
+#define GBMOT_UTILITY_H
+
+#include <cstdlib>
+#include <cmath>
+#include <opencv2/core/core.hpp>
+
+namespace util
+{
+    /**
+     * Utility class for mathematical operations.
+     */
+    class MyMath
+    {
+    public:
+        /**
+         * Clamps the value between min and max, both inclusive.
+         * @param min The minimum value
+         * @param max The maximum value
+         * @param value The value to clamp
+         * @return The clamped value
+         */
+        static double Clamp(double min, double max, double value);
+
+        /**
+         * Linearly interpolates between a and b at value.
+         * @param a The first value
+         * @param b The second value
+         * @param value The interpolation value
+         * @return The interpolated value
+         */
+        static double Lerp(double a, double b, double value);
+
+        /**
+         * Inverse linearly interpolates between a and b at value.
+         * @param a The first value
+         * @param b The second value
+         * @param value The value to get the interpolation of
+         * @return The interpolation value
+         */
+        static double InverseLerp(double a, double b, double value);
+
+        /**
+         * Calculates the euclidean distance of the given points.
+         * @param a The first point in 3D space
+         * @param b The second point in 3D space
+         * @return The euclidean distance
+         */
+        static double EuclideanDistance(cv::Point3d a, cv::Point3d b);
+    };
+}
+
+
+#endif //GBMOT_UTILITY_H

+ 161 - 8
util/Parser.cpp

@@ -3,26 +3,179 @@
 //
 
 #include "Parser.h"
+#include "MyMath.h"
+#include "Logger.h"
+#include "../core/ObjectDataAngular.h"
 
 namespace util
 {
     void Parser::ParseObjectDataMap(
-                const std::vector<std::string> &keys,
-                const core::Vector3d &values,
-                core::DetectionSequence &sequence)
+            const std::vector<std::string>& keys,
+            const core::Vector3d& values,
+            core::DetectionSequence& sequence)
+    {
+        util::Logger::LogInfo("Parsing ObjectDataMap");
+
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                core::ObjectDataMapPtr object(
+                        new core::ObjectDataMap(frame_i, keys,
+                                                values[frame_i][object_i]));
+
+                sequence.AddObject(object);
+            }
+        }
+    }
+
+    void Parser::ParseObjectData3D(const core::Vector3d& values,
+                                   core::DetectionSequence& sequence)
+    {
+        util::Logger::LogInfo("Parsing ObjectData3D");
+
+        // Calculate max and min score to normalize the score
+        double max_score = std::numeric_limits<double>::min();
+        double min_score = std::numeric_limits<double>::max();
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                double score = values[frame_i][object_i][1];
+                if (score > max_score)
+                {
+                    max_score = score;
+                }
+                if (score < min_score)
+                {
+                    min_score = score;
+                }
+            }
+        }
+
+        // Create objects
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                double score = values[frame_i][object_i][1];
+                double x = values[frame_i][object_i][2];
+                double y = values[frame_i][object_i][3];
+                double z = 0.0;
+                cv::Point3d point(x, y, z);
+
+                core::ObjectData3DPtr object(new core::ObjectData3D(frame_i, point));
+
+                object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
+
+                sequence.AddObject(object);
+            }
+        }
+    }
+
+    void Parser::ParseObjectDataAngular(const core::Vector3d& values,
+                                        core::DetectionSequence& sequence)
+    {
+        util::Logger::LogInfo("Parsing ObjectDataAngular");
+
+        // Calculate max and min score to normalize the score
+        double max_score = std::numeric_limits<double>::min();
+        double min_score = std::numeric_limits<double>::max();
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
         {
-            for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
             {
-                for (size_t object_i = 0; object_i < values[frame_i].size();
-                     ++object_i)
+                double score = values[frame_i][object_i][1];
+                if (score > max_score)
                 {
-                    core::ObjectDataMap object(frame_i, keys, values[frame_i][object_i]);
+                    max_score = score;
+                }
+                if (score < min_score)
+                {
+                    min_score = score;
+                }
+            }
+        }
+
+        // Create objects
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                double angle = (values[frame_i][object_i][0] * 3.14159) / 180.0;
+                double score = values[frame_i][object_i][1];
+                double x = values[frame_i][object_i][2];
+                double y = values[frame_i][object_i][3];
+                double z = 0.0;
+                cv::Point3d point(x, y, z);
+
+                core::ObjectDataAngularPtr object(new core::ObjectDataAngular(frame_i, point, angle));
+
+                object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
+
+                sequence.AddObject(object);
+            }
+        }
+    }
 
-                    sequence.AddObject(object);
+    void Parser::ParseObjectDataAngular(const core::Vector3d& values,
+                                        core::DetectionSequence& sequence,
+                                        double temporal_weight,
+                                        double spatial_weight,
+                                        double angular_weight)
+    {
+        util::Logger::LogInfo("Parsing ObjectDataAngular");
+
+        // Calculate max and min score to normalize the score
+        double max_score = std::numeric_limits<double>::min();
+        double min_score = std::numeric_limits<double>::max();
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                double score = values[frame_i][object_i][1];
+                if (score > max_score)
+                {
+                    max_score = score;
+                }
+                if (score < min_score)
+                {
+                    min_score = score;
                 }
             }
         }
 
+        // Create objects
+        for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
+        {
+            for (size_t object_i = 0; object_i < values[frame_i].size();
+                 ++object_i)
+            {
+                double angle = (values[frame_i][object_i][0] * 3.14159) / 180.0;
+                double score = values[frame_i][object_i][1];
+                double x = values[frame_i][object_i][2];
+                double y = values[frame_i][object_i][3];
+                double z = 0.0;
+                cv::Point3d point(x, y, z);
+
+                core::ObjectDataAngularPtr object(
+                        new core::ObjectDataAngular(frame_i, point, angle,
+                                                    temporal_weight,
+                                                    spatial_weight,
+                                                    angular_weight));
+
+                object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
+
+                sequence.AddObject(object);
+            }
+        }
+    }
 }
 
 

+ 41 - 5
util/Parser.h

@@ -7,6 +7,10 @@
 
 #include "../core/Definitions.h"
 #include "../core/DetectionSequence.h"
+#include "../core/ObjectData.h"
+#include "../core/ObjectDataMap.h"
+#include "../core/ObjectData3D.h"
+#include <opencv2/core/core.hpp>
 
 namespace util
 {
@@ -16,20 +20,52 @@ namespace util
     class Parser
     {
     public:
+        //TODO define csv value order
         /**
          * Parses the keys and values into a DetectionSequence of ObjectDataMap
          * objects.
          * The keys are used for the third dimension in the values list.
-         * @see DetectionSequence
-         * @see ObjectDataMap
          * @param keys A 1D vector of keys
          * @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);
+                const std::vector<std::string>& keys,
+                const core::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);
+
+        /**
+         * 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);
+
+        /**
+         * Parses the values into a DetectionSequence of ObjectDataAngular objects.
+         * The keys are used for the third dimension in the values list.
+         * @param values A 3D vector of values
+         * @param sequence The sequence to store the created objects in
+         * @param temporal_weight The temporal weight
+         * @param spatial_weight The spatial weight
+         * @param angular_weight The angular weight
+         */
+        static void ParseObjectDataAngular(const core::Vector3d& values,
+                                           core::DetectionSequence& sequence,
+                                           double temporal_weight,
+                                           double spatial_weight,
+                                           double angular_weight);
     };
 }
 

+ 241 - 0
visual/Visualizer.cpp

@@ -0,0 +1,241 @@
+//
+// Created by wrede on 04.05.16.
+//
+
+#include "Visualizer.h"
+#include "../util/Logger.h"
+#include "../core/ObjectDataAngular.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,
+                             int play_fps)
+    {
+        size_t current_frame = first_frame;
+
+        // Load images
+        std::vector<std::string> image_files;
+        LoadImages(image_folder, image_files);
+
+        if (image_files.size() != sequence.GetFrameCount())
+        {
+            perror("Image count and frame count don't match\n");
+        }
+
+        // Create window
+        cv::namedWindow(title, CV_WINDOW_AUTOSIZE);
+
+        // Display frames and data
+        int target_delay = 1000 / play_fps;
+        int last_frame_time = GetTime();
+        int current_delay, current_frame_time;
+        bool play = false;
+        while (true)
+        {
+            // Display image
+            cv::Mat image = cv::imread(image_folder + "/"
+                                       + image_files[current_frame],
+                                       1);
+
+
+            for (size_t i = 0; i < sequence.GetObjectCount(current_frame); ++i)
+            {
+                core::ObjectDataPtr obj = sequence.GetObject(current_frame, i);
+
+                // BGR
+                cv::Scalar color(0,
+                                 (1.0 - obj->GetDetectionScore()) * 255,
+                                 obj->GetDetectionScore() * 255);
+
+                obj->Visualize(image, color);
+            }
+
+            cv::imshow(title, image);
+
+            // Receive key input
+            int key;
+
+            if (play)
+            {
+                current_frame_time = GetTime();
+                current_delay = last_frame_time - current_frame_time;
+                if (current_delay < target_delay)
+                {
+                    key = cv::waitKey(target_delay - current_delay);
+                }
+                else
+                {
+                    key = 0;
+                }
+                last_frame_time = GetTime();
+            }
+            else
+            {
+                key = cv::waitKey(0);
+            }
+
+            // Process key input
+            if (key == 1048678) // F
+            {
+                play = !play;
+            }
+            else if (key == 1048603) // ESC
+            {
+                break;
+            }
+
+            if (play || key == 1048676) // D
+            {
+                if (current_frame < image_files.size() - 1)
+                {
+                    current_frame++;
+                }
+                else
+                {
+                    current_frame = image_files.size() - 1;
+                    play = false;
+                }
+            }
+            else if (key == 1048673) // A
+            {
+                if (current_frame > 0)
+                {
+                    current_frame--;
+                }
+            }
+        }
+    }
+
+    int Visualizer::GetTime()
+    {
+        return std::chrono::duration_cast<std::chrono::milliseconds>(
+                std::chrono::system_clock::now().time_since_epoch()).count();
+    }
+
+    void Visualizer::Display(std::vector<core::TrackletPtr>& tracks,
+                             std::string image_folder, std::string title,
+                             size_t first_frame, int play_fps)
+    {
+        size_t current_frame = first_frame;
+
+        // Load images
+        std::vector<std::string> image_files;
+        LoadImages(image_folder, image_files);
+
+        // Create window
+        cv::namedWindow(title, CV_WINDOW_AUTOSIZE);
+
+        // Generate a random color for each individual track
+        std::vector<cv::Scalar> colors;
+        std::random_device rd;
+        std::mt19937 gen(rd());
+        for (size_t i = 0; i < tracks.size(); ++i)
+        {
+            // BGR
+            cv::Scalar color(std::generate_canonical<double, 10>(gen) * 255,
+                             std::generate_canonical<double, 10>(gen) * 255,
+                             std::generate_canonical<double, 10>(gen) * 255);
+            colors.push_back(color);
+        }
+
+        // Display frames and data
+        int target_delay = 1000 / play_fps;
+        int last_frame_time = GetTime();
+        int current_delay, current_frame_time;
+        bool play = false;
+        while (true)
+        {
+            // Display image
+            cv::Mat image = cv::imread(image_folder + "/"
+                                       + image_files[current_frame],
+                                       1);
+
+            util::Logger::LogDebug("visualize frame " + std::to_string(current_frame));
+            for (size_t i = 0; i < tracks.size(); ++i)
+            {
+                tracks[i]->Visualize(image, colors[i], current_frame, 1, 1);
+            }
+
+            cv::imshow(title, image);
+
+            // Get key input
+            int key;
+            if (play)
+            {
+                current_frame_time = GetTime();
+                current_delay = last_frame_time - current_frame_time;
+                if (current_delay < target_delay)
+                {
+                    key = cv::waitKey(target_delay - current_delay);
+                }
+                else
+                {
+                    key = 0;
+                }
+                last_frame_time = GetTime();
+            }
+            else
+            {
+                key = cv::waitKey(0);
+            }
+
+            // Process key input
+            if (key == 1048678) // F
+            {
+                play = !play;
+            }
+            else if (key == 1048603) // ESC
+            {
+                break;
+            }
+
+            if (play || key == 1048676) // D
+            {
+                if (current_frame < image_files.size() - 1)
+                {
+                    current_frame++;
+                }
+                else
+                {
+                    current_frame = image_files.size() - 1;
+                    play = false;
+                }
+            }
+            else if (key == 1048673) // A
+            {
+                if (current_frame > 0)
+                {
+                    current_frame--;
+                }
+            }
+        }
+    }
+}

+ 74 - 0
visual/Visualizer.h

@@ -0,0 +1,74 @@
+//
+// Created by wrede on 04.05.16.
+//
+
+#ifndef GBMOT_VISUALIZER_H
+#define GBMOT_VISUALIZER_H
+
+#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"
+#include <chrono>
+#include <random>
+
+namespace visual
+{
+    /**
+     * Utility class for visualizing detection sequences or tracks.
+     */
+    class Visualizer
+    {
+    private:
+        /**
+         * Gets the current time in milliseconds.
+         * @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.
+         * Use D for next frame, A for previous frame, F to toggle auto play and
+         * ESC to exit.
+         * @param sequence The sequence of detection data to display
+         * @param image_folder The images to use
+         * @param title The window title
+         * @param first_frame The frame to start at
+         * @param play_fps The FPS to use when auto play is activated.
+         */
+        void Display(core::DetectionSequence& sequence,
+                     std::string image_folder,
+                     std::string title = "Visualizer", size_t first_frame = 0,
+                     int play_fps = 24);
+
+        /**
+         * Displays the given tracks in an window.
+         * Use D for next frame, A for previous frame, F to toggle auto play and
+         * ESC to exit.
+         * @param tracks The tracks to display
+         * @param image_folder The images to use
+         * @param title The window title
+         * @param first_frame The frame to start at
+         * @param play_fps The FPS to use when auto play is activated.
+         */
+        void Display(std::vector<core::TrackletPtr>& tracks,
+                     std::string image_folder,
+                     std::string title = "Visualizer", size_t first_frame = 0,
+                     int play_fps = 24);
+    };
+}
+
+
+#endif //GBMOT_VISUALIZER_H

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott