changeset 180:3a4eef37384f

method to add features and vertices to graph
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 01 Nov 2011 00:12:33 -0400
parents 4f10e97cb677
children 42142c5223ce
files c/Motion.cpp c/feature-based-tracking.cpp include/Motion.hpp
diffstat 3 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/c/Motion.cpp	Mon Oct 31 19:17:42 2011 -0400
+++ b/c/Motion.cpp	Tue Nov 01 00:12:33 2011 -0400
@@ -120,3 +120,26 @@
 
 /******************** FeatureGraph ********************/
 
+void FeatureGraph::addFeature(const FeatureTrajectoryPtr& ft) {
+  UndirectedGraph::vertex_descriptor newVertex = add_vertex(graph);
+  graph[newVertex].feature = ft;
+  for (boost::graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first; 
+       vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor
+    FeatureTrajectoryPtr ft2 = graph[*vi].feature;
+    unsigned int lastInstant = min(ft->getLastInstant(), ft2->getLastInstant());
+    unsigned int firstInstant = max(ft->getLastInstant(), ft2->getLastInstant());
+    if (lastInstant-firstInstant > minFeatureTime) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime
+      // compute the distance and add edge if ok
+      UndirectedGraph::edge_descriptor e;
+      bool unused;
+      tie(e, unused) = add_edge(newVertex, *vi, graph);
+      // no need to add measures to graph[e]
+    }
+  }
+}
+
+string FeatureGraph::informationString(void) {
+  stringstream ss;
+  ss << num_vertices(graph) << " vertices, " << num_edges(graph) << " edges";
+  return ss.str();
+}
--- a/c/feature-based-tracking.cpp	Mon Oct 31 19:17:42 2011 -0400
+++ b/c/feature-based-tracking.cpp	Tue Nov 01 00:12:33 2011 -0400
@@ -138,8 +138,6 @@
   vector<FeatureTrajectoryPtr> lostFeatures;
   vector<FeaturePointMatch> featurePointMatches;
 
-  FeatureGraph graph(params.mmConnectionDistance, params.mmSegmentationDistance);
-    
   int key = '?';
   unsigned int savedFeatureId=0;
   Mat frame, currentFrameBW, previousFrameBW;
@@ -269,11 +267,13 @@
   trajectoryDB->maxTrajectoryLength(maxTrajectoryLength);
   cout << "max trajectory length " << maxTrajectoryLength << endl;
 
+  FeatureGraph featureGraph(params.mmConnectionDistance, params.mmSegmentationDistance, params.minFeatureTime);
+
   // main loop
   // TODO version que l'on peut interrompre ?
   for (int frameNum = params.frame1; ((frameNum-params.frame1 < params.nFrames) || (params.nFrames < 0)); frameNum++) {
     vector<int> trajectoryIds;
-    success  = trajectoryDB->trajectoryIdStartingAt(trajectoryIds, frameNum); // ending
+    success  = trajectoryDB->trajectoryIdEndingAt(trajectoryIds, frameNum); // ending
     cout << "frame " << frameNum << " " << success << endl;
     cout << trajectoryIds.size() << " trajectories " << endl;
     BOOST_FOREACH(int trajectoryId, trajectoryIds) {
@@ -281,13 +281,15 @@
       // boost::shared_ptr<Trajectory<cv::Point2f> > trajectory;
       // success = trajectoryDB->read(trajectory, trajectoryId, "positions"); // velocities
       FeatureTrajectoryPtr ft = FeatureTrajectoryPtr(new FeatureTrajectory(trajectoryId, *trajectoryDB, "positions", "velocities"));
-      stringstream ss;ss << *ft; cout << ss.str() << endl;
-      cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl;
+      // stringstream ss;ss << *ft; cout << ss.str() << endl;
+      // cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl;
+      featureGraph.addFeature(ft);
     }
 
     // should the trajectory be loaded one by one? yes
 
-    }
+    cout << featureGraph.informationString() << endl;
+  }
 
   trajectoryDB->endTransaction();
   trajectoryDB->disconnect();
--- a/include/Motion.hpp	Mon Oct 31 19:17:42 2011 -0400
+++ b/include/Motion.hpp	Tue Nov 01 00:12:33 2011 -0400
@@ -88,13 +88,15 @@
 class FeatureGraph {
 public:
   //FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {}
-  FeatureGraph(float _connectionDistance, float _segmentationDistance) : connectionDistance (_connectionDistance), segmentationDistance(_segmentationDistance) {}
+  FeatureGraph(float _connectionDistance, float _segmentationDistance, unsigned int _minFeatureTime) : connectionDistance (_connectionDistance), segmentationDistance(_segmentationDistance), minFeatureTime(_minFeatureTime) {}
 
   void addFeature(const FeatureTrajectoryPtr& ft);
 
   // add vertex, includes adding links to current vertices
   // find connected components, check if old enough, if so, remove
 
+  std::string informationString(void);
+
 protected:
   struct FeatureConnection {
     float minDistance;
@@ -109,6 +111,7 @@
 
   float connectionDistance;
   float segmentationDistance;
+  unsigned int minFeatureTime;
   // float minDistance;
   // float maxDistance;