comparison include/Motion.hpp @ 179:4f10e97cb677

added getting first and last instant for each feature
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 31 Oct 2011 19:17:42 -0400
parents d7df8ecf5ccd
children 3a4eef37384f
comparison
equal deleted inserted replaced
178:d7df8ecf5ccd 179:4f10e97cb677
22 22
23 /** loads from database 23 /** loads from database
24 can be made generic for different list and blob */ 24 can be made generic for different list and blob */
25 FeatureTrajectory(const int& id, TrajectoryDBAccessList<cv::Point2f>& trajectoryDB, const std::string& positionsTableName, const std::string& velocitiesTableName); 25 FeatureTrajectory(const int& id, TrajectoryDBAccessList<cv::Point2f>& trajectoryDB, const std::string& positionsTableName, const std::string& velocitiesTableName);
26 26
27 unsigned int length(void) const { return positions->size();} 27 unsigned int length(void) const { return positions->size();} // cautious if not continuous: max-min+1
28 28
29 void setId(const unsigned int& id) { positions->setId(id);velocities->setId(id);} 29 void setId(const unsigned int& id) { positions->setId(id);velocities->setId(id);}
30 30
31 void setLost(void) { lost = true;} 31 void setLost(void) { lost = true;}
32 bool isLost(void) { return lost;} 32 bool isLost(void) { return lost;}
33
34 unsigned int getFirstInstant(void) {return firstInstant;}
35 unsigned int getLastInstant(void) {return lastInstant;}
33 36
34 /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement 37 /// indicates whether the sum of the last nDisplacements displacements has been inferior to minFeatureDisplacement
35 bool isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const; 38 bool isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const;
36 39
37 /// indicates whether the last two displacements are smooth (limited acceleration and angle) 40 /// indicates whether the last two displacements are smooth (limited acceleration and angle)
48 #endif 51 #endif
49 52
50 friend std::stringstream& operator<<(std::stringstream& out, const FeatureTrajectory& ft); 53 friend std::stringstream& operator<<(std::stringstream& out, const FeatureTrajectory& ft);
51 54
52 protected: 55 protected:
53 bool lost; 56 bool lost; /// \todo remove
57 /// first frame number
58 unsigned int firstInstant;
59 /// last frame number
60 unsigned int lastInstant;
61
54 TrajectoryPoint2fPtr positions; 62 TrajectoryPoint2fPtr positions;
55 /** one fewer velocity than position 63 /** one fewer velocity than position
56 v_n = p_n+1 - p_n*/ 64 v_n = p_n+1 - p_n*/
57 TrajectoryPoint2fPtr velocities; 65 TrajectoryPoint2fPtr velocities;
58 66
73 } 81 }
74 82
75 // class MovingObject {} 83 // class MovingObject {}
76 // roadUserType, group of features 84 // roadUserType, group of features
77 85
78 /// Class to group features 86 /** Class to group features: Beymer et al. 99/Saunier and Sayed 06
87 \todo create various graph types with different parameters, that accept different feature distances or ways to connect and segment features */
79 class FeatureGraph { 88 class FeatureGraph {
80 public: 89 public:
81 FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {} 90 //FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {}
91 FeatureGraph(float _connectionDistance, float _segmentationDistance) : connectionDistance (_connectionDistance), segmentationDistance(_segmentationDistance) {}
92
93 void addFeature(const FeatureTrajectoryPtr& ft);
82 94
83 // add vertex, includes adding links to current vertices 95 // add vertex, includes adding links to current vertices
84 // find connected components, check if old enough, if so, remove 96 // find connected components, check if old enough, if so, remove
85 97
86 protected: 98 protected:
88 float minDistance; 100 float minDistance;
89 float maxDistance; 101 float maxDistance;
90 }; 102 };
91 103
92 struct VertexInformation { 104 struct VertexInformation {
93 boost::shared_ptr<FeatureTrajectory> feature; 105 FeatureTrajectoryPtr feature;
94 }; 106 };
95 107
96 typedef boost::adjacency_list <boost::listS, boost::listS, boost::undirectedS, VertexInformation, FeatureConnection> UndirectedGraph; 108 typedef boost::adjacency_list <boost::listS, boost::listS, boost::undirectedS, VertexInformation, FeatureConnection> UndirectedGraph;
97 109
98 float minDistance; 110 float connectionDistance;
99 float maxDistance; 111 float segmentationDistance;
112 // float minDistance;
113 // float maxDistance;
100 114
101 UndirectedGraph graph; 115 UndirectedGraph graph;
102 116
103 std::vector<UndirectedGraph::vertex_descriptor> currentVertices, lostVertices; 117 //std::vector<UndirectedGraph::vertex_descriptor> currentVertices, lostVertices;
104 }; 118 };
105 119
106 // inlined implementations 120 // inlined implementations
107 // inline FeatureGraph::FeatureGraph(float _minDistance, float _maxDistance) 121 // inline FeatureGraph::FeatureGraph(float _minDistance, float _maxDistance)
108 122