comparison 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
comparison
equal deleted inserted replaced
134:a617d0808bbc 135:32d2722d4028
8 using namespace std; 8 using namespace std;
9 using namespace cv; 9 using namespace cv;
10 10
11 FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) { 11 FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) {
12 addPoint(frameNum, p); 12 addPoint(frameNum, p);
13 }
14
15 bool FeatureTrajectory::largeDisplacement(const int& nDisplacements, const float& minTotalFeatureDisplacement) const {
16 bool result = true;
17 unsigned int nPositions = positions.size();
18 if (nPositions > nDisplacements) {
19 float disp = 0;
20 for (int i=0; i<nDisplacements; i++)
21 disp += displacementDistances[nPositions-2-i];
22 result = disp > minTotalFeatureDisplacement;
23 }
24 return result;
13 } 25 }
14 26
15 void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) { 27 void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) {
16 positions.add(frameNum, p); 28 positions.add(frameNum, p);
17 computeMotionData(frameNum); 29 computeMotionData(frameNum);
38 50
39 void FeatureTrajectory::computeMotionData(const int& frameNum) { 51 void FeatureTrajectory::computeMotionData(const int& frameNum) {
40 unsigned int nPositions = positions.size(); 52 unsigned int nPositions = positions.size();
41 if (nPositions >= 3) { 53 if (nPositions >= 3) {
42 Point2f displacement = positions[nPositions-1] - positions[nPositions-2]; 54 Point2f displacement = positions[nPositions-1] - positions[nPositions-2];
55 if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length
56 velocities.add(frameNum-1, displacement);
43 velocities.add(frameNum, displacement); 57 velocities.add(frameNum, displacement);
44 float dist = norm(displacement); 58 float dist = norm(displacement);
45 displacementDistances.push_back(dist); 59 displacementDistances.push_back(dist);
46 } else if (nPositions == 2) {
47 Point2f displacement = positions[1] - positions[0];
48 velocities.add(frameNum-1, displacement);
49 velocities.add(frameNum, displacement);
50 float dist = norm(displacement);
51 displacementDistances.push_back(dist);
52 displacementDistances.push_back(dist);
53 } 60 }
54 } 61 }