comparison include/Motion.hpp @ 163:cde87a07eb58

added graph structures
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 27 Sep 2011 01:38:05 -0400
parents 0089fb29cd26
children 50964af05a80
comparison
equal deleted inserted replaced
162:61fd5aff418c 163:cde87a07eb58
2 #define FEATURE_HPP 2 #define FEATURE_HPP
3 3
4 #include "src/Trajectory.h" 4 #include "src/Trajectory.h"
5 5
6 #include <boost/shared_ptr.hpp> 6 #include <boost/shared_ptr.hpp>
7 #include <boost/graph/adjacency_list.hpp>
7 8
8 template<typename T> class TrajectoryDBAccess; 9 template<typename T> class TrajectoryDBAccess;
9 10
10 /** Class for feature data 11 /** Class for feature data
11 positions, velocities and other statistics to evaluate their quality 12 positions, velocities and other statistics to evaluate their quality
15 FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const cv::Mat& homography); 16 FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const cv::Mat& homography);
16 17
17 unsigned int length(void) const { return positions.size();} 18 unsigned int length(void) const { return positions.size();}
18 19
19 void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);} 20 void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);}
21
22 void setLost(void) { lost = true;}
23 bool isLost(void) { return lost;}
20 24
21 /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement 25 /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement
22 bool smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const; 26 bool smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
23 27
24 /// indicates whether the last two displacements are smooth (limited acceleration and angle) 28 /// indicates whether the last two displacements are smooth (limited acceleration and angle)
33 #ifdef USE_OPENCV 37 #ifdef USE_OPENCV
34 void draw(cv::Mat& img, const cv::Mat& homography, const cv::Scalar& color) const; 38 void draw(cv::Mat& img, const cv::Mat& homography, const cv::Scalar& color) const;
35 #endif 39 #endif
36 40
37 protected: 41 protected:
42 bool lost;
38 Trajectory<cv::Point2f> positions; 43 Trajectory<cv::Point2f> positions;
39 /** one fewer velocity than position 44 /** one fewer velocity than position
40 v_n = p_n+1 - p_n*/ 45 v_n = p_n+1 - p_n*/
41 Trajectory<cv::Point2f> velocities; 46 Trajectory<cv::Point2f> velocities;
42 47
50 typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr; 55 typedef boost::shared_ptr<FeatureTrajectory> FeatureTrajectoryPtr;
51 56
52 // class MovingObject {} 57 // class MovingObject {}
53 // roadUserType, group of features 58 // roadUserType, group of features
54 59
60 /// Class to group features
61 class FeatureGraph {
62 public:
63 FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {}
64
65 protected:
66 struct FeatureConnection {
67 float minDistance;
68 float maxDistance;
69 };
70
71 struct VertexInformation {
72 boost::shared_ptr<FeatureTrajectory> feature;
73 };
74
75 typedef boost::adjacency_list <boost::listS, boost::listS, boost::undirectedS, VertexInformation, FeatureConnection> UndirectedGraph;
76
77 float minDistance;
78 float maxDistance;
79
80 UndirectedGraph graph;
81
82 std::vector<UndirectedGraph::vertex_descriptor> currentVertices, lostVertices;
83 };
84
85 // inlined implementations
86 // inline FeatureGraph::FeatureGraph(float _minDistance, float _maxDistance)
87
55 #endif 88 #endif