changeset 136:0f790de9437e

renamed Feature to Motion files and added code to test blob db
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 18 Aug 2011 22:25:21 -0400
parents 32d2722d4028
children 445e773c9be3
files c/Feature.cpp c/Makefile c/Motion.cpp c/feature-based-tracking.cpp include/Feature.hpp include/Motion.hpp include/Parameters.hpp
diffstat 7 files changed, 120 insertions(+), 118 deletions(-) [+]
line wrap: on
line diff
--- a/c/Feature.cpp	Thu Aug 18 01:03:38 2011 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-#include "Feature.hpp"
-
-#include "opencv2/core/core.hpp"
-#include "opencv2/highgui/highgui.hpp"
-
-#include "src/TrajectoryDBAccessList.h"
-
-using namespace std;
-using namespace cv;
-
-FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) {
-  addPoint(frameNum, p);
-}
-
-bool FeatureTrajectory::largeDisplacement(const int& nDisplacements, const float& minTotalFeatureDisplacement) const {
-  bool result = true;
-  unsigned int nPositions = positions.size();
-  if (nPositions > nDisplacements) {
-    float disp = 0;
-    for (int i=0; i<nDisplacements; i++)
-      disp += displacementDistances[nPositions-2-i];
-    result = disp > minTotalFeatureDisplacement;
-  }
-  return result;
-}
-
-void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) {
-  positions.add(frameNum, p);
-  computeMotionData(frameNum);
-}
-
-void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const {
-  /// \todo save velocities
-  trajectoryDB.write(positions);
-}
-
-#ifdef USE_OPENCV
-/// \todo add option for anti-aliased drawing, thickness
-void FeatureTrajectory::draw(Mat& img, const Scalar& color) const {
-  Point2f p1 = positions[0];
-  for (unsigned int i=1; i<positions.size(); i++) {
-    Point2f p2 = positions[i];
-    line(img, p1, p2, color, 1);
-    p1 = p2;
-  }
-}
-#endif
-
-// protected
-
-void FeatureTrajectory::computeMotionData(const int& frameNum) {
-  unsigned int nPositions = positions.size();
-  if (nPositions >= 3) {
-    Point2f displacement = positions[nPositions-1] - positions[nPositions-2];
-    if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length
-      velocities.add(frameNum-1, displacement);
-    velocities.add(frameNum, displacement);
-    float dist = norm(displacement);
-    displacementDistances.push_back(dist);
-  }
-}
--- a/c/Makefile	Thu Aug 18 01:03:38 2011 -0400
+++ b/c/Makefile	Thu Aug 18 22:25:21 2011 -0400
@@ -64,7 +64,7 @@
 test:
 	echo "coucou $(HOME)"
 
-feature-based-tracking: feature-based-tracking.o cvutils.o Feature.o
+feature-based-tracking: feature-based-tracking.o cvutils.o Motion.o
 	$(CXX) $(CFLAGS) $(LIBS) $^ -o $(BUILD_DIR)/$@ $(LDFLAGS)
 
 track-features.o: track-features.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/Motion.cpp	Thu Aug 18 22:25:21 2011 -0400
@@ -0,0 +1,61 @@
+#include "Motion.hpp"
+
+#include "opencv2/core/core.hpp"
+#include "opencv2/highgui/highgui.hpp"
+
+#include "src/TrajectoryDBAccessList.h"
+
+using namespace std;
+using namespace cv;
+
+FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) {
+  addPoint(frameNum, p);
+}
+
+bool FeatureTrajectory::largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
+  bool result = true;
+  unsigned int nPositions = positions.size();
+  if (nPositions > nDisplacements) {
+    float disp = 0;
+    for (int i=0; i<nDisplacements; i++)
+      disp += displacementDistances[nPositions-2-i];
+    result = disp > minTotalFeatureDisplacement;
+  }
+  return result;
+}
+
+void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) {
+  positions.add(frameNum, p);
+  computeMotionData(frameNum);
+}
+
+void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const {
+  /// \todo save velocities
+  trajectoryDB.write(positions);
+}
+
+#ifdef USE_OPENCV
+/// \todo add option for anti-aliased drawing, thickness
+void FeatureTrajectory::draw(Mat& img, const Scalar& color) const {
+  Point2f p1 = positions[0];
+  for (unsigned int i=1; i<positions.size(); i++) {
+    Point2f p2 = positions[i];
+    line(img, p1, p2, color, 1);
+    p1 = p2;
+  }
+}
+#endif
+
+// protected
+
+void FeatureTrajectory::computeMotionData(const int& frameNum) {
+  unsigned int nPositions = positions.size();
+  if (nPositions >= 3) {
+    Point2f displacement = positions[nPositions-1] - positions[nPositions-2];
+    if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length
+      velocities.add(frameNum-1, displacement);
+    velocities.add(frameNum, displacement);
+    float dist = norm(displacement);
+    displacementDistances.push_back(dist);
+  }
+}
--- a/c/feature-based-tracking.cpp	Thu Aug 18 01:03:38 2011 -0400
+++ b/c/feature-based-tracking.cpp	Thu Aug 18 22:25:21 2011 -0400
@@ -1,10 +1,11 @@
-#include "Feature.hpp"
+#include "Motion.hpp"
 #include "Parameters.hpp"
 #include "cvutils.hpp"
 #include "utils.hpp"
 
 #include "src/Trajectory.h"
 #include "src/TrajectoryDBAccessList.h"
