diff c/Feature.cpp @ 135:32d2722d4028

added constraint on minimum displacement
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 18 Aug 2011 01:03:38 -0400
parents 63dd4355b6d1
children
line wrap: on
line diff
--- a/c/Feature.cpp	Wed Aug 17 23:21:26 2011 -0400
+++ b/c/Feature.cpp	Thu Aug 18 01:03:38 2011 -0400
@@ -12,6 +12,18 @@
   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);
@@ -40,15 +52,10 @@
   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);
-  } else if (nPositions == 2) {
-    Point2f displacement = positions[1] - positions[0];
-    velocities.add(frameNum-1, displacement);
-    velocities.add(frameNum, displacement);
-    float dist = norm(displacement);
-    displacementDistances.push_back(dist);
-    displacementDistances.push_back(dist);
   }
 }