diff c/feature-based-tracking.cpp @ 137:445e773c9be3

created the parameter structure to parse parameters (bug remaining)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 19 Aug 2011 01:35:45 -0400
parents 0f790de9437e
children c1b260b48d2a
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Thu Aug 18 22:25:21 2011 -0400
+++ b/c/feature-based-tracking.cpp	Fri Aug 19 01:35:45 2011 -0400
@@ -60,56 +60,56 @@
   VideoCapture capture;
   Mat frame, currentFrameBW, previousFrameBW;
 
-  KLTFeatureTrackingParameters params;
-  params.display = true;
-  params.frame1 = 0;
-  params.nFrames = -1;
-  params.maxNFeatures = 1000;
-  params.featureQuality = 0.1;
-  params.minFeatureDistanceKLT = 3;
-  params.windowSize = 3; 
-  params.useHarrisDetector = false;
-  params.k = 0.4;
-  //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k);
+  KLTFeatureTrackingParameters params(argc, argv);
+  cout << params.parameterDescription << endl;
+  // params.display = true;
+  // params.frame1 = 0;
+  // params.nFrames = -1;
+  // params.maxNFeatures = 1000;
+  // params.featureQuality = 0.1;
+  // params.minFeatureDistanceKLT = 3;
+  // params.windowSize = 3; 
+  // params.useHarrisDetector = false;
+  // params.k = 0.4;
+  // //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k);
 
-  params.pyramidLevel = 3;
-  params.nDisplacements = 3;
-  params.minFeatureDisplacement = 0.05;
-  float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement;
+  // params.pyramidLevel = 3;
+  // params.nDisplacements = 3;
+  // params.minFeatureDisplacement = 0.05;
 
-  params.maxNumberTrackingIterations = 20; // 30
-  params.minTrackingError = 0.3; // 0.01
-  params.derivLambda = 0.5;
-  params.minFeatureTime = 20;
+  // params.maxNumberTrackingIterations = 20; // 30
+  // params.minTrackingError = 0.3; // 0.01
+  // params.minFeatureTime = 20;
 
+  float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement;
   Size window = Size(params.windowSize, params.windowSize);
 
   BruteForceMatcher<Hamming> descMatcher;
   vector<DMatch> matches;
   Size videoSize;
 
-  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);
-  else if( argc >= 2 )
-    {
-      capture.open(argv[1]);
-      if( capture.isOpened() )
-	videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
-	cout << "Video " << argv[1] <<
-	  ": width=" << videoSize.width <<
-	  ", height=" << videoSize.height <<
-	  ", 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)
-        {
-	  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<params.frame1; i++)
-	    capture >> frame;
-        }
-    }
+  // 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);
+  // else if( argc >= 2 )
+  //   {
+  //     capture.open(argv[1]);
+  //     if( capture.isOpened() )
+  // 	videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
+  // 	cout << "Video " << argv[1] <<
+  // 	  ": width=" << videoSize.width <<
+  // 	  ", height=" << videoSize.height <<
+  // 	  ", 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)
+  //       {
+  // 	  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<params.frame1; i++)
+  // 	    capture >> frame;
+  //       }
+  //   }
 
-    //  capture.open(atoi(argv[1]));
+  capture.open(params.videoFilename);
   if (!capture.isOpened())
     {
       //help(argv);
@@ -149,7 +149,7 @@
       if (!prevPts.empty()) {
 	//::keyPoints2Points(prevKpts, prevPts);
 	currPts.clear();
-	calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), params.derivLambda, 0); // OPTFLOW_USE_INITIAL_FLOW
+	calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), 0.5 /* unused */, 0); // OPTFLOW_USE_INITIAL_FLOW
 
 	vector<Point2f> trackedPts;
 	vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin();