changeset 176:9323427aa0a3

changed positions and velocities to shared pointers and renamed methods
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 27 Oct 2011 13:56:46 -0400
parents a234a5e818f3
children ae2286b1a3fd
files c/Motion.cpp c/feature-based-tracking.cpp include/Motion.hpp
diffstat 3 files changed, 30 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/c/Motion.cpp	Wed Oct 26 19:09:50 2011 -0400
+++ b/c/Motion.cpp	Thu Oct 27 13:56:46 2011 -0400
@@ -13,12 +13,14 @@
 
 FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const Mat& homography)
   : lost(false) {
+  positions = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
+  velocities = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
   addPoint(frameNum, p, homography);
 }
 
-bool FeatureTrajectory::smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
+bool FeatureTrajectory::isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
   bool result = false;
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions > nDisplacements) {
     float disp = 0;
     for (unsigned int i=0; i<nDisplacements; i++)
@@ -28,9 +30,9 @@
   return result;
 }
 
-bool FeatureTrajectory::motionSmooth(const int& accelerationBound, const int& deviationBound) const {
+bool FeatureTrajectory::isMotionSmooth(const int& accelerationBound, const int& deviationBound) const {
   bool result = true;
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions >= 3) {
     float ratio;
     if (displacementDistances[nPositions-2] > displacementDistances[nPositions-3])
@@ -38,7 +40,7 @@
     else
       ratio = displacementDistances[nPositions-3] / displacementDistances[nPositions-2];
 
-    float cosine = scalarProduct(velocities[nPositions-3],velocities[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
+    float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
     
     result &= (ratio < accelerationBound) & (cosine > deviationBound);
   }
@@ -49,21 +51,21 @@
   Point2f pp = p;
   if (!homography.empty())
     pp = project(p, homography);
-  positions.add(frameNum, pp);
+  positions->add(frameNum, pp);
   computeMotionData(frameNum);
   assert(positions.size() == displacementDistances.size()+1);
   assert(positions.size() == velocities.size()+1);
 }
 
 void FeatureTrajectory::shorten(void) { 
-  positions.pop_back(); 
-  velocities.pop_back(); 
+  positions->pop_back(); 
+  velocities->pop_back(); 
   displacementDistances.pop_back();
 }
 
 void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) const {
-  trajectoryDB.write(positions, positionsTableName);
-  trajectoryDB.write(velocities, velocitiesTableName);
+  trajectoryDB.write(*positions, positionsTableName);
+  trajectoryDB.write(*velocities, velocitiesTableName);
 }
 
 #ifdef USE_OPENCV
@@ -71,14 +73,14 @@
 void FeatureTrajectory::draw(Mat& img, const Mat& homography, const Scalar& color) const {
   Point2f p1, p2;
   if (!homography.empty())
-    p1 = project(positions[0], homography);
+    p1 = project((*positions)[0], homography);
   else
-    p1 = positions[0];
-  for (unsigned int i=1; i<positions.size(); i++) {
+    p1 = (*positions)[0];
+  for (unsigned int i=1; i<positions->size(); i++) {
     if (!homography.empty())
-      p2 = project(positions[i], homography);
+      p2 = project((*positions)[i], homography);
     else
-      p2 = positions[i];
+      p2 = (*positions)[i];
     line(img, p1, p2, color, 1);
     p1 = p2;
   }
@@ -88,12 +90,12 @@
 // protected
 
 void FeatureTrajectory::computeMotionData(const int& frameNum) {
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions >= 2) {
-    Point2f displacement = positions[nPositions-1] - positions[nPositions-2];
+    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);
+    velocities->add(frameNum, displacement);
     float dist = norm(displacement);
     displacementDistances.push_back(dist);
   }
--- a/c/feature-based-tracking.cpp	Wed Oct 26 19:09:50 2011 -0400
+++ b/c/feature-based-tracking.cpp	Thu Oct 27 13:56:46 2011 -0400
@@ -174,8 +174,8 @@
 	  if (status[iter->pointNum]) {
 	    iter->feature->addPoint(frameNum, currPts[iter->pointNum], homography);
 
-	    deleteFeature |= iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement)
-	      || !iter->feature->motionSmooth(params.accelerationBound, params.deviationBound);
+	    deleteFeature |= iter->feature->isDisplacementSmall(params.nDisplacements, minTotalFeatureDisplacement)
+	      || !iter->feature->isMotionSmooth(params.accelerationBound, params.deviationBound);
 	    if (deleteFeature)
 	      iter->feature->shorten();
 	  } else
--- a/include/Motion.hpp	Wed Oct 26 19:09:50 2011 -0400
+++ b/include/Motion.hpp	Thu Oct 27 13:56:46 2011 -0400
@@ -8,6 +8,8 @@
 
 template<typename T> class TrajectoryDBAccess;
 
+typedef boost::shared_ptr<TrajectoryPoint2f> TrajectoryPoint2fPtr;
+
 /** Class for feature data
     positions, velocities and other statistics to evaluate their quality
     before saving. */
@@ -15,18 +17,18 @@
 public:
   FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const cv::Mat& homography);
 
-  unsigned int length(void) const { return positions.size();}
+  unsigned int length(void) const { return positions->size();}
 
-  void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);}
+  void setId(const unsigned int& id) { positions->setId(id);velocities->setId(id);}
 
   void setLost(void) { lost = true;}
   bool isLost(void) { return lost;}
 
   /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement
-  bool smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
+  bool isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
 
   /// indicates whether the last two displacements are smooth (limited acceleration and angle)
-  bool motionSmooth(const int& accelerationBound, const int& deviationBound) const;
+  bool isMotionSmooth(const int& accelerationBound, const int& deviationBound) const;
 
   void addPoint(const int& frameNum, const cv::Point2f& p, const cv::Mat& homography);
 
@@ -40,10 +42,10 @@
 
 protected:
   bool lost;
-  Trajectory<cv::Point2f> positions;
+  TrajectoryPoint2fPtr positions;
   /** one fewer velocity than position
       v_n = p_n+1 - p_n*/
-  Trajectory<cv::Point2f> velocities;
+  TrajectoryPoint2fPtr velocities;
   
   /// norms of velocities for feature constraints, one fewer positions than positions
   std::vector<float> displacementDistances;