Mercurial > hg > nsaunier > traffic-intelligence
comparison c/Motion.cpp @ 187:aa1061fb9695
using minmaxsimilarity
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 01 Dec 2011 18:13:10 -0500 |
| parents | 6c48283a78ca |
| children | 1435965d8181 |
comparison
equal
deleted
inserted
replaced
| 186:6c48283a78ca | 187:aa1061fb9695 |
|---|---|
| 63 } | 63 } |
| 64 return result; | 64 return result; |
| 65 } | 65 } |
| 66 | 66 |
| 67 bool FeatureTrajectory::minMaxSimilarity(const FeatureTrajectory& ft, const int& firstInstant, const int& lastInstant, float connectionDistance, float segmentationDistance) { | 67 bool FeatureTrajectory::minMaxSimilarity(const FeatureTrajectory& ft, const int& firstInstant, const int& lastInstant, float connectionDistance, float segmentationDistance) { |
| 68 Point2f diff = positions->getPointAtInstant(firstInstant)-ft.positions->getPointAtInstant(firstInstant); | 68 float minDistance = norm(positions->getPointAtInstant(firstInstant)-ft.positions->getPointAtInstant(firstInstant)); |
| 69 float minDistance = norm(diff); | |
| 70 float maxDistance = minDistance; | 69 float maxDistance = minDistance; |
| 71 bool connected = minDistance <= connectionDistance; | 70 bool connected = minDistance <= connectionDistance; |
| 72 int t=firstInstant+1; | 71 int t=firstInstant+1; |
| 73 while (t <= lastInstant && connected) { | 72 while (t <= lastInstant && connected) { |
| 74 diff = positions->getPointAtInstant(t)-ft.positions->getPointAtInstant(t); | 73 float distance = norm(positions->getPointAtInstant(t)-ft.positions->getPointAtInstant(t)); |
| 75 float distance = norm(diff); | |
| 76 if (distance < minDistance) | 74 if (distance < minDistance) |
| 77 minDistance = distance; | 75 minDistance = distance; |
| 78 else if (distance > maxDistance) | 76 else if (distance > maxDistance) |
| 79 maxDistance = distance; | 77 maxDistance = distance; |
| 80 connected = connected && (maxDistance-minDistance < segmentationDistance); | 78 connected = connected && (maxDistance-minDistance < segmentationDistance); |
| 144 UndirectedGraph::vertex_descriptor newVertex = add_vertex(graph); | 142 UndirectedGraph::vertex_descriptor newVertex = add_vertex(graph); |
| 145 graph[newVertex].feature = ft; | 143 graph[newVertex].feature = ft; |
| 146 for (boost::graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first; | 144 for (boost::graph_traits<UndirectedGraph>::vertex_iterator vi = vertices(graph).first; |
| 147 vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor | 145 vi!=vertices(graph).second; ++vi) { // vi pointer to vertex_descriptor |
| 148 FeatureTrajectoryPtr ft2 = graph[*vi].feature; | 146 FeatureTrajectoryPtr ft2 = graph[*vi].feature; |
| 149 unsigned int lastInstant = min(ft->getLastInstant(), ft2->getLastInstant()); | 147 int lastInstant = static_cast<int>(min(ft->getLastInstant(), ft2->getLastInstant())); |
| 150 unsigned int firstInstant = max(ft->getLastInstant(), ft2->getLastInstant()); | 148 int firstInstant = static_cast<int>(max(ft->getFirstInstant(), ft2->getFirstInstant())); |
| 151 if (lastInstant-firstInstant > minFeatureTime) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime | 149 if (lastInstant-firstInstant > static_cast<int>(minFeatureTime)) { // equivalent to lastInstant-firstInstant+1 >= minFeatureTime |
| 152 if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) { | 150 if (ft->minMaxSimilarity(*ft2, firstInstant, lastInstant, connectionDistance, segmentationDistance)) { |
| 153 UndirectedGraph::edge_descriptor e; | 151 UndirectedGraph::edge_descriptor e; |
| 154 bool unused; | 152 bool unused; |
| 155 tie(e, unused) = add_edge(newVertex, *vi, graph); | 153 tie(e, unused) = add_edge(newVertex, *vi, graph); |
| 156 // no need to add measures to graph[e] | 154 // no need to add measures to graph[e] |
