# HG changeset patch # User Nicolas Saunier # Date 1313770523 14400 # Node ID c1b260b48d2a4e51de10fe641dab90d3f057321f # Parent 445e773c9be3c6483f77e33776adbfb0976e94a7 corrected initialization bugs and feature shortening before saving diff -r 445e773c9be3 -r c1b260b48d2a c/Motion.cpp --- 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 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& trajectoryDB) const { /// \todo save velocities trajectoryDB.write(positions); diff -r 445e773c9be3 -r c1b260b48d2a c/feature-based-tracking.cpp --- 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* trajectoryDB = new TrajectoryDBAccessList(); //TrajectoryDBAccess* trajectoryDB = new TrajectoryDBAccessBlob(); - trajectoryDB->connect("test.sqlite"); + trajectoryDB->connect(params.databaseFilename.c_str()); trajectoryDB->createTable(); vector 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()); diff -r 445e773c9be3 -r c1b260b48d2a include/Motion.hpp --- 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& trajectoryDB) const; #ifdef USE_OPENCV