Mercurial Hosting > 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 } |