Mercurial > hg > nsaunier > traffic-intelligence
comparison python/cvutils.py @ 98:b85912ab4064
refactored projection functions
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 12 Jul 2011 16:43:33 -0400 |
| parents | 40e8e3bb3702 |
| children | e7dc5a780f09 |
comparison
equal
deleted
inserted
replaced
| 97:b3a1c26e2f22 | 98:b85912ab4064 |
|---|---|
| 22 del draw | 22 del draw |
| 23 | 23 |
| 24 #out = utils.openCheck(resultFilename) | 24 #out = utils.openCheck(resultFilename) |
| 25 img.save(resultFilename) | 25 img.save(resultFilename) |
| 26 | 26 |
| 27 def projectArray(homography, points): | |
| 28 '''Returns the coordinates of the projected points (format 2xN points) | |
| 29 through homography''' | |
| 30 from numpy.core._dotblas import dot | |
| 31 from numpy.core.multiarray import array | |
| 32 from numpy.lib.function_base import append | |
| 33 | |
| 34 if points.shape[0] != 2: | |
| 35 raise Exception('points of dimension {0} {1}'.format(points.shape[0], points.shape[1])) | |
| 36 | |
| 37 if (homography!=None) and homography.size>0: | |
| 38 augmentedPoints = append(points,[[1]*points.shape[1]], 0) | |
| 39 prod = dot(homography, augmentedPoints) | |
| 40 return prod[0:2]/prod[2] | |
| 41 else: | |
| 42 return p | |
| 43 | |
| 27 def project(homography, p): | 44 def project(homography, p): |
| 28 '''Returns the coordinates of the projection of the point p | 45 '''Returns the coordinates of the projection of the point p |
| 29 through homography''' | 46 through homography''' |
| 30 from numpy.core._dotblas import dot | |
| 31 from numpy.core.multiarray import array | 47 from numpy.core.multiarray import array |
| 32 from numpy.lib.function_base import insert | 48 return projectArray(homography, array([[p[0]],p[1]])) |
| 33 if (homography!=None) and (len(homography)>0): | |
| 34 pAugmented = insert(array(p), [2],[1], axis=0) | |
| 35 tmp = dot(homography, pAugmented) | |
| 36 return [tmp[0]/tmp[2], tmp[1]/tmp[2]] | |
| 37 else: | |
| 38 return p | |
| 39 | 49 |
| 40 def projectTrajectory(homography, trajectory): | 50 def projectTrajectory(homography, trajectory): |
| 41 '''Projects a series of points in the format | 51 '''Projects a series of points in the format |
| 42 [[x1, x2, ...], | 52 [[x1, x2, ...], |
| 43 [y1, y2, ...]] | 53 [y1, y2, ...]]''' |
| 44 | 54 from numpy.core.multiarray import array |
| 45 Warning: not optimized, calls project()''' | 55 return projectArray(homography, array(trajectory)) |
| 46 projected = [[],[]] | |
| 47 for x, y in zip(trajectory[0], trajectory[1]): | |
| 48 p = [x,y] | |
| 49 pp = project(homography, p) | |
| 50 projected[0].append(pp[0]) | |
| 51 projected[1].append(pp[1]) | |
| 52 return projected | |
| 53 | 56 |
| 54 def invertHomography(homography): | 57 def invertHomography(homography): |
| 55 'Returns an inverted homography' | 58 'Returns an inverted homography' |
| 56 from numpy.linalg.linalg import inv | 59 from numpy.linalg.linalg import inv |
| 57 invH = inv(homography) | 60 invH = inv(homography) |
