Mercurial Hosting > traffic-intelligence
changeset 134:a617d0808bbc
added test on feature length and display control
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 17 Aug 2011 23:21:26 -0400 |
parents | 63dd4355b6d1 |
children | 32d2722d4028 |
files | c/feature-based-tracking.cpp include/Feature.hpp include/Parameters.hpp |
diffstat | 3 files changed, 23 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp Wed Aug 17 22:26:01 2011 -0400 +++ b/c/feature-based-tracking.cpp Wed Aug 17 23:21:26 2011 -0400 @@ -60,8 +60,9 @@ Mat frame, currentFrameBW, previousFrameBW; KLTFeatureTrackingParameters params; + params.display = false; params.frame1 = 0; - params.nFrames = 50; + params.nFrames = -1; params.maxNFeatures = 1000; params.featureQuality = 0.1; params.minFeatureDistanceKLT = 3; @@ -74,6 +75,8 @@ params.maxNumberTrackingIterations = 20; // 30 params.minTrackingError = 0.3; // 0.01 params.derivLambda = 0.5; + params.minFeatureTime = 20; + Size window = Size(params.windowSize, params.windowSize); BruteForceMatcher<Hamming> descMatcher; @@ -128,7 +131,7 @@ unsigned int savedFeatureId=0; for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) { capture >> frame; - cout << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl; + cout << frameNum << " " << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl; while (frame.empty()) capture >> frame;//break; @@ -151,19 +154,22 @@ iter->pointNum = trackedPts.size()-1; iter++; } else { - iter->feature->setId(savedFeatureId); - savedFeatureId++; - iter->feature->write(trajectoryDB); + if (iter->feature->length() >= params.minFeatureTime) { + iter->feature->setId(savedFeatureId); + savedFeatureId++; + iter->feature->write(trajectoryDB); + } iter = featurePointMatches.erase(iter); } } currPts = trackedPts; assert(currPts.size() == featurePointMatches.size()); - - BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches) - fp.feature->draw(frame, Colors::red()); + + if (params.display) + BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches) + fp.feature->draw(frame, Colors::red()); //drawOpticalFlow(prevPts, currPts, status, frame); - + // cout << matches.size() << " matches" << endl; // descMatcher.match(currDesc, prevDesc, matches); // cout << matches.size() << " matches" << endl; @@ -188,13 +194,15 @@ //brief.compute(currentFrameBW, currKpts, currDesc); //Compute brief descriptors at each keypoint location - imshow("frame", frame); - imshow("mask", featureMask*256); + if (params.display) { + imshow("frame", frame); + imshow("mask", featureMask*256); + key = waitKey(2); + } previousFrameBW = currentFrameBW.clone(); prevPts = currPts; //prevKpts = currKpts; //currDesc.copyTo(prevDesc); - key = waitKey(2); } trajectoryDB.disconnect();
--- a/include/Feature.hpp Wed Aug 17 22:26:01 2011 -0400 +++ b/include/Feature.hpp Wed Aug 17 23:21:26 2011 -0400 @@ -14,6 +14,8 @@ public: FeatureTrajectory(const int& frameNum, const cv::Point2f& p); + unsigned int length(void) const { return positions.size();} + void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);} void addPoint(const int& frameNum, const cv::Point2f& p);