comparison c/feature-based-tracking.cpp @ 169:5f705809d37a

created groupFeatures function
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sat, 01 Oct 2011 08:28:13 -0400
parents 6ec7f6c61daf
children e508bb0cbb64
comparison
equal deleted inserted replaced
168:6ec7f6c61daf 169:5f705809d37a
235 235
236 trajectoryDB->endTransaction(); 236 trajectoryDB->endTransaction();
237 trajectoryDB->disconnect(); 237 trajectoryDB->disconnect();
238 } 238 }
239 239
240 void groupFeatures(const KLTFeatureTrackingParameters& params) {
241 cout << "group" << endl;
242
243 boost::shared_ptr<TrajectoryDBAccessList<Point2f> > trajectoryDB = boost::shared_ptr<TrajectoryDBAccessList<Point2f> >(new TrajectoryDBAccessList<Point2f>());
244 //TODO write generic methods for blob and list versions TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
245 bool success = trajectoryDB->connect(params.databaseFilename.c_str());
246 vector<boost::shared_ptr<Trajectory<Point2f> > > trajectories;
247 cout << trajectories.size() << endl;
248 success = trajectoryDB->read(trajectories, "positions"); // TODO load velocities as well
249 cout << "Loaded " << trajectories.size() << " trajectories" << endl;
250 // for (int i=0; i<5; ++i) {
251 // stringstream ss;
252 // ss << *trajectories[i];
253 // cout << ss.str() << endl;
254 // }
255
256 // create views for first and last instants for each trajectory
257 // CREATE VIEW IF NOT EXISTS trajectory_first_instants AS select trajectory_id, min(frame_number) as first_instant from positions group by trajectory_id
258 // CREATE VIEW IF NOT EXISTS trajectory_last_instants AS select trajectory_id, max(frame_number) as last_instant from positions group by trajectory_id
259 //select trajectory_id from trajectory_first_instants where first_instant = 49
260
261 trajectoryDB->createViewInstants("first");
262 trajectoryDB->createViewInstants("last");
263
264 // main loop
265 // TODO version que l'on peut interrompre ?
266 for (int frameNum = params.frame1; ((frameNum-params.frame1 < params.nFrames) || (params.nFrames < 0)); frameNum++) {
267 vector<int> ids;
268 cout << "frame " << frameNum << " " << trajectoryDB->trajectoryIdStartingAt(ids, frameNum) << endl;
269 BOOST_FOREACH(int i, ids)
270 cout << i << " ";
271 cout << endl;
272 }
273
274 trajectoryDB->endTransaction();
275 trajectoryDB->disconnect();
276 }
277
240 int main(int argc, char *argv[]) { 278 int main(int argc, char *argv[]) {
241 // BriefDescriptorExtractor brief(32); 279 // BriefDescriptorExtractor brief(32);
242 // const int DESIRED_FTRS = 500; 280 // const int DESIRED_FTRS = 500;
243 // GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4); 281 // GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4);
244 282
245 KLTFeatureTrackingParameters params(argc, argv); 283 KLTFeatureTrackingParameters params(argc, argv);
246 cout << params.parameterDescription << endl; 284 cout << params.parameterDescription << endl;
247 285
248 if (params.trackFeatures) 286 if (params.trackFeatures)
249 trackFeatures(params); 287 trackFeatures(params);
250 else if (params.groupFeatures) { 288 else if (params.groupFeatures)
251 cout << "group" << endl; 289 groupFeatures(params);
252
253 boost::shared_ptr<TrajectoryDBAccessList<Point2f> > trajectoryDB = boost::shared_ptr<TrajectoryDBAccessList<Point2f> >(new TrajectoryDBAccessList<Point2f>());
254 //TODO write generic methods for blob and list versions TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
255 bool success = trajectoryDB->connect(params.databaseFilename.c_str());
256 vector<boost::shared_ptr<Trajectory<Point2f> > > trajectories;
257 cout << trajectories.size() << endl;
258 success = trajectoryDB->read(trajectories, "positions");
259 cout << trajectories.size() << endl;
260 for (int i=0; i<5; ++i) {
261 stringstream ss;
262 ss << *trajectories[i];
263 cout << ss.str() << endl;
264 }
265
266 // create views for first and last instants for each trajectory
267 // CREATE VIEW IF NOT EXISTS trajectory_first_instants AS select trajectory_id, min(frame_number) as first_instant from positions group by trajectory_id
268 // CREATE VIEW IF NOT EXISTS trajectory_last_instants AS select trajectory_id, max(frame_number) as last_instant from positions group by trajectory_id
269 //select trajectory_id from trajectory_first_instants where first_instant = 49
270
271 trajectoryDB->createViewInstants("first");
272 trajectoryDB->createViewInstants("last");
273
274 // main loop
275 // TODO version que l'on peut interrompre ?
276 for (int frameNum = params.frame1; ((frameNum-params.frame1 < params.nFrames) || (params.nFrames < 0)); frameNum++) {
277 vector<int> ids;
278 cout << "frame " << frameNum << " " << trajectoryDB->trajectoryIdStartingAt(ids, frameNum) << endl;
279 BOOST_FOREACH(int i, ids)
280 cout << i << " ";
281 cout << endl;
282 }
283
284 trajectoryDB->endTransaction();
285 trajectoryDB->disconnect();
286 }
287 290
288 return 0; 291 return 0;
289 } 292 }
290 293
291 /* ------------------ DOCUMENTATION ------------------ */ 294 /* ------------------ DOCUMENTATION ------------------ */