changeset 480:f43bc0b0ba74

cleaning code
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 01 Apr 2014 17:42:40 -0400
parents 7828fec8bbd2
children b6ad86ee7033
files c/Motion.cpp c/feature-based-tracking.cpp
diffstat 2 files changed, 17 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/c/Motion.cpp	Mon Mar 31 16:20:13 2014 -0400
+++ b/c/Motion.cpp	Tue Apr 01 17:42:40 2014 -0400
@@ -68,7 +68,7 @@
 
     float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
     
-    result &= (ratio < accelerationBound) & (cosine > deviationBound);
+    result = (ratio < accelerationBound) & (cosine > deviationBound);
   }
   return result;
 }
--- a/c/feature-based-tracking.cpp	Mon Mar 31 16:20:13 2014 -0400
+++ b/c/feature-based-tracking.cpp	Tue Apr 01 17:42:40 2014 -0400
@@ -59,12 +59,10 @@
     feature(_feature), pointNum(_pointNum) {}
 };
 
-inline void saveFeatures(vector<FeatureTrajectoryPtr>& features, TrajectoryDBAccess<Point2f>& db, const string& positionsTableName, const string& velocitiesTableName, const unsigned int& minNFeatures = 0) {
+inline void saveFeatures(vector<FeatureTrajectoryPtr>& features, TrajectoryDBAccess<Point2f>& db, const string& positionsTableName, const string& velocitiesTableName) {
   /// \todo smoothing
-  if (features.size() >= minNFeatures) {
-    BOOST_FOREACH(FeatureTrajectoryPtr f, features) f->write(db, positionsTableName, velocitiesTableName);
-    features.clear();
-  }
+  BOOST_FOREACH(FeatureTrajectoryPtr f, features) f->write(db, positionsTableName, velocitiesTableName);
+  features.clear();
 }
 
 void trackFeatures(const KLTFeatureTrackingParameters& params) {
@@ -145,24 +143,10 @@
 
       if (frameNum%50 ==0)
 	cout << "frame " << frameNum << endl;
-
-      //capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl;
-
-      // int emptyFrameNum = 0;
-      // while (frame.empty()) {
-      // 	cerr << "empty frame " << emptyFrameNum  << " " << capture.get(CV_CAP_PROP_POS_FRAMES)<< endl;
-      // 	capture >> frame;//break;
-      // 	emptyFrameNum++;
-      // 	if (emptyFrameNum>=3000)
-      // 	  exit(0);
-      // }
       
       cvtColor(frame, currentFrameBW, CV_RGB2GRAY);
-      // "normal" feature detectors: detect features here
-      // detector.detect(currentFrameBW, currKpts); // see video_homography c++ sample
       
       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), /* int flags = */ 0, params.minFeatureEigThreshold);
 	/// \todo try calcOpticalFlowFarneback
@@ -175,7 +159,7 @@
 	  if (status[iter->pointNum]) {
 	    iter->feature->addPoint(frameNum, currPts[iter->pointNum], homography);
 
-	    deleteFeature |= iter->feature->isDisplacementSmall(params.nDisplacements, minTotalFeatureDisplacement)
+	    deleteFeature = iter->feature->isDisplacementSmall(params.nDisplacements, minTotalFeatureDisplacement)
 	      || !iter->feature->isMotionSmooth(params.accelerationBound, params.deviationBound);
 	    if (deleteFeature)
 	      iter->feature->shorten();
@@ -208,12 +192,6 @@
 	  // BOOST_FOREACH(Rect r, locations)
 	  //   rectangle(frame, r.tl(), r.br(), cv::Scalar(0,255,0), 3);
 	}
-	//drawOpticalFlow(prevPts, currPts, status, frame);
-	
-	// cout << matches.size() << " matches" << endl;
-	// descMatcher.match(currDesc, prevDesc, matches);
-	// cout << matches.size() << " matches" << endl;
-	//drawMatchesRelative(prevKpts, currKpts, matches, frame);
       }
       
       // adding new features, using mask around existing feature positions
@@ -228,10 +206,6 @@
 	featurePointMatches.push_back(FeaturePointMatch(f, currPts.size()));
 	currPts.push_back(p);
       }
-      // currPts.insert(currPts.end(), newPts.begin(), newPts.end());
-      //::keyPoints2Points(currKpts, currPts, false);
-
-      //brief.compute(currentFrameBW, currKpts, currDesc); //Compute brief descriptors at each keypoint location
       
       if (params.display) {
 	imshow("mask", featureMask*256);
@@ -240,9 +214,18 @@
       }
       previousFrameBW = currentFrameBW.clone();
       prevPts = currPts;
-      //prevKpts = currKpts;
-      //currDesc.copyTo(prevDesc);
-    }  
+  }
+
+  // save the remaining currently tracked features
+  std::vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin();
+  while (iter != featurePointMatches.end()) {
+    if (iter->feature->length() >= params.minFeatureTime) {
+      iter->feature->setId(savedFeatureId);
+      savedFeatureId++;
+      f->write(*trajectoryDB, "positions", "velocities")
+    }
+    iter++;
+  }
   
   trajectoryDB->endTransaction();
   trajectoryDB->disconnect();