comparison c/Motion.cpp @ 200:0a27fa343257

added one test and cleaned the first and last instant mess
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 02 Mar 2012 19:32:54 -0500
parents aeab0b88c9b6
children f7ddfc4aeb1e
comparison
equal deleted inserted replaced
199:ca9d9104afba 200:0a27fa343257
18 using namespace cv; 18 using namespace cv;
19 using namespace boost; 19 using namespace boost;
20 20
21 /******************** FeatureTrajectory ********************/ 21 /******************** FeatureTrajectory ********************/
22 22
23 FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const Mat& homography) 23 FeatureTrajectory::FeatureTrajectory(const unsigned int& frameNum, const cv::Point2f& p, const Mat& homography)
24 : lost(false) { 24 : firstInstant(frameNum), lastInstant(frameNum) {
25 positions = TrajectoryPoint2fPtr(new TrajectoryPoint2f()); 25 positions = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
26 velocities = TrajectoryPoint2fPtr(new TrajectoryPoint2f()); 26 velocities = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
27 addPoint(frameNum, p, homography); 27 addPoint(frameNum, p, homography);
28 } 28 }
29 29
30 FeatureTrajectory::FeatureTrajectory(TrajectoryPoint2fPtr& _positions, TrajectoryPoint2fPtr& _velocities) 30 FeatureTrajectory::FeatureTrajectory(TrajectoryPoint2fPtr& _positions, TrajectoryPoint2fPtr& _velocities) {
31 : lost(false) {
32 positions = _positions; 31 positions = _positions;
33 velocities = _velocities; 32 velocities = _velocities;
33 positions->computeInstants(firstInstant, lastInstant);
34 } 34 }
35 35
36 FeatureTrajectory::FeatureTrajectory(const int& id, TrajectoryDBAccessList<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) { 36 FeatureTrajectory::FeatureTrajectory(const int& id, TrajectoryDBAccessList<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) {
37 bool success = trajectoryDB.read(positions, id, positionsTableName); 37 bool success = trajectoryDB.read(positions, id, positionsTableName);
38 if (!success) 38 if (!success)
89 } 89 }
90 90
91 return connected; 91 return connected;
92 } 92 }
93 93
94 void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p, const Mat& homography) { 94 void FeatureTrajectory::addPoint(const unsigned int& frameNum, const Point2f& p, const Mat& homography) {
95 Point2f pp = p; 95 Point2f pp = p;
96 if (!homography.empty()) 96 if (!homography.empty())
97 pp = project(p, homography); 97 pp = project(p, homography);
98 positions->add(frameNum, pp); 98 positions->add(frameNum, pp);
99 if (frameNum < firstInstant)
100 firstInstant = frameNum;
101 if (frameNum > lastInstant)
102 lastInstant = frameNum;
99 computeMotionData(frameNum); 103 computeMotionData(frameNum);
100 assert(positions.size() == displacementDistances.size()+1); 104 assert(positions.size() == displacementDistances.size()+1);
101 assert(positions.size() == velocities.size()+1); 105 assert(positions.size() == velocities.size()+1);
102 } 106 }
103 107
151 vertex_descriptor newVertex = add_vertex(graph); 155 vertex_descriptor newVertex = add_vertex(graph);
152 graph[newVertex].feature = ft; 156 graph[newVertex].feature = ft;
153 for (graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first; 157 for (graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first;
154 vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor 158 vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor
155 FeatureTrajectoryPtr ft2 = graph[*vi].feature; 159 FeatureTrajectoryPtr ft2 = graph[*vi].feature;
156 int lastInstant = static_cast<int>(min(ft->getLastInstant(), ft2->getLastInstant())); 160 if (newVertex != *vi) {
157 int firstInstant = static_cast<int>(max(ft->getFirstInstant(), ft2->getFirstInstant())); 161 int lastInstant = static_cast<int>(min(ft->getLastInstant(), ft2->getLastInstant()));
158 if (lastInstant-firstInstant > static_cast<int>(minFeatureTime)) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime 162 int firstInstant = static_cast<int>(max(ft->getFirstInstant(), ft2->getFirstInstant()));
159 if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) { 163 if (lastInstant-firstInstant > static_cast<int>(minFeatureTime)) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime
160 UndirectedGraph::edge_descriptor e; 164 if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) {
161 bool unused; 165 UndirectedGraph::edge_descriptor e;
162 tie(e, unused) = add_edge(newVertex, *vi, graph); 166 bool unused;
163 // no need to add measures to graph[e] (edge properties) 167 tie(e, unused) = add_edge(newVertex, *vi, graph);
168 // no need to add measures to graph[e] (edge properties)
169 }
164 } 170 }
165 } 171 }
166 } 172 }
167 } 173 }
168 174