+#include "src/TrajectoryDBAccessBlob.h"
 
 #include "opencv2/core/core.hpp"
 #include "opencv2/highgui/highgui.hpp"
@@ -117,9 +118,10 @@
     }
   
   // database
-  TrajectoryDBAccessList<Point2f> trajectoryDB;
-  trajectoryDB.connect("test.sqlite");
-  trajectoryDB.createTable();
+  TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>();
+  //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
+  trajectoryDB->connect("test.sqlite");
+  trajectoryDB->createTable();
 
   vector<KeyPoint> prevKpts, currKpts;
   vector<Point2f> prevPts, currPts, newPts;
@@ -167,7 +169,7 @@
 	    if (iter->feature->length() >= params.minFeatureTime) {
 	      iter->feature->setId(savedFeatureId);
 	      savedFeatureId++;
-	      iter->feature->write(trajectoryDB);
+	      iter->feature->write(*trajectoryDB);
 	    }
 	    iter = featurePointMatches.erase(iter);
 	  } else
@@ -216,7 +218,7 @@
       //currDesc.copyTo(prevDesc);
     }  
   
-  trajectoryDB.disconnect();
+  trajectoryDB->disconnect();
   return 0;
 }
 
--- a/include/Feature.hpp	Thu Aug 18 01:03:38 2011 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#ifndef FEATURE_HPP
-#define FEATURE_HPP
-
-#include "src/Trajectory.h"
-
-#include <boost/shared_ptr.hpp>
-
-template<typename T> class TrajectoryDBAccess;
-
-/** Class for feature data
-    positions, velocities and other statistics to evaluate their quality
-    before saving. */
-class FeatureTrajectory {
-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);}
-
-  /// indicates whether the sum of the last nDisplacements displacements have been superior to minFeatureDisplacement
-  bool largeDisplacement(const int& nDisplacements, const float& minTotalFeatureDisplacement) const;
-
-  //void shorten(void);
-
-  void addPoint(const int& frameNum, const cv::Point2f& p);
-
-  void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const;
-
-#ifdef USE_OPENCV
-  void draw(cv::Mat& img, const cv::Scalar& color) const;
-#endif
-
-protected:
-  Trajectory<cv::Point2f> positions;
-  Trajectory<cv::Point2f> velocities;
-  
-  std::vector<float> displacementDistances;
-
-  void computeMotionData(const int& frameNum);
-
-};
-
-typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr;
-
-// class MovingObject {}
-// roadUserType, group of features
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/Motion.hpp	Thu Aug 18 22:25:21 2011 -0400
@@ -0,0 +1,49 @@
+#ifndef FEATURE_HPP
+#define FEATURE_HPP
+
+#include "src/Trajectory.h"
+
+#include <boost/shared_ptr.hpp>
+
+template<typename T> class TrajectoryDBAccess;
+
+/** Class for feature data
+    positions, velocities and other statistics to evaluate their quality
+    before saving. */
+class FeatureTrajectory {
+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);}
+
+  /// 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);
+
+  void addPoint(const int& frameNum, const cv::Point2f& p);
+
+  void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const;
+
+#ifdef USE_OPENCV
+  void draw(cv::Mat& img, const cv::Scalar& color) const;
+#endif
+
+protected:
+  Trajectory<cv::Point2f> positions;
+  Trajectory<cv::Point2f> velocities;
+  
+  std::vector<float> displacementDistances;
+
+  void computeMotionData(const int& frameNum);
+
+};
+
+typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr;
+
+// class MovingObject {}
+// roadUserType, group of features
+
+#endif
--- a/include/Parameters.hpp	Thu Aug 18 01:03:38 2011 -0400
+++ b/include/Parameters.hpp	Thu Aug 18 22:25:21 2011 -0400
@@ -23,7 +23,7 @@
   bool useHarrisDetector;
   float k;
   int pyramidLevel;
-  int nDisplacements;
+  unsigned int nDisplacements;
   float minFeatureDisplacement;
   float accelerationBound;
   float deviationBound;