changeset 134:a617d0808bbc

added test on feature length and display control
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 17 Aug 2011 23:21:26 -0400
parents 63dd4355b6d1
children 32d2722d4028
files c/feature-based-tracking.cpp include/Feature.hpp include/Parameters.hpp
diffstat 3 files changed, 23 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Wed Aug 17 22:26:01 2011 -0400
+++ b/c/feature-based-tracking.cpp	Wed Aug 17 23:21:26 2011 -0400
@@ -60,8 +60,9 @@
   Mat frame, currentFrameBW, previousFrameBW;
 
   KLTFeatureTrackingParameters params;
+  params.display = false;
   params.frame1 = 0;
-  params.nFrames = 50;
+  params.nFrames = -1;
   params.maxNFeatures = 1000;
   params.featureQuality = 0.1;
   params.minFeatureDistanceKLT = 3;
@@ -74,6 +75,8 @@
   params.maxNumberTrackingIterations = 20; // 30
   params.minTrackingError = 0.3; // 0.01
   params.derivLambda = 0.5;
+  params.minFeatureTime = 20;
+
   Size window = Size(params.windowSize, params.windowSize);
 
   BruteForceMatcher<Hamming> descMatcher;
@@ -128,7 +131,7 @@
   unsigned int savedFeatureId=0;
   for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) {
       capture >> frame;
-      cout << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl;
+      cout << frameNum << " " << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl;
       while (frame.empty())
 	capture >> frame;//break;
       
@@ -151,19 +154,22 @@
 	    iter->pointNum = trackedPts.size()-1;
 	    iter++;
 	  } else {
-	    iter->feature->setId(savedFeatureId);
-	    savedFeatureId++;
-	    iter->feature->write(trajectoryDB);
+	    if (iter->feature->length() >= params.minFeatureTime) {
+	      iter->feature->setId(savedFeatureId);
+	      savedFeatureId++;
+	      iter->feature->write(trajectoryDB);
+	    }
 	    iter = featurePointMatches.erase(iter);
 	  }
 	}
 	currPts = trackedPts;
 	assert(currPts.size() == featurePointMatches.size());
-
-	BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches)
-	  fp.feature->draw(frame, Colors::red());
+	
+	if (params.display)
+	  BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches)
+	    fp.feature->draw(frame, Colors::red());
 	//drawOpticalFlow(prevPts, currPts, status, frame);
-		
+	
 	// cout << matches.size() << " matches" << endl;
 	// descMatcher.match(currDesc, prevDesc, matches);
 	// cout << matches.size() << " matches" << endl;
@@ -188,13 +194,15 @@
 
       //brief.compute(currentFrameBW, currKpts, currDesc); //Compute brief descriptors at each keypoint location
       
-      imshow("frame", frame);
-      imshow("mask", featureMask*256);
+      if (params.display) {
+	imshow("frame", frame);
+	imshow("mask", featureMask*256);
+	key = waitKey(2);
+      }
       previousFrameBW = currentFrameBW.clone();
       prevPts = currPts;
       //prevKpts = currKpts;
       //currDesc.copyTo(prevDesc);
-      key = waitKey(2);
     }  
   
   trajectoryDB.disconnect();
--- a/include/Feature.hpp	Wed Aug 17 22:26:01 2011 -0400
+++ b/include/Feature.hpp	Wed Aug 17 23:21:26 2011 -0400
@@ -14,6 +14,8 @@
 public:
   FeatureTrajectory(const int& frameNum, const cv::Point2f& p);
 
+  unsigned int length(void) const { return positions.size();}
+
   void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);}
 
   void addPoint(const int& frameNum, const cv::Point2f& p);
--- a/include/Parameters.hpp	Wed Aug 17 22:26:01 2011 -0400
+++ b/include/Parameters.hpp	Wed Aug 17 23:21:26 2011 -0400
@@ -12,6 +12,7 @@
   std::string videoFilename;
   int videoFPS;
   int measurementPrecision;
+  bool display;
   int frame1;
   int nFrames;
   // feature tracking