Mercurial Hosting > traffic-intelligence
changeset 138:c1b260b48d2a
corrected initialization bugs and feature shortening before saving
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 19 Aug 2011 12:15:23 -0400 |
parents | 445e773c9be3 |
children | 47329bd16cc0 |
files | c/Motion.cpp c/feature-based-tracking.cpp include/Motion.hpp |
diffstat | 3 files changed, 38 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/c/Motion.cpp Fri Aug 19 01:35:45 2011 -0400 +++ b/c/Motion.cpp Fri Aug 19 12:15:23 2011 -0400 @@ -12,14 +12,14 @@ addPoint(frameNum, p); } -bool FeatureTrajectory::largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const { - bool result = true; +bool FeatureTrajectory::smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const { + bool result = false; unsigned int nPositions = positions.size(); if (nPositions > nDisplacements) { float disp = 0; for (unsigned int i=0; i<nDisplacements; i++) disp += displacementDistances[nPositions-2-i]; - result = disp > minTotalFeatureDisplacement; + result = disp < minTotalFeatureDisplacement; } return result; } @@ -29,6 +29,12 @@ computeMotionData(frameNum); } +void FeatureTrajectory::shorten(void) { + positions.pop_back(); + velocities.pop_back(); + displacementDistances.pop_back(); +} + void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const { /// \todo save velocities trajectoryDB.write(positions);
--- a/c/feature-based-tracking.cpp Fri Aug 19 01:35:45 2011 -0400 +++ b/c/feature-based-tracking.cpp Fri Aug 19 12:15:23 2011 -0400 @@ -110,17 +110,27 @@ // } capture.open(params.videoFilename); - if (!capture.isOpened()) - { - //help(argv); - cout << "capture device " << argv[1] << " failed to open!" << endl; - return 1; - } + if(capture.isOpened()) { + videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); + cout << "Video " << argv[1] << + ": width=" << videoSize.width << + ", height=" << videoSize.height << + ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl; + } else { + cout << "Video filename " << params.videoFilename << " could not be opened. Exiting." << endl; + exit(0); + } + // if (!capture.isOpened()) + // { + // //help(argv); + // cout << "capture device " << argv[1] << " failed to open!" << endl; + // return 1; + // } // database TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>(); //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>(); - trajectoryDB->connect("test.sqlite"); + trajectoryDB->connect(params.databaseFilename.c_str()); trajectoryDB->createTable(); vector<KeyPoint> prevKpts, currKpts; @@ -158,10 +168,11 @@ if (status[iter->pointNum]) { iter->feature->addPoint(frameNum, currPts[iter->pointNum]); - trackedPts.push_back(currPts[iter->pointNum]); - iter->pointNum = trackedPts.size()-1; - deleteFeature |= !iter->feature->largeDisplacement(params.nDisplacements, minTotalFeatureDisplacement); + bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement); + if (smallDisplacement) + iter->feature->shorten(); + deleteFeature |= smallDisplacement; // motionSmooth() } @@ -172,8 +183,11 @@ iter->feature->write(*trajectoryDB); } iter = featurePointMatches.erase(iter); - } else + } else { + trackedPts.push_back(currPts[iter->pointNum]); + iter->pointNum = trackedPts.size()-1; iter++; + } } currPts = trackedPts; assert(currPts.size() == featurePointMatches.size());
--- a/include/Motion.hpp Fri Aug 19 01:35:45 2011 -0400 +++ b/include/Motion.hpp Fri Aug 19 12:15:23 2011 -0400 @@ -18,13 +18,13 @@ void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);} - /// indicates whether the sum of the last nDisplacements displacements have been superior to minFeatureDisplacement - bool largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const; - - //void shorten(void); + /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement + bool smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const; void addPoint(const int& frameNum, const cv::Point2f& p); + void shorten(void); + void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const; #ifdef USE_OPENCV