Mercurial Hosting > traffic-intelligence
changeset 136:0f790de9437e
renamed Feature to Motion files and added code to test blob db
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 18 Aug 2011 22:25:21 -0400 |
parents | 32d2722d4028 |
children | 445e773c9be3 |
files | c/Feature.cpp c/Makefile c/Motion.cpp c/feature-based-tracking.cpp include/Feature.hpp include/Motion.hpp include/Parameters.hpp |
diffstat | 7 files changed, 120 insertions(+), 118 deletions(-) [+] |
line wrap: on
line diff
--- a/c/Feature.cpp Thu Aug 18 01:03:38 2011 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -#include "Feature.hpp" - -#include "opencv2/core/core.hpp" -#include "opencv2/highgui/highgui.hpp" - -#include "src/TrajectoryDBAccessList.h" - -using namespace std; -using namespace cv; - -FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) { - addPoint(frameNum, p); -} - -bool FeatureTrajectory::largeDisplacement(const int& nDisplacements, const float& minTotalFeatureDisplacement) const { - bool result = true; - unsigned int nPositions = positions.size(); - if (nPositions > nDisplacements) { - float disp = 0; - for (int i=0; i<nDisplacements; i++) - disp += displacementDistances[nPositions-2-i]; - result = disp > minTotalFeatureDisplacement; - } - return result; -} - -void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) { - positions.add(frameNum, p); - computeMotionData(frameNum); -} - -void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const { - /// \todo save velocities - trajectoryDB.write(positions); -} - -#ifdef USE_OPENCV -/// \todo add option for anti-aliased drawing, thickness -void FeatureTrajectory::draw(Mat& img, const Scalar& color) const { - Point2f p1 = positions[0]; - for (unsigned int i=1; i<positions.size(); i++) { - Point2f p2 = positions[i]; - line(img, p1, p2, color, 1); - p1 = p2; - } -} -#endif - -// protected - -void FeatureTrajectory::computeMotionData(const int& frameNum) { - unsigned int nPositions = positions.size(); - if (nPositions >= 3) { - Point2f displacement = positions[nPositions-1] - positions[nPositions-2]; - if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length - velocities.add(frameNum-1, displacement); - velocities.add(frameNum, displacement); - float dist = norm(displacement); - displacementDistances.push_back(dist); - } -}
--- a/c/Makefile Thu Aug 18 01:03:38 2011 -0400 +++ b/c/Makefile Thu Aug 18 22:25:21 2011 -0400 @@ -64,7 +64,7 @@ test: echo "coucou $(HOME)" -feature-based-tracking: feature-based-tracking.o cvutils.o Feature.o +feature-based-tracking: feature-based-tracking.o cvutils.o Motion.o $(CXX) $(CFLAGS) $(LIBS) $^ -o $(BUILD_DIR)/$@ $(LDFLAGS) track-features.o: track-features.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c/Motion.cpp Thu Aug 18 22:25:21 2011 -0400 @@ -0,0 +1,61 @@ +#include "Motion.hpp" + +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" + +#include "src/TrajectoryDBAccessList.h" + +using namespace std; +using namespace cv; + +FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p) { + addPoint(frameNum, p); +} + +bool FeatureTrajectory::largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const { + bool result = true; + unsigned int nPositions = positions.size(); + if (nPositions > nDisplacements) { + float disp = 0; + for (int i=0; i<nDisplacements; i++) + disp += displacementDistances[nPositions-2-i]; + result = disp > minTotalFeatureDisplacement; + } + return result; +} + +void FeatureTrajectory::addPoint(const int& frameNum, const Point2f& p) { + positions.add(frameNum, p); + computeMotionData(frameNum); +} + +void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const { + /// \todo save velocities + trajectoryDB.write(positions); +} + +#ifdef USE_OPENCV +/// \todo add option for anti-aliased drawing, thickness +void FeatureTrajectory::draw(Mat& img, const Scalar& color) const { + Point2f p1 = positions[0]; + for (unsigned int i=1; i<positions.size(); i++) { + Point2f p2 = positions[i]; + line(img, p1, p2, color, 1); + p1 = p2; + } +} +#endif + +// protected + +void FeatureTrajectory::computeMotionData(const int& frameNum) { + unsigned int nPositions = positions.size(); + if (nPositions >= 3) { + Point2f displacement = positions[nPositions-1] - positions[nPositions-2]; + if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length + velocities.add(frameNum-1, displacement); + velocities.add(frameNum, displacement); + float dist = norm(displacement); + displacementDistances.push_back(dist); + } +}
--- a/c/feature-based-tracking.cpp Thu Aug 18 01:03:38 2011 -0400 +++ b/c/feature-based-tracking.cpp Thu Aug 18 22:25:21 2011 -0400 @@ -1,10 +1,11 @@ -#include "Feature.hpp" +#include "Motion.hpp" #include "Parameters.hpp" #include "cvutils.hpp" #include "utils.hpp" #include "src/Trajectory.h" #include "src/TrajectoryDBAccessList.h" +#include "src/TrajectoryDBAccessBlob.h" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" @@ -117,9 +118,10 @@ } // database - TrajectoryDBAccessList<Point2f> trajectoryDB; - trajectoryDB.connect("test.sqlite"); - trajectoryDB.createTable(); + TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>(); + //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>(); + trajectoryDB->connect("test.sqlite"); + trajectoryDB->createTable(); vector<KeyPoint> prevKpts, currKpts; vector<Point2f> prevPts, currPts, newPts; @@ -167,7 +169,7 @@ if (iter->feature->length() >= params.minFeatureTime) { iter->feature->setId(savedFeatureId); savedFeatureId++; - iter->feature->write(trajectoryDB); + iter->feature->write(*trajectoryDB); } iter = featurePointMatches.erase(iter); } else @@ -216,7 +218,7 @@ //currDesc.copyTo(prevDesc); } - trajectoryDB.disconnect(); + trajectoryDB->disconnect(); return 0; }
--- a/include/Feature.hpp Thu Aug 18 01:03:38 2011 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -#ifndef FEATURE_HPP -#define FEATURE_HPP - -#include "src/Trajectory.h" - -#include <boost/shared_ptr.hpp> - -template<typename T> class TrajectoryDBAccess; - -/** Class for feature data - positions, velocities and other statistics to evaluate their quality - before saving. */ -class FeatureTrajectory { -public: - FeatureTrajectory(const int& frameNum, const cv::Point2f& p); - - unsigned int length(void) const { return positions.size();} - - void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);} - - /// indicates whether the sum of the last nDisplacements displacements have been superior to minFeatureDisplacement - bool largeDisplacement(const int& nDisplacements, const float& minTotalFeatureDisplacement) const; - - //void shorten(void); - - void addPoint(const int& frameNum, const cv::Point2f& p); - - void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const; - -#ifdef USE_OPENCV - void draw(cv::Mat& img, const cv::Scalar& color) const; -#endif - -protected: - Trajectory<cv::Point2f> positions; - Trajectory<cv::Point2f> velocities; - - std::vector<float> displacementDistances; - - void computeMotionData(const int& frameNum); - -}; - -typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr; - -// class MovingObject {} -// roadUserType, group of features - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/Motion.hpp Thu Aug 18 22:25:21 2011 -0400 @@ -0,0 +1,49 @@ +#ifndef FEATURE_HPP +#define FEATURE_HPP + +#include "src/Trajectory.h" + +#include <boost/shared_ptr.hpp> + +template<typename T> class TrajectoryDBAccess; + +/** Class for feature data + positions, velocities and other statistics to evaluate their quality + before saving. */ +class FeatureTrajectory { +public: + FeatureTrajectory(const int& frameNum, const cv::Point2f& p); + + unsigned int length(void) const { return positions.size();} + + void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);} + + /// indicates whether the sum of the last nDisplacements displacements have been superior to minFeatureDisplacement + bool largeDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const; + + //void shorten(void); + + void addPoint(const int& frameNum, const cv::Point2f& p); + + void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const; + +#ifdef USE_OPENCV + void draw(cv::Mat& img, const cv::Scalar& color) const; +#endif + +protected: + Trajectory<cv::Point2f> positions; + Trajectory<cv::Point2f> velocities; + + std::vector<float> displacementDistances; + + void computeMotionData(const int& frameNum); + +}; + +typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr; + +// class MovingObject {} +// roadUserType, group of features + +#endif
--- a/include/Parameters.hpp Thu Aug 18 01:03:38 2011 -0400 +++ b/include/Parameters.hpp Thu Aug 18 22:25:21 2011 -0400 @@ -23,7 +23,7 @@ bool useHarrisDetector; float k; int pyramidLevel; - int nDisplacements; + unsigned int nDisplacements; float minFeatureDisplacement; float accelerationBound; float deviationBound;