# HG changeset patch # User Nicolas Saunier # Date 1399346266 14400 # Node ID ef4059f51af9189b4681883506874ddbdabaa137 # Parent 6ebdd90ce3eee98a7061155182ec277f09a2e9b9# Parent b96ff16b1c81e570d5069e12f3d52e95e233bfa5 merged diff -r 6ebdd90ce3ee -r ef4059f51af9 c/Parameters.cpp --- a/c/Parameters.cpp Mon May 05 23:17:19 2014 -0400 +++ b/c/Parameters.cpp Mon May 05 23:17:46 2014 -0400 @@ -36,27 +36,28 @@ ("frame1", po::value(&frame1), "first frame to process") ("nframes", po::value(&nFrames), "number of frame to process") // feature tracking - ("max-nfeatures", po::value(&maxNFeatures), "maximum number of features added at each frame") - ("feature-quality", po::value(&featureQuality), "quality level of the good features to track") - ("min-feature-distanceklt", po::value(&minFeatureDistanceKLT), "minimum distance between features") - ("window-size", po::value(&windowSize), "size of the search window at each pyramid level") + ("max-nfeatures", po::value(&maxNFeatures), "maximum number of features added at each frame (1000s)") + ("feature-quality", po::value(&featureQuality), "quality level of the good features to track (]0. 1?])") + ("min-feature-distanceklt", po::value(&minFeatureDistanceKLT), "minimum distance between features (]0. 10?])") + ("block-size", po::value(&blockSize), "size of the block for feature characteristics ([1 ?])") ("use-harris-detector", po::value(&useHarrisDetector), "use of Harris corner detector") ("k", po::value(&k), "k parameter to detect good features to track (OpenCV)") - ("pyramid-level", po::value(&pyramidLevel), "maximal pyramid level in the feature tracking algorithm") - ("ndisplacements", po::value(&nDisplacements), "number of displacement to test minimum feature motion") - ("min-feature-displacement", po::value(&minFeatureDisplacement), "minimum displacement to keep features") - ("acceleration-bound", po::value(&accelerationBound), "maximum feature acceleration") - ("deviation-bound", po::value(&deviationBound), "maximum feature deviation") - ("smoothing-halfwidth", po::value(&nFramesSmoothing), "number of frames to smooth positions (half window)") - ("max-number-iterations", po::value(&maxNumberTrackingIterations), "maximum number of iterations to stop feature tracking") - ("min-tracking-error", po::value(&minTrackingError), "minimum error to reach to stop feature tracking") - ("min-feature-eig-threshold", po::value(&minFeatureEigThreshold)->default_value(1e-4), "minimum eigen value of a 2x2 normal matrix of optical flow equations") - ("min-feature-time", po::value(&minFeatureTime), "minimum length of a feature (number of frames) to consider a feature for grouping") - ("mm-connection-distance", po::value(&mmConnectionDistance), "connection distance in feature grouping") - ("mm-segmentation-distance", po::value(&mmSegmentationDistance), "segmentation distance in feature grouping") - ("max-distance", po::value(&maxDistance), "maximum distance between features for grouping") - ("min-velocity-cosine", po::value(&minVelocityCosine), "minimum cosine of the angle between the velocity vectors for grouping") - ("min-nfeatures-group", po::value(&minNFeaturesPerGroup), "minimum average number of features per frame to create a vehicle hypothesis") + ("window-size", po::value(&windowSize), "size of the search window at each pyramid level ([1 ?])") + ("pyramid-level", po::value(&pyramidLevel), "maximal pyramid level in the feature tracking algorithm ([0 maxLevel=5?])") + ("ndisplacements", po::value(&nDisplacements), "number of displacements to test minimum feature motion ([2 4])") + ("min-feature-displacement", po::value(&minFeatureDisplacement), "minimum displacement per frame (in world space) to keep features (]0. 0.1?])") + ("acceleration-bound", po::value(&accelerationBound), "maximum feature acceleration (]1 3+])") + ("deviation-bound", po::value(&deviationBound), "maximum feature deviation (on cosine) (]0 1])") + ("smoothing-halfwidth", po::value(&nFramesSmoothing), "number of frames to smooth positions (half window) ([0 inf[") + ("max-number-iterations", po::value(&maxNumberTrackingIterations), "maximum number of iterations to stop optical flow (20-30?)") + ("min-tracking-error", po::value(&minTrackingError), "minimum error to reach to stop optical flow (0.3-0.01)") + ("min-feature-eig-threshold", po::value(&minFeatureEigThreshold)->default_value(1e-4), "minimum eigen value of a 2x2 normal matrix of optical flow equations (10^-4)") + ("min-feature-time", po::value(&minFeatureTime), "minimum length of a feature (number of frames) to consider a feature for grouping [5 20+]") + ("mm-connection-distance", po::value(&mmConnectionDistance), "connection distance in feature grouping (in world space) (ped: [0.5m 2m+], cars: [1.7m 4m+])") + ("mm-segmentation-distance", po::value(&mmSegmentationDistance), "segmentation distance in feature grouping (in world space) (< mm-connection-distance, empirically ~ mm-connection-distance / 2.5)") + ("max-distance", po::value(&maxDistance), "maximum distance between features for grouping (in world space) (unused)") + ("min-velocity-cosine", po::value(&minVelocityCosine), "minimum cosine of the angle between the velocity vectors for grouping (unused)") + ("min-nfeatures-group", po::value(&minNFeaturesPerGroup), "minimum average number of features per frame to create a vehicle hypothesis (]1 3+])") // ("max-uturn-cosine", po::value(&maxUTurnCosine), "maximum cosine value to detect U-turn") // ("nframes-avoid-uturn", po::value(&nFramesAvoidUTurn), "number of frames over which a feature should not make a U-turn") // Safety Analysis diff -r 6ebdd90ce3ee -r ef4059f51af9 c/feature-based-tracking.cpp --- a/c/feature-based-tracking.cpp Mon May 05 23:17:19 2014 -0400 +++ b/c/feature-based-tracking.cpp Mon May 05 23:17:46 2014 -0400 @@ -2,6 +2,8 @@ #include "Parameters.hpp" #include "cvutils.hpp" #include "utils.hpp" +#include "InputVideoFileModule.h" +#include "InputFrameListModule.h" #include "src/Trajectory.h" #include "src/TrajectoryDBAccessList.h" @@ -18,9 +20,6 @@ #include #include -#include "InputVideoFileModule.h" -#include "InputFrameListModule.h" - #include #include #include @@ -133,7 +132,7 @@ unsigned int lastFrameNum = nFrames; if (params.nFrames > 0) lastFrameNum = MIN(params.frame1+static_cast(params.nFrames), nFrames); - + capture->setFrameNumber(params.frame1); for (unsigned int frameNum = params.frame1; (frameNum < lastFrameNum) && !::interruptionKey(key); frameNum++) { bool success = capture->getNextFrame(frame); @@ -148,7 +147,7 @@ if (!prevPts.empty()) { currPts.clear(); - calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast(TermCriteria::COUNT)+static_cast(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), /* int flags = */ 0, params.minFeatureEigThreshold); + calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(static_cast(TermCriteria::COUNT)+static_cast(TermCriteria::EPS) /* = 3 */, params.maxNumberTrackingIterations, params.minTrackingError), /* int flags = */ 0, params.minFeatureEigThreshold); /// \todo try calcOpticalFlowFarneback std::vector trackedPts; @@ -201,7 +200,7 @@ for (int j=MAX(0, currPts[n].x-params.minFeatureDistanceKLT); j(i,j)=0; - goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.windowSize, params.useHarrisDetector, params.k); + goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.blockSize, params.useHarrisDetector, params.k); BOOST_FOREACH(Point2f p, newPts) { //for (unsigned int i=0; i