Mercurial Hosting > traffic-intelligence
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;