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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
04355e51d895 removed tr1::
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 231
diff changeset
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
04355e51d895 removed tr1::
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 231
diff changeset
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
04355e51d895 removed tr1::
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 231
diff changeset
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 }