Mercurial Hosting > traffic-intelligence
diff c/feature-based-tracking.cpp @ 139:47329bd16cc0
cleaned code, added condition on smooth displacement
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 23 Aug 2011 13:14:47 -0400 |
parents | c1b260b48d2a |
children | 8de5e8256224 |
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp Fri Aug 19 12:15:23 2011 -0400 +++ b/c/feature-based-tracking.cpp Tue Aug 23 13:14:47 2011 -0400 @@ -62,24 +62,6 @@ KLTFeatureTrackingParameters params(argc, argv); cout << params.parameterDescription << endl; - // params.display = true; - // params.frame1 = 0; - // params.nFrames = -1; - // params.maxNFeatures = 1000; - // params.featureQuality = 0.1; - // params.minFeatureDistanceKLT = 3; - // params.windowSize = 3; - // params.useHarrisDetector = false; - // params.k = 0.4; - // //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k); - - // params.pyramidLevel = 3; - // params.nDisplacements = 3; - // params.minFeatureDisplacement = 0.05; - - // params.maxNumberTrackingIterations = 20; // 30 - // params.minTrackingError = 0.3; // 0.01 - // params.minFeatureTime = 20; float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement; Size window = Size(params.windowSize, params.windowSize); @@ -142,7 +124,6 @@ vector<FeatureTrajectoryPtr> features; vector<FeaturePointMatch> featurePointMatches; - // TODO structure de donnee paires pointeur trajectory, numero de keypoint int key = '?'; unsigned int savedFeatureId=0; for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) { @@ -169,17 +150,18 @@ if (status[iter->pointNum]) { iter->feature->addPoint(frameNum, currPts[iter->pointNum]); - bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement); - if (smallDisplacement) + deleteFeature |= iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement) + || !iter->feature->motionSmooth(params.accelerationBound, params.deviationBound); + if (deleteFeature) iter->feature->shorten(); - deleteFeature |= smallDisplacement; - // motionSmooth() - } + } else + deleteFeature = true; if (deleteFeature) { if (iter->feature->length() >= params.minFeatureTime) { iter->feature->setId(savedFeatureId); savedFeatureId++; + /// \todo smoothing iter->feature->write(*trajectoryDB); } iter = featurePointMatches.erase(iter); @@ -192,9 +174,10 @@ currPts = trackedPts; assert(currPts.size() == featurePointMatches.size()); - if (params.display) + if (params.display) { BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches) fp.feature->draw(frame, Colors::red()); + } //drawOpticalFlow(prevPts, currPts, status, frame); // cout << matches.size() << " matches" << endl;