Mercurial Hosting > traffic-intelligence
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;