Mercurial Hosting > traffic-intelligence
diff c/feature-based-tracking.cpp @ 135:32d2722d4028
added constraint on minimum displacement
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 18 Aug 2011 01:03:38 -0400 |
parents | a617d0808bbc |
children | 0f790de9437e |
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp Wed Aug 17 23:21:26 2011 -0400 +++ b/c/feature-based-tracking.cpp Thu Aug 18 01:03:38 2011 -0400 @@ -60,7 +60,7 @@ Mat frame, currentFrameBW, previousFrameBW; KLTFeatureTrackingParameters params; - params.display = false; + params.display = true; params.frame1 = 0; params.nFrames = -1; params.maxNFeatures = 1000; @@ -72,6 +72,10 @@ //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k); params.pyramidLevel = 3; + params.nDisplacements = 3; + params.minFeatureDisplacement = 0.05; + float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement; + params.maxNumberTrackingIterations = 20; // 30 params.minTrackingError = 0.3; // 0.01 params.derivLambda = 0.5; @@ -148,19 +152,26 @@ vector<Point2f> trackedPts; vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin(); while (iter != featurePointMatches.end()) { + bool deleteFeature = false; + if (status[iter->pointNum]) { iter->feature->addPoint(frameNum, currPts[iter->pointNum]); trackedPts.push_back(currPts[iter->pointNum]); iter->pointNum = trackedPts.size()-1; - iter++; - } else { + + deleteFeature |= !iter->feature->largeDisplacement(params.nDisplacements, minTotalFeatureDisplacement); + // motionSmooth() + } + + if (deleteFeature) { if (iter->feature->length() >= params.minFeatureTime) { iter->feature->setId(savedFeatureId); savedFeatureId++; iter->feature->write(trajectoryDB); } iter = featurePointMatches.erase(iter); - } + } else + iter++; } currPts = trackedPts; assert(currPts.size() == featurePointMatches.size());