changeset 124:1e68e18b1aa5

renaming and working on klt
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 16 Aug 2011 12:31:22 -0400
parents df3bdd8e50ba
children 28907fde9855
files c/feature-based-tracking.cpp include/Parameters.hpp
diffstat 2 files changed, 37 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Tue Aug 16 00:46:22 2011 -0400
+++ b/c/feature-based-tracking.cpp	Tue Aug 16 12:31:22 2011 -0400
@@ -1,6 +1,9 @@
-#include "Feature.hpp"
+//#include "Feature.hpp"
+#include "Parameters.hpp"
 #include "utils.hpp"
 
+#include "src/Trajectory.h"
+
 #include "opencv2/highgui/highgui.hpp"
 //#include "opencv2/imgproc/imgproc.hpp"
 #include "opencv2/features2d/features2d.hpp"
@@ -30,12 +33,18 @@
 }
 
 int main(int argc, char *argv[]) {
-
+  vector<TrajectoryPoint2f> features;
   BriefDescriptorExtractor brief(32);
   
   VideoCapture capture;
 
   Mat frame, display;
+  KLTFeatureTrackingParameters params;
+  params.frame1 = 0;
+  params.nFrames = -1;
+  // TODO ajouter klt paremeters, reprendre code de 
+  // GoodFeaturesToTrackDetector feature_detector(Params.max_nfeatures, Params.feature_quality, Params.min_feature_distance_klt, Params.window_size, Params.useHarrisDetector_GoodFeaturesToTrackDetector, Params.k_GoodFeaturesToTrackDetector);
+  // search descriptor_match.h
 
   if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) // if no parameter or number parameter
     capture.open(argc == 2 ? argv[1][0] - '0' : 0);
@@ -49,11 +58,10 @@
 	  ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl;
       if( argc > 2 && isdigit(argv[2][0]) ) // could be used to reach first frame, dumping library messages to log file (2> /tmp/log.txt)
         {
-      	  int pos;
-      	  sscanf(argv[2], "%d", &pos);
-      	  cout << "seeking to frame #" << pos << endl;
+	  sscanf(argv[2], "%d", &params.frame1);
+      	  cout << "seeking to frame #" << params.frame1 << endl;
       	  //cap.set(CV_CAP_PROP_POS_FRAMES, pos);
-	  for (int i=0; i<pos; i++)
+	  for (int i=0; i<params.frame1; i++)
 	    capture >> frame;
         }
     }
@@ -70,19 +78,18 @@
   
   BruteForceMatcher<Hamming> desc_matcher;
   
-  vector<Point2f> train_pts, query_pts;
-  vector<KeyPoint> train_kpts, query_kpts;
+  vector<KeyPoint> prevKpts, currKpts;
   vector<unsigned char> match_mask;
   
   Mat gray;
   
-  Mat train_desc, query_desc;
+  Mat prevDesc, currDesc;
   const int DESIRED_FTRS = 500;
   GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4);
+
+  // TODO structure de donnee paires pointeur trajectory, numero de keypoint
   
-  int frameNum = 0;
-  for (;;)
-    {
+  for (int frameNum = 0; (params.frame1+frameNum < params.nFrames) || (params.nFrames < 0); frameNum++) {
       frameNum++;
       //capture.set(CV_CAP_PROP_POS_FRAMES, frameNum);
       //capture.grab();capture.grab();capture.retrieve(frame);
@@ -93,31 +100,28 @@
       
       cvtColor(frame, gray, CV_RGB2GRAY);
       
-      detector.detect(gray, query_kpts); //Find interest points
-      cout << query_kpts.size() << " kpts" << endl;
+      detector.detect(gray, currKpts);
+      //cout << currKpts.size() << " kpts" << endl;
       
-      brief.compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location
+      brief.compute(gray, currKpts, currDesc); //Compute brief descriptors at each keypoint location
       
-      // find how keypoints descriptions are matched to previous ones (in train kpts probably)
       //display = frame.clone();
-      if (!train_kpts.empty())
+      if (!prevKpts.empty())
         {
-	  desc_matcher.match(query_desc, train_desc, matches);
+	  desc_matcher.match(currDesc, prevDesc, matches);
 	  cout << "matches:" << matches.size() << endl;
-	  drawMatchesRelative(train_kpts, query_kpts, matches, frame);
-	  //drawMatches(frame, train_kpts, frame, query_kpts, matches, display);//, Scalar::all(-1), Scalar::all(-1), vector<vector<char> >(), DrawMatchesFlags::DRAW_OVER_OUTIMG);
+	  drawMatchesRelative(prevKpts, currKpts, matches, frame);
+	  //drawMatches(frame, prevKpts, frame, currKpts, matches, display);//, Scalar::all(-1), Scalar::all(-1), vector<vector<char> >(), DrawMatchesFlags::DRAW_OVER_OUTIMG);
 	}
 
       imshow("frame", frame);
-      train_kpts = query_kpts;
-      query_desc.copyTo(train_desc);
-      int key = waitKey(5);
+      prevKpts = currKpts;
+      currDesc.copyTo(prevDesc);
+      int key = waitKey(0);
       if (::interruptionKey(key))
 	break;
     }  
   
-  Feature f;
-
   return 0;
 }
 
--- a/include/Parameters.hpp	Tue Aug 16 00:46:22 2011 -0400
+++ b/include/Parameters.hpp	Tue Aug 16 12:31:22 2011 -0400
@@ -3,7 +3,9 @@
 
 /// \todo Class for parameters, with utilities to save and load from configuration files
 
-struct FeatureTrackingParameters {
+#include <string>
+
+struct KLTFeatureTrackingParameters {
   /// whether to load saved features, or compute them
   bool loadFeatures;
 
@@ -32,6 +34,11 @@
   float maxDistance;
   float minVelocityCosine;
   int minNFeaturesPerGroup;
+
+  //KLTFeatureTrackingParameters(const int argc, char* argv[]);
+
+  //KLTFeatureTrackingParameters(bool loadFeatures, std::string videoFilename, int videoFPS, int measurementPrecision, int frame1, int nFrames, int maxNFeatures, float featureQuality, float minFeatureDistanceKLT, int windowSize, int pyramidLevel, int nFramesDisplacement, float minFeatureDisplacement, float accelerationBound, float deviationBound, int nFramesSmoothing, int nFramesVelocity, int maxNumberTrackingIterations, float minTrackingError, int minFeatureTime, float mmConnectionDistance, float mmSegmentationDistance, float maxDistance, float minVelocityCosine, int minNFeaturesPerGroup);
+
 };
 
 #endif