Mercurial > hg > nsaunier > traffic-intelligence
comparison python/moving.py @ 231:249d65ff6c35
merged modifications for windows
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Mon, 02 Jul 2012 23:49:39 -0400 |
| parents | c31722fcc9de |
| children | e0988a8ace0c |
comparison
equal
deleted
inserted
replaced
| 230:bc4ea09b1743 | 231:249d65ff6c35 |
|---|---|
| 101 self.boundingPolygon = boundingPolygon | 101 self.boundingPolygon = boundingPolygon |
| 102 | 102 |
| 103 def empty(self): | 103 def empty(self): |
| 104 return self.timeInterval.empty() or not self.boudingPolygon | 104 return self.timeInterval.empty() or not self.boudingPolygon |
| 105 | 105 |
| 106 def getId(self): | |
| 107 return self.num | |
| 108 | |
| 106 def getFirstInstant(self): | 109 def getFirstInstant(self): |
| 107 return self.timeInterval.first | 110 return self.timeInterval.first |
| 108 | 111 |
| 109 def getLastInstant(self): | 112 def getLastInstant(self): |
| 110 return self.timeInterval.last | 113 return self.timeInterval.last |
| 136 return Point(self.x-other.x, self.y-other.y) | 139 return Point(self.x-other.x, self.y-other.y) |
| 137 | 140 |
| 138 def multiply(self, alpha): | 141 def multiply(self, alpha): |
| 139 return Point(self.x*alpha, self.y*alpha) | 142 return Point(self.x*alpha, self.y*alpha) |
| 140 | 143 |
| 141 def draw(self, options = 'o'): | 144 def draw(self, options = 'o', **kwargs): |
| 142 from matplotlib.pylab import plot | 145 from matplotlib.pylab import plot |
| 143 plot([self.x], [self.y], options) | 146 plot([self.x], [self.y], options, **kwargs) |
| 144 | 147 |
| 145 def norm2Squared(self): | 148 def norm2Squared(self): |
| 146 '''2-norm distance (Euclidean distance)''' | 149 '''2-norm distance (Euclidean distance)''' |
| 147 return self.x*self.x+self.y*self.y | 150 return self.x*self.x+self.y*self.y |
| 148 | 151 |
| 153 def aslist(self): | 156 def aslist(self): |
| 154 return [self.x, self.y] | 157 return [self.x, self.y] |
| 155 | 158 |
| 156 def astuple(self): | 159 def astuple(self): |
| 157 return (self.x, self.y) | 160 return (self.x, self.y) |
| 161 | |
| 162 def asint(self): | |
| 163 return Point(int(self.x), int(self.y)) | |
| 158 | 164 |
| 159 def project(self, homography): | 165 def project(self, homography): |
| 160 from numpy.core.multiarray import array | 166 from numpy.core.multiarray import array |
| 161 projected = cvutils.projectArray(homography, array([[self.x], [self.y]])) | 167 projected = cvutils.projectArray(homography, array([[self.x], [self.y]])) |
| 162 return Point(projected[0], projected[1]) | 168 return Point(projected[0], projected[1]) |
| 217 return FlowVector(self.position+other.position, self.velocity+other.velocity) | 223 return FlowVector(self.position+other.position, self.velocity+other.velocity) |
| 218 | 224 |
| 219 def multiply(self, alpha): | 225 def multiply(self, alpha): |
| 220 return FlowVector(self.position.multiply(alpha), self.velocity.multiply(alpha)) | 226 return FlowVector(self.position.multiply(alpha), self.velocity.multiply(alpha)) |
| 221 | 227 |
| 222 def draw(self, options = ''): | 228 def draw(self, options = '', **kwargs): |
| 223 from matplotlib.pylab import plot | 229 from matplotlib.pylab import plot |
| 224 plot([self.position.x, self.position.x+self.velocity.x], [self.position.y, self.position.y+self.velocity.y], options) | 230 plot([self.position.x, self.position.x+self.velocity.x], [self.position.y, self.position.y+self.velocity.y], options, **kwargs) |
| 225 self.position.draw(options+'x') | 231 self.position.draw(options+'x', **kwargs) |
| 226 | 232 |
| 227 @staticmethod | 233 @staticmethod |
| 228 def similar(f1, f2, maxDistance2, maxDeltavelocity2): | 234 def similar(f1, f2, maxDistance2, maxDeltavelocity2): |
| 229 return (f1.position-f2.position).norm2Squared()<maxDistance2 and (f1.velocity-f2.velocity).norm2Squared()<maxDeltavelocity2 | 235 return (f1.position-f2.position).norm2Squared()<maxDistance2 and (f1.velocity-f2.velocity).norm2Squared()<maxDeltavelocity2 |
| 230 | 236 |
| 299 | 305 |
| 300 def addPosition(self, p): | 306 def addPosition(self, p): |
| 301 self.addPositionXY(p.x, p.y) | 307 self.addPositionXY(p.x, p.y) |
| 302 | 308 |
| 303 @staticmethod | 309 @staticmethod |
| 304 def _draw(positions, options = '', withOrigin = False, lastCoordinate = None): | 310 def _draw(positions, options = '', withOrigin = False, lastCoordinate = None, **kwargs): |
| 305 from matplotlib.pylab import plot | 311 from matplotlib.pylab import plot |
| 306 if lastCoordinate == None: | 312 if lastCoordinate == None: |
| 307 plot(positions[0], positions[1], options) | 313 plot(positions[0], positions[1], options, **kwargs) |
| 308 elif 0 <= lastCoordinate <= len(positions[0]): | 314 elif 0 <= lastCoordinate <= len(positions[0]): |
| 309 plot(positions[0][:lastCoordinate], positions[1][:lastCoordinate], options) | 315 plot(positions[0][:lastCoordinate], positions[1][:lastCoordinate], options, **kwargs) |
| 310 if withOrigin: | 316 if withOrigin: |
| 311 plot([positions[0][0]], [positions[1][0]], 'ro') | 317 plot([positions[0][0]], [positions[1][0]], 'ro', **kwargs) |
| 312 | 318 |
| 313 def project(self, homography): | 319 def project(self, homography): |
| 314 from numpy.core.multiarray import array | 320 from numpy.core.multiarray import array |
| 315 projected = cvutils.projectArray(homography, array(self.positions)) | 321 projected = cvutils.projectArray(homography, array(self.positions)) |
| 316 return Trajectory(projected) | 322 return Trajectory(projected) |
| 317 | 323 |
| 318 def draw(self, options = '', withOrigin = False): | 324 def draw(self, options = '', withOrigin = False, **kwargs): |
| 319 Trajectory._draw(self.positions, options, withOrigin) | 325 Trajectory._draw(self.positions, options, withOrigin,**kwargs) |
| 320 | 326 |
| 321 def drawAt(self, lastCoordinate, options = '', withOrigin = False): | 327 def drawAt(self, lastCoordinate, options = '', withOrigin = False, **kwargs): |
| 322 Trajectory._draw(self.positions, options, withOrigin, lastCoordinate) | 328 Trajectory._draw(self.positions, options, withOrigin, lastCoordinate, **kwargs) |
| 323 | 329 |
| 324 def drawOnWorldImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False): | 330 def drawOnWorldImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False, **kwargs): |
| 325 from matplotlib.pylab import plot | 331 from matplotlib.pylab import plot |
| 326 imgPositions = [[x*nPixelsPerUnitDistance for x in self.positions[0]], | 332 imgPositions = [[x*nPixelsPerUnitDistance for x in self.positions[0]], |
| 327 [-x*nPixelsPerUnitDistance+imageHeight for x in self.positions[1]]] | 333 [-x*nPixelsPerUnitDistance+imageHeight for x in self.positions[1]]] |
| 328 Trajectory._draw(imgPositions, options, withOrigin) | 334 Trajectory._draw(imgPositions, options, withOrigin, **kwargs) |
| 329 | 335 |
| 330 def getXCoordinates(self): | 336 def getXCoordinates(self): |
| 331 return self.positions[0] | 337 return self.positions[0] |
| 332 | 338 |
| 333 def getYCoordinates(self): | 339 def getYCoordinates(self): |
| 487 return self.positions.getXCoordinates() | 493 return self.positions.getXCoordinates() |
| 488 | 494 |
| 489 def getYCoordinates(self): | 495 def getYCoordinates(self): |
| 490 return self.positions.getYCoordinates() | 496 return self.positions.getYCoordinates() |
| 491 | 497 |
| 492 def draw(self, options = '', withOrigin = False): | 498 def draw(self, options = '', withOrigin = False, **kwargs): |
| 493 self.positions.draw(options, withOrigin) | 499 self.positions.draw(options, withOrigin, **kwargs) |
| 494 | 500 |
| 495 def drawWorldOnImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False): | 501 def drawOnWorldImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False, **kwargs): |
| 496 self.positions.drawWorldOnImage(nPixelsPerUnitDistance, imageHeight, options, withOrigin) | 502 self.positions.drawOnWorldImage(nPixelsPerUnitDistance, imageHeight, options, withOrigin, **kwargs) |
| 497 | 503 |
| 498 def getInstantsCrossingLane(self, p1, p2): | 504 def getInstantsCrossingLane(self, p1, p2): |
| 499 '''Returns the instant(s) | 505 '''Returns the instant(s) |
| 500 at which the object passes from one side of the segment to the other | 506 at which the object passes from one side of the segment to the other |
| 501 empty list if there is no crossing''' | 507 empty list if there is no crossing''' |
| 619 if len(indices) >= minNInstants: | 625 if len(indices) >= minNInstants: |
| 620 values = sorted(values[indices], reverse = self.mostSevereIsMax) # inverted if most severe is max -> take the first values | 626 values = sorted(values[indices], reverse = self.mostSevereIsMax) # inverted if most severe is max -> take the first values |
| 621 return mean(values[:minNInstants]) | 627 return mean(values[:minNInstants]) |
| 622 else: | 628 else: |
| 623 return None | 629 return None |
| 630 | |
| 631 # functions to aggregate discretized maps of indicators | |
| 632 # TODO add values in the cells between the positions (similar to discretizing vector graphics to bitmap) | |
| 624 | 633 |
| 625 def indicatorMap(indicatorValues, trajectory, squareSize): | 634 def indicatorMap(indicatorValues, trajectory, squareSize): |
| 626 '''Returns a dictionary | 635 '''Returns a dictionary |
| 627 with keys for the indices of the cells (squares) | 636 with keys for the indices of the cells (squares) |
| 628 in which the trajectory positions are located | 637 in which the trajectory positions are located |
