diff include/Motion.hpp @ 191:0e60a306d324

added basic code to identify features and save them (crash)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 08 Dec 2011 18:32:35 -0500
parents 36968a63efe1
children 38974d27dd2d
line wrap: on
line diff
--- a/include/Motion.hpp	Wed Dec 07 18:51:32 2011 -0500
+++ b/include/Motion.hpp	Thu Dec 08 18:32:35 2011 -0500
@@ -26,6 +26,7 @@
 
   unsigned int length(void) const { return positions->size();} // cautious if not continuous: max-min+1
 
+  unsigned int getId(void) const { return positions->getId();}
   void setId(const unsigned int& id) { positions->setId(id);velocities->setId(id);}
 
   void setLost(void) { lost = true;}
@@ -92,20 +93,6 @@
 /** Class to group features: Beymer et al. 99/Saunier and Sayed 06
     \todo create various graph types with different parameters, that accept different feature distances or ways to connect and segment features */
 class FeatureGraph {
-public:
-  //FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {}
-  FeatureGraph(float _connectionDistance, float _segmentationDistance, unsigned int _minFeatureTime) : connectionDistance (_connectionDistance), segmentationDistance(_segmentationDistance), minFeatureTime(_minFeatureTime) {}
-
-  void addFeature(const FeatureTrajectoryPtr& ft);
-
-  // add vertex, includes adding links to current vertices
-  // find connected components, check if old enough, if so, remove
-
-  /// Computes the connected components: features have to be older than lastInstant
-  void connectedComponents(const int& lastInstant);
-
-  std::string informationString(void);
-
 protected:
   struct FeatureConnection {
     float minDistance;
@@ -118,9 +105,32 @@
 
   typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, VertexInformation, FeatureConnection> UndirectedGraph;
 
+public:
+  typedef UndirectedGraph::vertex_descriptor vertex_descriptor;
+
+  //FeatureGraph(float _minDistance, float _maxDistance) : minDistance (_minDistance), maxDistance(_maxDistance) {}
+  FeatureGraph(float _connectionDistance, float _segmentationDistance, unsigned int _minFeatureTime, float _minNFeaturesPerGroup) : connectionDistance (_connectionDistance), segmentationDistance(_segmentationDistance), minFeatureTime(_minFeatureTime), minNFeaturesPerGroup(_minNFeaturesPerGroup) {}
+
+  void addFeature(const FeatureTrajectoryPtr& ft);
+
+  // add vertex, includes adding links to current vertices
+  // find connected components, check if old enough, if so, remove
+
+  /// Computes the connected components: features have to be older than lastInstant
+  std::vector<std::vector<vertex_descriptor> > connectedComponents(const int& lastInstant);
+
+  /** Performs some checks on groups of features and return their lists of ids if correct
+      Removes the vertices from the graph
+   */
+  std::vector<std::vector<unsigned int> > getFeatureGroups(const std::vector<std::vector<vertex_descriptor> >& objectHypotheses);
+
+  std::string informationString(void);
+
+protected:
   float connectionDistance;
   float segmentationDistance;
   unsigned int minFeatureTime;
+  float minNFeaturesPerGroup;
   // float minDistance;
   // float maxDistance;