changeset 138:c1b260b48d2a

corrected initialization bugs and feature shortening before saving
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 19 Aug 2011 12:15:23 -0400
parents 445e773c9be3
children 47329bd16cc0
files c/Motion.cpp c/feature-based-tracking.cpp include/Motion.hpp
diffstat 3 files changed, 38 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/c/Motion.cpp	Fri Aug 19 01:35:45 2011 -0400
+++ b/c/Motion.cpp	Fri Aug 19 12:15:23 2011 -0400
@@ -12,14 +12,14 @@
   addPoint(frameNum, p);
 }
 
-bool FeatureTrajectory::largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
-  bool result = true;
+bool FeatureTrajectory::smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
+  bool result = false;
   unsigned int nPositions = positions.size();
   if (nPositions > nDisplacements) {
     float disp = 0;
     for (unsigned int i=0; i<nDisplacements; i++)
       disp += displacementDistances[nPositions-2-i];
-    result = disp > minTotalFeatureDisplacement;
+    result = disp < minTotalFeatureDisplacement;
   }
   return result;
 }
@@ -29,6 +29,12 @@
   computeMotionData(frameNum);
 }
 
+void FeatureTrajectory::shorten(void) { 
+  positions.pop_back(); 
+  velocities.pop_back(); 
+  displacementDistances.pop_back();
+}
+
 void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const {
   /// \todo save velocities
   trajectoryDB.write(positions);
--- a/c/feature-based-tracking.cpp	Fri Aug 19 01:35:45 2011 -0400
+++ b/c/feature-based-tracking.cpp	Fri Aug 19 12:15:23 2011 -0400
@@ -110,17 +110,27 @@
   //   }
 
   capture.open(params.videoFilename);
-  if (!capture.isOpened())
-    {
-      //help(argv);
-      cout << "capture device " << argv[1] << " failed to open!" << endl;
-      return 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;
+  } else {
+    cout << "Video filename " << params.videoFilename << " could not be opened. Exiting." << endl;
+    exit(0);
+  }
+  // if (!capture.isOpened())
+  //   {
+  //     //help(argv);
+  //     cout << "capture device " << argv[1] << " failed to open!" << endl;
+  //     return 1;
+  //   }
   
   // database
   TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>();
   //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
-  trajectoryDB->connect("test.sqlite");
+  trajectoryDB->connect(params.databaseFilename.c_str());
   trajectoryDB->createTable();
 
   vector<KeyPoint> prevKpts, currKpts;
@@ -158,10 +168,11 @@
 	  
 	  if (status[iter->pointNum]) {
 	    iter->feature->addPoint(frameNum, currPts[iter->pointNum]);
-	    trackedPts.push_back(currPts[iter->pointNum]);
-	    iter->pointNum = trackedPts.size()-1;
 
-	    deleteFeature |= !iter->feature->largeDisplacement(params.nDisplacements, minTotalFeatureDisplacement);
+	    bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement);
+	    if (smallDisplacement)
+	      iter->feature->shorten();
+	    deleteFeature |= smallDisplacement;
 	    // motionSmooth()
 	  } 
 
@@ -172,8 +183,11 @@
 	      iter->feature->write(*trajectoryDB);
 	    }
 	    iter = featurePointMatches.erase(iter);
-	  } else
+	  } else {
+	    trackedPts.push_back(currPts[iter->pointNum]);
+	    iter->pointNum = trackedPts.size()-1;
 	    iter++;
+	  }
 	}
 	currPts = trackedPts;
 	assert(currPts.size() == featurePointMatches.size());
--- a/include/Motion.hpp	Fri Aug 19 01:35:45 2011 -0400
+++ b/include/Motion.hpp	Fri Aug 19 12:15:23 2011 -0400
@@ -18,13 +18,13 @@
 
   void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);}
 
-  /// indicates whether the sum of the last nDisplacements displacements have been superior to minFeatureDisplacement
-  bool largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
-
-  //void shorten(void);
+  /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement
+  bool smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
 
   void addPoint(const int& frameNum, const cv::Point2f& p);
 
+  void shorten(void);
+
   void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const;
 
 #ifdef USE_OPENCV