diff c/Motion.cpp @ 614:5e09583275a4

Merged Nicolas/trafficintelligence into default
author Mohamed Gomaa <eng.m.gom3a@gmail.com>
date Fri, 05 Dec 2014 12:13:53 -0500
parents f86f5f25730a
children 045d05cef9d0
line wrap: on
line diff
--- a/c/Motion.cpp	Thu Apr 18 15:29:33 2013 -0400
+++ b/c/Motion.cpp	Fri Dec 05 12:13:53 2014 -0500
@@ -51,7 +51,7 @@
     float disp = 0;
     for (unsigned int i=0; i<nDisplacements; i++)
       disp += displacementDistances[nPositions-2-i];
-    result = disp < minTotalFeatureDisplacement;
+    result = disp <= minTotalFeatureDisplacement;
   }
   return result;
 }
@@ -66,9 +66,9 @@
     else
       ratio = displacementDistances[nPositions-3] / displacementDistances[nPositions-2];
 
-    float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
+    float cosine = (*velocities)[nPositions-3].dot((*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
     
-    result &= (ratio < accelerationBound) & (cosine > deviationBound);
+    result = (ratio < accelerationBound) & (cosine > deviationBound);
   }
   return result;
 }
@@ -111,6 +111,11 @@
   displacementDistances.pop_back();
 }
 
+void FeatureTrajectory::movingAverage(const unsigned int& nFramesSmoothing) {
+  positions->movingAverage(nFramesSmoothing);
+  velocities->movingAverage(nFramesSmoothing);
+}
+
 void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) const {
   trajectoryDB.write(*positions, positionsTableName);
   trajectoryDB.write(*velocities, velocitiesTableName);
@@ -164,7 +169,7 @@
 	if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) {
 	  UndirectedGraph::edge_descriptor e;
 	  bool unused;
-	  tie(e, unused) = add_edge(newVertex, *vi, graph);
+	  boost::tuples::tie(e, unused) = add_edge(newVertex, *vi, graph);
 	  // no need to add measures to graph[e] (edge properties)
 	}
       }
@@ -185,7 +190,7 @@
   vector<vector<vertex_descriptor> > tmpobjects(num), objects; // vector of components (component = vector of vertex descriptors)
 
   graph_traits<UndirectedGraph>::vertex_iterator vi, vend;
-  for(tie(vi,vend) = vertices(graph); vi != vend; ++vi) {
+  for(boost::tuples::tie(vi,vend) = vertices(graph); vi != vend; ++vi) {
     unsigned int id = components[*vi];
     lastInstants[id] = max(lastInstants[id], graph[*vi].feature->getLastInstant());
     tmpobjects[id].push_back(*vi);
@@ -201,8 +206,8 @@
   }
 }
 
-vector<vector<unsigned int> > FeatureGraph::getFeatureGroups(void) {
-  vector<vector<unsigned int> > featureGroups;
+void FeatureGraph::getFeatureGroups(vector<vector<FeatureTrajectoryPtr> >& featureGroups) {
+  featureGroups.clear();
 
   for (unsigned int i=0; i<objectHypotheses.size(); ++i) {
     // check that there is on average at least minNFeaturesPerGroup features at each frame in the group
@@ -218,9 +223,9 @@
 #if DEBUG
       cout << "save group " << i << " of " << objectHypotheses[i].size() << " features " << endl;
 #endif
-      featureGroups.push_back(vector<unsigned int>());
+      featureGroups.push_back(vector<FeatureTrajectoryPtr>());
       for (unsigned int j=0; j<objectHypotheses[i].size(); ++j) {
-	featureGroups.back().push_back(graph[objectHypotheses[i][j]].feature->getId());
+	featureGroups.back().push_back(graph[objectHypotheses[i][j]].feature);
 #if DEBUG
 	cout << featureGroups.size() << " " << objectHypotheses[i][j] << endl;
 #endif
@@ -229,8 +234,6 @@
       }
     }
   }
-
-  return featureGroups;
 }
 
 string FeatureGraph::informationString(void) const {
@@ -246,6 +249,6 @@
 void FeatureGraph::computeVertexIndex(void) {
   graph_traits<FeatureGraph::UndirectedGraph>::vertex_iterator vi, vend;
   graph_traits<FeatureGraph::UndirectedGraph>::vertices_size_type cnt = 0;
-  for(tie(vi,vend) = vertices(graph); vi != vend; ++vi)
+  for(boost::tuples::tie(vi,vend) = vertices(graph); vi != vend; ++vi)
     graph[*vi].index = cnt++;
 }