Mercurial > hg > nsaunier > traffic-intelligence
comparison c/feature-based-tracking.cpp @ 495:82c06ad62254
added parameter description with ranges
A parameter was added (block size) that used to be the same as window size
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 01 May 2014 11:08:26 -0400 |
| parents | b6ad86ee7033 |
| children | b96ff16b1c81 |
comparison
equal
deleted
inserted
replaced
| 493:850ed17c7b2f | 495:82c06ad62254 |
|---|---|
| 131 Mat frame = Mat::zeros(1, 1, CV_8UC1), currentFrameBW, previousFrameBW; | 131 Mat frame = Mat::zeros(1, 1, CV_8UC1), currentFrameBW, previousFrameBW; |
| 132 | 132 |
| 133 unsigned int lastFrameNum = nFrames; | 133 unsigned int lastFrameNum = nFrames; |
| 134 if (params.nFrames > 0) | 134 if (params.nFrames > 0) |
| 135 lastFrameNum = MIN(params.frame1+static_cast<unsigned int>(params.nFrames), nFrames); | 135 lastFrameNum = MIN(params.frame1+static_cast<unsigned int>(params.nFrames), nFrames); |
| 136 | 136 |
| 137 capture->setFrameNumber(params.frame1); | 137 capture->setFrameNumber(params.frame1); |
| 138 for (unsigned int frameNum = params.frame1; (frameNum < lastFrameNum) && !::interruptionKey(key); frameNum++) { | 138 for (unsigned int frameNum = params.frame1; (frameNum < lastFrameNum) && !::interruptionKey(key); frameNum++) { |
| 139 bool success = capture->getNextFrame(frame); | 139 bool success = capture->getNextFrame(frame); |
| 140 | 140 |
| 141 if (!success || frame.empty() || frame.size() != videoSize) | 141 if (!success || frame.empty() || frame.size() != videoSize) |
| 146 | 146 |
| 147 cvtColor(frame, currentFrameBW, CV_RGB2GRAY); | 147 cvtColor(frame, currentFrameBW, CV_RGB2GRAY); |
| 148 | 148 |
| 149 if (!prevPts.empty()) { | 149 if (!prevPts.empty()) { |
| 150 currPts.clear(); | 150 currPts.clear(); |
| 151 calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), /* int flags = */ 0, params.minFeatureEigThreshold); | 151 calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS) /* = 3 */, params.maxNumberTrackingIterations, params.minTrackingError), /* int flags = */ 0, params.minFeatureEigThreshold); |
| 152 /// \todo try calcOpticalFlowFarneback | 152 /// \todo try calcOpticalFlowFarneback |
| 153 | 153 |
| 154 std::vector<Point2f> trackedPts; | 154 std::vector<Point2f> trackedPts; |
| 155 std::vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin(); | 155 std::vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin(); |
| 156 while (iter != featurePointMatches.end()) { | 156 while (iter != featurePointMatches.end()) { |
| 199 Mat featureMask = mask.clone(); | 199 Mat featureMask = mask.clone(); |
| 200 for (unsigned int n=0;n<currPts.size(); n++) | 200 for (unsigned int n=0;n<currPts.size(); n++) |
| 201 for (int j=MAX(0, currPts[n].x-params.minFeatureDistanceKLT); j<MIN(videoSize.width, currPts[n].x+params.minFeatureDistanceKLT+1); j++) | 201 for (int j=MAX(0, currPts[n].x-params.minFeatureDistanceKLT); j<MIN(videoSize.width, currPts[n].x+params.minFeatureDistanceKLT+1); j++) |
| 202 for (int i=MAX(0, currPts[n].y-params.minFeatureDistanceKLT); i<MIN(videoSize.height, currPts[n].y+params.minFeatureDistanceKLT+1); i++) | 202 for (int i=MAX(0, currPts[n].y-params.minFeatureDistanceKLT); i<MIN(videoSize.height, currPts[n].y+params.minFeatureDistanceKLT+1); i++) |
| 203 featureMask.at<uchar>(i,j)=0; | 203 featureMask.at<uchar>(i,j)=0; |
| 204 goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.windowSize, params.useHarrisDetector, params.k); | 204 goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.blockSize, params.useHarrisDetector, params.k); |
| 205 BOOST_FOREACH(Point2f p, newPts) { //for (unsigned int i=0; i<newPts.size(); i++) { | 205 BOOST_FOREACH(Point2f p, newPts) { //for (unsigned int i=0; i<newPts.size(); i++) { |
| 206 FeatureTrajectoryPtr f = FeatureTrajectoryPtr(new FeatureTrajectory(frameNum, p, homography)); | 206 FeatureTrajectoryPtr f = FeatureTrajectoryPtr(new FeatureTrajectory(frameNum, p, homography)); |
| 207 featurePointMatches.push_back(FeaturePointMatch(f, currPts.size())); | 207 featurePointMatches.push_back(FeaturePointMatch(f, currPts.size())); |
| 208 currPts.push_back(p); | 208 currPts.push_back(p); |
| 209 } | 209 } |
