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 }