Mercurial > hg > nsaunier > traffic-intelligence
annotate c/Motion.cpp @ 398:3399bd48cb40
Ajout d'une méthode pour obtenir le nombre de FPS
Méthode de capture des trames vidéos plus résistante aux erreur
Utilisation d'un dictionnaire pour les fichier de configuration afin de garder le nom des sections
| author | Jean-Philippe Jodoin <jpjodoin@gmail.com> |
|---|---|
| date | Mon, 29 Jul 2013 13:46:07 -0400 |
| parents | 03dbecd3a887 |
| children | f43bc0b0ba74 |
| rev | line source |
|---|---|
|
136
0f790de9437e
renamed Feature to Motion files and added code to test blob db
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
135
diff
changeset
|
1 #include "Motion.hpp" |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
2 #include "cvutils.hpp" |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
3 |
|
188
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
4 #include "src/TrajectoryDBAccessList.h" |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
5 |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
6 #include "opencv2/core/core.hpp" |
|
132
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
7 #include "opencv2/highgui/highgui.hpp" |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
8 |
|
188
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
9 #include <boost/graph/connected_components.hpp> |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
10 |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
11 #include <iostream> |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
12 #include <vector> |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
13 #include <map> |
|
188
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
14 #include <algorithm> |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
15 #include <utility> |
|
133
63dd4355b6d1
saving of feature positions in sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
132
diff
changeset
|
16 |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
17 using namespace std; |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
18 using namespace cv; |
|
190
36968a63efe1
Got the connected_components to finally work using a vecS for the vertex list in the adjacency list.
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
189
diff
changeset
|
19 using namespace boost; |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
20 |
|
163
cde87a07eb58
added graph structures
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
147
diff
changeset
|
21 /******************** FeatureTrajectory ********************/ |
|
cde87a07eb58
added graph structures
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
147
diff
changeset
|
22 |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
23 FeatureTrajectory::FeatureTrajectory(const unsigned int& frameNum, const cv::Point2f& p, const Mat& homography) |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
24 : firstInstant(frameNum), lastInstant(frameNum) { |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
25 positions = TrajectoryPoint2fPtr(new TrajectoryPoint2f()); |
|
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
26 velocities = TrajectoryPoint2fPtr(new TrajectoryPoint2f()); |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
27 addPoint(frameNum, p, homography); |
|
132
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
28 } |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
29 |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
30 FeatureTrajectory::FeatureTrajectory(TrajectoryPoint2fPtr& _positions, TrajectoryPoint2fPtr& _velocities) { |
|
177
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
31 positions = _positions; |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
32 velocities = _velocities; |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
33 positions->computeInstants(firstInstant, lastInstant); |
|
177
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
34 } |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
35 |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
36 FeatureTrajectory::FeatureTrajectory(const int& id, TrajectoryDBAccessList<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) { |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
37 bool success = trajectoryDB.read(positions, id, positionsTableName); |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
38 if (!success) |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
39 cout << "problem loading positions" << endl; |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
40 success = trajectoryDB.read(velocities, id, velocitiesTableName); |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
41 if (!success) |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
42 cout << "problem loading velocities" << endl; |
|
179
4f10e97cb677
added getting first and last instant for each feature
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
177
diff
changeset
|
43 // take advantage to request first and last instant from database |
|
4f10e97cb677
added getting first and last instant for each feature
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
177
diff
changeset
|
44 trajectoryDB.timeInterval(firstInstant, lastInstant, id); |
|
177
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
45 } |
|
ae2286b1a3fd
added loading FeatureTrajectory from database, printing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
176
diff
changeset
|
46 |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
47 bool FeatureTrajectory::isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const { |
|
138
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
48 bool result = false; |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
49 unsigned int nPositions = positions->size(); |
|
135
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
50 if (nPositions > nDisplacements) { |
|
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
51 float disp = 0; |
|
137
445e773c9be3
created the parameter structure to parse parameters (bug remaining)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
136
diff
changeset
|
52 for (unsigned int i=0; i<nDisplacements; i++) |
|
135
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
53 disp += displacementDistances[nPositions-2-i]; |
|
138
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
54 result = disp < minTotalFeatureDisplacement; |
|
135
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
55 } |
|
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
56 return result; |
|
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
57 } |
|
32d2722d4028
added constraint on minimum displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
133
diff
changeset
|
58 |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
59 bool FeatureTrajectory::isMotionSmooth(const int& accelerationBound, const int& deviationBound) const { |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
60 bool result = true; |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
61 unsigned int nPositions = positions->size(); |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
62 if (nPositions >= 3) { |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
63 float ratio; |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
64 if (displacementDistances[nPositions-2] > displacementDistances[nPositions-3]) |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
65 ratio = displacementDistances[nPositions-2] / displacementDistances[nPositions-3]; |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
66 else |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
67 ratio = displacementDistances[nPositions-3] / displacementDistances[nPositions-2]; |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
68 |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
69 float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]); |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
70 |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
71 result &= (ratio < accelerationBound) & (cosine > deviationBound); |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
72 } |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
73 return result; |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
74 } |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
75 |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
76 bool FeatureTrajectory::minMaxSimilarity(const FeatureTrajectory& ft, const int& firstInstant, const int& lastInstant, const float& connectionDistance, const float& segmentationDistance) { |
|
187
aa1061fb9695
using minmaxsimilarity
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
186
diff
changeset
|
77 float minDistance = norm(positions->getPointAtInstant(firstInstant)-ft.positions->getPointAtInstant(firstInstant)); |
|
186
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
78 float maxDistance = minDistance; |
|
190
36968a63efe1
Got the connected_components to finally work using a vecS for the vertex list in the adjacency list.
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
189
diff
changeset
|
79 bool connected = (minDistance <= connectionDistance); |
|
186
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
80 int t=firstInstant+1; |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
81 while (t <= lastInstant && connected) { |
|
187
aa1061fb9695
using minmaxsimilarity
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
186
diff
changeset
|
82 float distance = norm(positions->getPointAtInstant(t)-ft.positions->getPointAtInstant(t)); |
|
186
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
83 if (distance < minDistance) |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
84 minDistance = distance; |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
85 else if (distance > maxDistance) |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
86 maxDistance = distance; |
|
201
f7ddfc4aeb1e
added tests for graphs
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
200
diff
changeset
|
87 connected = connected && (maxDistance-minDistance <= segmentationDistance); |
|
186
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
88 t++; |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
89 } |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
90 |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
91 return connected; |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
92 } |
|
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
93 |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
94 void FeatureTrajectory::addPoint(const unsigned int& frameNum, const Point2f& p, const Mat& homography) { |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
95 Point2f pp = p; |
|
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
96 if (!homography.empty()) |
|
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
97 pp = project(p, homography); |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
98 positions->add(frameNum, pp); |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
99 if (frameNum < firstInstant) |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
100 firstInstant = frameNum; |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
101 if (frameNum > lastInstant) |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
102 lastInstant = frameNum; |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
103 computeMotionData(frameNum); |
|
225
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
104 assert(positions->size() == displacementDistances.size()+1); |
|
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
105 assert(positions->size() == velocities->size()+1); |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
106 } |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
107 |
|
138
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
108 void FeatureTrajectory::shorten(void) { |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
109 positions->pop_back(); |
|
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
110 velocities->pop_back(); |
|
138
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
111 displacementDistances.pop_back(); |
|
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
112 } |
|
c1b260b48d2a
corrected initialization bugs and feature shortening before saving
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
137
diff
changeset
|
113 |
|
142
a3532db00c28
added code to write velocities
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
139
diff
changeset
|
114 void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) const { |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
115 trajectoryDB.write(*positions, positionsTableName); |
|
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
116 trajectoryDB.write(*velocities, velocitiesTableName); |
|
133
63dd4355b6d1
saving of feature positions in sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
132
diff
changeset
|
117 } |
|
63dd4355b6d1
saving of feature positions in sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
132
diff
changeset
|
118 |
|
132
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
119 #ifdef USE_OPENCV |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
120 /// \todo add option for anti-aliased drawing, thickness |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
121 void FeatureTrajectory::draw(Mat& img, const Mat& homography, const Scalar& color) const { |
|
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
122 Point2f p1, p2; |
|
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
123 if (!homography.empty()) |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
124 p1 = project((*positions)[0], homography); |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
125 else |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
126 p1 = (*positions)[0]; |
|
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
127 for (unsigned int i=1; i<positions->size(); i++) { |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
128 if (!homography.empty()) |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
129 p2 = project((*positions)[i], homography); |
|
147
0089fb29cd26
added projection of points and reprojection for display
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
142
diff
changeset
|
130 else |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
131 p2 = (*positions)[i]; |
|
132
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
132 line(img, p1, p2, color, 1); |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
133 p1 = p2; |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
134 } |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
135 } |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
136 #endif |
|
45c64e68053c
added drawing function for features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
129
diff
changeset
|
137 |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
138 // protected |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
139 |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
140 void FeatureTrajectory::computeMotionData(const int& frameNum) { |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
141 unsigned int nPositions = positions->size(); |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
142 if (nPositions >= 2) { |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
143 Point2f displacement = (*positions)[nPositions-1] - (*positions)[nPositions-2]; |
|
139
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
144 //if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length |
|
47329bd16cc0
cleaned code, added condition on smooth displacement
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
138
diff
changeset
|
145 //velocities.add(frameNum-1, displacement); |
|
176
9323427aa0a3
changed positions and velocities to shared pointers and renamed methods
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
163
diff
changeset
|
146 velocities->add(frameNum, displacement); |
|
129
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
147 float dist = norm(displacement); |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
148 displacementDistances.push_back(dist); |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
149 } |
|
4742b2b6d851
created basic feature saving code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
150 } |
|
163
cde87a07eb58
added graph structures
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
147
diff
changeset
|
151 |
|
cde87a07eb58
added graph structures
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
147
diff
changeset
|
152 /******************** FeatureGraph ********************/ |
|
179
4f10e97cb677
added getting first and last instant for each feature
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
177
diff
changeset
|
153 |
|
180
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
154 void FeatureGraph::addFeature(const FeatureTrajectoryPtr& ft) { |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
155 vertex_descriptor newVertex = add_vertex(graph); |
|
180
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
156 graph[newVertex].feature = ft; |
|
190
36968a63efe1
Got the connected_components to finally work using a vecS for the vertex list in the adjacency list.
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
189
diff
changeset
|
157 for (graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first; |
|
180
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
158 vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
159 FeatureTrajectoryPtr ft2 = graph[*vi].feature; |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
160 if (newVertex != *vi) { |
|
225
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
161 int lastInstant = static_cast<int>(MIN(ft->getLastInstant(), ft2->getLastInstant())); |
|
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
162 int firstInstant = static_cast<int>(MAX(ft->getFirstInstant(), ft2->getFirstInstant())); |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
163 if (lastInstant-firstInstant > static_cast<int>(minFeatureTime)) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
164 if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) { |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
165 UndirectedGraph::edge_descriptor e; |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
166 bool unused; |
| 232 | 167 tie(e, unused) = add_edge(newVertex, *vi, graph); |
|
200
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
168 // no need to add measures to graph[e] (edge properties) |
|
0a27fa343257
added one test and cleaned the first and last instant mess
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
196
diff
changeset
|
169 } |
|
186
6c48283a78ca
work on feature similarity, issue with getting point
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
180
diff
changeset
|
170 } |
|
180
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
171 } |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
172 } |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
173 } |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
174 |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
175 void FeatureGraph::connectedComponents(const unsigned int& lastInstant) { |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
176 computeVertexIndex(); |
|
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
177 property_map<UndirectedGraph, int VertexInformation::*>::type components = get(&VertexInformation::index, graph); |
|
188
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
178 |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
179 int num = connected_components(graph, components, vertex_index_map(get(&VertexInformation::index, graph))); |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
180 #ifdef DEBUG |
|
201
f7ddfc4aeb1e
added tests for graphs
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
200
diff
changeset
|
181 cout << "last instant threshold " << lastInstant << " Total number of components: " << num << endl; |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
182 #endif |
|
190
36968a63efe1
Got the connected_components to finally work using a vecS for the vertex list in the adjacency list.
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
189
diff
changeset
|
183 |
|
201
f7ddfc4aeb1e
added tests for graphs
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
200
diff
changeset
|
184 vector<unsigned int> lastInstants(num, 0); // last instant of component with id |
|
f7ddfc4aeb1e
added tests for graphs
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
200
diff
changeset
|
185 vector<vector<vertex_descriptor> > tmpobjects(num), objects; // vector of components (component = vector of vertex descriptors) |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
186 |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
187 graph_traits<UndirectedGraph>::vertex_iterator vi, vend; |
| 232 | 188 for(tie(vi,vend) = vertices(graph); vi != vend; ++vi) { |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
189 unsigned int id = components[*vi]; |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
190 lastInstants[id] = max(lastInstants[id], graph[*vi].feature->getLastInstant()); |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
191 tmpobjects[id].push_back(*vi); |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
192 } |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
193 |
|
194
09c7881073f3
connected commponents works, but issue with removing the vertices
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
192
diff
changeset
|
194 objectHypotheses.clear(); |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
195 for (int i = 0; i < num; ++i) { |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
196 #ifdef DEBUG |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
197 cout << i << " " << lastInstants[i] << endl; |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
198 #endif |
|
277
21f14fadd098
removed warning
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
232
diff
changeset
|
199 if (lastInstants[i] < lastInstant) |
|
194
09c7881073f3
connected commponents works, but issue with removing the vertices
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
192
diff
changeset
|
200 objectHypotheses.push_back(tmpobjects[i]); |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
201 } |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
202 } |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
203 |
|
391
03dbecd3a887
modified feature grouping to return vectors of pointers to feature trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
277
diff
changeset
|
204 void FeatureGraph::getFeatureGroups(vector<vector<FeatureTrajectoryPtr> >& featureGroups) { |
|
03dbecd3a887
modified feature grouping to return vectors of pointers to feature trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
277
diff
changeset
|
205 featureGroups.clear(); |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
206 |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
207 for (unsigned int i=0; i<objectHypotheses.size(); ++i) { |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
208 // check that there is on average at least minNFeaturesPerGroup features at each frame in the group |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
209 unsigned int totalFeatureTime= graph[objectHypotheses[i][0]].feature->length(); |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
210 unsigned int firstInstant = graph[objectHypotheses[i][0]].feature->getFirstInstant(); |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
211 unsigned int lastInstant = graph[objectHypotheses[i][0]].feature->getLastInstant(); |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
212 for (unsigned int j=1; j<objectHypotheses[i].size(); ++j) { |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
213 totalFeatureTime += graph[objectHypotheses[i][j]].feature->length(); |
|
225
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
214 firstInstant = MIN(firstInstant, graph[objectHypotheses[i][j]].feature->getFirstInstant()); |
|
d4d3b1e8a9f1
added code to process only needed frames based on saved features
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
221
diff
changeset
|
215 lastInstant = MAX(lastInstant, graph[objectHypotheses[i][j]].feature->getLastInstant()); |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
216 } |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
217 if (static_cast<float>(totalFeatureTime)/static_cast<float>(lastInstant-firstInstant+1) > minNFeaturesPerGroup) { |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
218 #if DEBUG |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
219 cout << "save group " << i << " of " << objectHypotheses[i].size() << " features " << endl; |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
220 #endif |
|
391
03dbecd3a887
modified feature grouping to return vectors of pointers to feature trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
277
diff
changeset
|
221 featureGroups.push_back(vector<FeatureTrajectoryPtr>()); |
|
194
09c7881073f3
connected commponents works, but issue with removing the vertices
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
192
diff
changeset
|
222 for (unsigned int j=0; j<objectHypotheses[i].size(); ++j) { |
|
391
03dbecd3a887
modified feature grouping to return vectors of pointers to feature trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
277
diff
changeset
|
223 featureGroups.back().push_back(graph[objectHypotheses[i][j]].feature); |
|
221
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
224 #if DEBUG |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
225 cout << featureGroups.size() << " " << objectHypotheses[i][j] << endl; |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
226 #endif |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
227 clear_vertex(objectHypotheses[i][j], graph); |
|
bc93e87a2108
cleaned and corrected connected components and feature groups
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
201
diff
changeset
|
228 remove_vertex(objectHypotheses[i][j], graph); |
|
194
09c7881073f3
connected commponents works, but issue with removing the vertices
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
192
diff
changeset
|
229 } |
|
191
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
230 } |
|
0e60a306d324
added basic code to identify features and save them (crash)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
190
diff
changeset
|
231 } |
|
188
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
232 } |
|
1435965d8181
work on connected components
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
187
diff
changeset
|
233 |
|
196
aeab0b88c9b6
began testing of FeatureGraph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
194
diff
changeset
|
234 string FeatureGraph::informationString(void) const { |
|
180
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
235 stringstream ss; |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
236 ss << num_vertices(graph) << " vertices, " << num_edges(graph) << " edges"; |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
237 return ss.str(); |
|
3a4eef37384f
method to add features and vertices to graph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
179
diff
changeset
|
238 } |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
239 |
|
196
aeab0b88c9b6
began testing of FeatureGraph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
194
diff
changeset
|
240 int FeatureGraph::getNVertices(void) const { return num_vertices(graph);} |
|
aeab0b88c9b6
began testing of FeatureGraph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
194
diff
changeset
|
241 |
|
aeab0b88c9b6
began testing of FeatureGraph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
194
diff
changeset
|
242 int FeatureGraph::getNEdges(void) const { return num_edges(graph);} |
|
aeab0b88c9b6
began testing of FeatureGraph
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
194
diff
changeset
|
243 |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
244 void FeatureGraph::computeVertexIndex(void) { |
|
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
245 graph_traits<FeatureGraph::UndirectedGraph>::vertex_iterator vi, vend; |
|
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
246 graph_traits<FeatureGraph::UndirectedGraph>::vertices_size_type cnt = 0; |
| 232 | 247 for(tie(vi,vend) = vertices(graph); vi != vend; ++vi) |
|
192
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
248 graph[*vi].index = cnt++; |
|
38974d27dd2d
connected_components is working with listS for vertex list
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
191
diff
changeset
|
249 } |
