Mercurial Hosting > traffic-intelligence
changeset 480:f43bc0b0ba74
cleaning code
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 01 Apr 2014 17:42:40 -0400 |
parents | 7828fec8bbd2 |
children | b6ad86ee7033 |
files | c/Motion.cpp c/feature-based-tracking.cpp |
diffstat | 2 files changed, 17 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/c/Motion.cpp Mon Mar 31 16:20:13 2014 -0400 +++ b/c/Motion.cpp Tue Apr 01 17:42:40 2014 -0400 @@ -68,7 +68,7 @@ float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]); - result &= (ratio < accelerationBound) & (cosine > deviationBound); + result = (ratio < accelerationBound) & (cosine > deviationBound); } return result; }
--- a/c/feature-based-tracking.cpp Mon Mar 31 16:20:13 2014 -0400 +++ b/c/feature-based-tracking.cpp Tue Apr 01 17:42:40 2014 -0400 @@ -59,12 +59,10 @@ feature(_feature), pointNum(_pointNum) {} }; -inline void saveFeatures(vector<FeatureTrajectoryPtr>& features, TrajectoryDBAccess<Point2f>& db, const string& positionsTableName, const string& velocitiesTableName, const unsigned int& minNFeatures = 0) { +inline void saveFeatures(vector<FeatureTrajectoryPtr>& features, TrajectoryDBAccess<Point2f>& db, const string& positionsTableName, const string& velocitiesTableName) { /// \todo smoothing - if (features.size() >= minNFeatures) { - BOOST_FOREACH(FeatureTrajectoryPtr f, features) f->write(db, positionsTableName, velocitiesTableName); - features.clear(); - } + BOOST_FOREACH(FeatureTrajectoryPtr f, features) f->write(db, positionsTableName, velocitiesTableName); + features.clear(); } void trackFeatures(const KLTFeatureTrackingParameters& params) { @@ -145,24 +143,10 @@ if (frameNum%50 ==0) cout << "frame " << frameNum << endl; - - //capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl; - - // int emptyFrameNum = 0; - // while (frame.empty()) { - // cerr << "empty frame " << emptyFrameNum << " " << capture.get(CV_CAP_PROP_POS_FRAMES)<< endl; - // capture >> frame;//break; - // emptyFrameNum++; - // if (emptyFrameNum>=3000) - // exit(0); - // } cvtColor(frame, currentFrameBW, CV_RGB2GRAY); - // "normal" feature detectors: detect features here - // detector.detect(currentFrameBW, currKpts); // see video_homography c++ sample if (!prevPts.empty()) { - //::keyPoints2Points(prevKpts, prevPts); currPts.clear(); 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); /// \todo try calcOpticalFlowFarneback @@ -175,7 +159,7 @@ if (status[iter->pointNum]) { iter->feature->addPoint(frameNum, currPts[iter->pointNum], homography); - deleteFeature |= iter->feature->isDisplacementSmall(params.nDisplacements, minTotalFeatureDisplacement) + deleteFeature = iter->feature->isDisplacementSmall(params.nDisplacements, minTotalFeatureDisplacement) || !iter->feature->isMotionSmooth(params.accelerationBound, params.deviationBound); if (deleteFeature) iter->feature->shorten(); @@ -208,12 +192,6 @@ // BOOST_FOREACH(Rect r, locations) // rectangle(frame, r.tl(), r.br(), cv::Scalar(0,255,0), 3); } - //drawOpticalFlow(prevPts, currPts, status, frame); - - // cout << matches.size() << " matches" << endl; - // descMatcher.match(currDesc, prevDesc, matches); - // cout << matches.size() << " matches" << endl; - //drawMatchesRelative(prevKpts, currKpts, matches, frame); } // adding new features, using mask around existing feature positions @@ -228,10 +206,6 @@ featurePointMatches.push_back(FeaturePointMatch(f, currPts.size())); currPts.push_back(p); } - // currPts.insert(currPts.end(), newPts.begin(), newPts.end()); - //::keyPoints2Points(currKpts, currPts, false); - - //brief.compute(currentFrameBW, currKpts, currDesc); //Compute brief descriptors at each keypoint location if (params.display) { imshow("mask", featureMask*256); @@ -240,9 +214,18 @@ } previousFrameBW = currentFrameBW.clone(); prevPts = currPts; - //prevKpts = currKpts; - //currDesc.copyTo(prevDesc); - } + } + + // save the remaining currently tracked features + std::vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin(); + while (iter != featurePointMatches.end()) { + if (iter->feature->length() >= params.minFeatureTime) { + iter->feature->setId(savedFeatureId); + savedFeatureId++; + f->write(*trajectoryDB, "positions", "velocities") + } + iter++; + } trajectoryDB->endTransaction(); trajectoryDB->disconnect();