Mercurial > hg > nsaunier > traffic-intelligence
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 } |
