diff c/feature-based-tracking.cpp @ 139:47329bd16cc0

cleaned code, added condition on smooth displacement
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 23 Aug 2011 13:14:47 -0400
parents c1b260b48d2a
children 8de5e8256224
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Fri Aug 19 12:15:23 2011 -0400
+++ b/c/feature-based-tracking.cpp	Tue Aug 23 13:14:47 2011 -0400
@@ -62,24 +62,6 @@
 
   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;
-
-  // 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);
@@ -142,7 +124,6 @@
   vector<FeatureTrajectoryPtr> features;
   vector<FeaturePointMatch> featurePointMatches;
     
-  // TODO structure de donnee paires pointeur trajectory, numero de keypoint
   int key = '?';
   unsigned int savedFeatureId=0;
   for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) {
@@ -169,17 +150,18 @@
 	  if (status[iter->pointNum]) {
 	    iter->feature->addPoint(frameNum, currPts[iter->pointNum]);
 
-	    bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement);
-	    if (smallDisplacement)
+	    deleteFeature |= iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement)
+	      || !iter->feature->motionSmooth(params.accelerationBound, params.deviationBound);
+	    if (deleteFeature)
 	      iter->feature->shorten();
-	    deleteFeature |= smallDisplacement;
-	    // motionSmooth()
-	  } 
+	  } else
+	    deleteFeature = true;
 
 	  if (deleteFeature) {
 	    if (iter->feature->length() >= params.minFeatureTime) {
 	      iter->feature->setId(savedFeatureId);
 	      savedFeatureId++;
+	      /// \todo smoothing
 	      iter->feature->write(*trajectoryDB);
 	    }
 	    iter = featurePointMatches.erase(iter);
@@ -192,9 +174,10 @@
 	currPts = trackedPts;
 	assert(currPts.size() == featurePointMatches.size());
 	
-	if (params.display)
+	if (params.display) {
 	  BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches)
 	    fp.feature->draw(frame, Colors::red());
+	}
 	//drawOpticalFlow(prevPts, currPts, status, frame);
 	
 	// cout << matches.size() << " matches" << endl;