Mercurial Hosting > traffic-intelligence
comparison python/cvutils.py @ 472:a50c026fdf14
functions to compute inverse mapping
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 12 Mar 2014 17:36:49 -0400 |
parents | 5304299e53a5 |
children | 178c69ba2970 |
comparison
equal
deleted
inserted
replaced
471:a8f95bbd79bc | 472:a50c026fdf14 |
---|---|
263 projected = camera.image_to_world(tuple(srcPoint)) | 263 projected = camera.image_to_world(tuple(srcPoint)) |
264 dstPoints.append([projected[0], projected[1]]) | 264 dstPoints.append([projected[0], projected[1]]) |
265 H, mask = cv2.findHomography(array(srcPoints), array(dstPoints), method, ransacReprojThreshold) | 265 H, mask = cv2.findHomography(array(srcPoints), array(dstPoints), method, ransacReprojThreshold) |
266 return H | 266 return H |
267 | 267 |
268 def correctedCoordinates(x,y, map1, map2): | 268 def correctedCoordinates(x,y, map1, map2, maxDistance = 1.): |
269 '''Returns the coordinates of a point in undistorted image | 269 '''Returns the coordinates of a point in undistorted image |
270 map1 and map2 are the mapping functions from undistorted image | 270 map1 and map2 are the mapping functions from undistorted image |
271 to distorted (original image) | 271 to distorted (original image) |
272 map1(x,y) = originalx, originaly''' | 272 map1(x,y) = originalx, originaly''' |
273 from numpy import abs, logical_and, unravel_index, dot, sum | 273 from numpy import abs, logical_and, unravel_index, dot, sum |
274 from matplotlib.mlab import find | 274 from matplotlib.mlab import find |
275 distx = abs(map1-x) | 275 distx = abs(map1-x) |
276 disty = abs(map2-y) | 276 disty = abs(map2-y) |
277 indices = logical_and(distx<1, disty<1) | 277 indices = logical_and(distx<maxDistance, disty<maxDistance) |
278 closeCoordinates = unravel_index(find(indices), distx.shape) # returns i,j, ie y,x | 278 closeCoordinates = unravel_index(find(indices), distx.shape) # returns i,j, ie y,x |
279 xWeights = 1-distx[indices] | 279 xWeights = 1-distx[indices] |
280 yWeights = 1-disty[indices] | 280 yWeights = 1-disty[indices] |
281 return dot(xWeights, closeCoordinates[1])/sum(xWeights), dot(yWeights, closeCoordinates[0])/sum(yWeights) | 281 return dot(xWeights, closeCoordinates[1])/sum(xWeights), dot(yWeights, closeCoordinates[0])/sum(yWeights) |
282 | 282 |
283 | 283 def computeInverseMapping(originalImageSize, map1, map2): |
284 'Computes inverse mapping from maps provided by cv2.initUndistortRectifyMap' | |
285 from numpy import ones, isnan | |
286 invMap1 = -ones(originalImageSize) | |
287 invMap2 = -ones(originalImageSize) | |
288 for x in range(0,originalImageSize[1]): | |
289 for y in range(0,originalImageSize[0]): | |
290 res = cvutils.correctedCoordinates(x,y, map1, map2) | |
291 if not isnan(res).any(): | |
292 invMap1[y,x] = res[0] | |
293 invMap2[y,x] = res[1] | |
294 return invMap1, invMap2 | |
295 | |
284 def printCvMat(cvmat, out = stdout): | 296 def printCvMat(cvmat, out = stdout): |
285 '''Prints the cvmat to out''' | 297 '''Prints the cvmat to out''' |
286 print('Deprecated, use new interface') | 298 print('Deprecated, use new interface') |
287 for i in xrange(cvmat.rows): | 299 for i in xrange(cvmat.rows): |
288 for j in xrange(cvmat.cols): | 300 for j in xrange(cvmat.cols): |