# HG changeset patch # User Nicolas Saunier # Date 1320120753 14400 # Node ID 3a4eef37384f629b8455d69b5676f61c02d2bdb3 # Parent 4f10e97cb677c88fceb85f28d70f4d97a8ee3505 method to add features and vertices to graph diff -r 4f10e97cb677 -r 3a4eef37384f c/Motion.cpp --- 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::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(); +} diff -r 4f10e97cb677 -r 3a4eef37384f c/feature-based-tracking.cpp --- 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 lostFeatures; vector 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 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; // 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(); diff -r 4f10e97cb677 -r 3a4eef37384f include/Motion.hpp --- 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;