"""Imago grid-fitting module"""
import multiprocessing
-import itertools
import Image, ImageDraw, ImageFilter
get_grid([v1, v2], [h1, h2], size),
size), x, y)
+def job_4(args):
+ im_l, v1, v2, h1, h2, x, y, w, z, dv, dh, size = args
+ v1 = (v1[0] + x * dv, v1[1] + x)
+ v2 = (v2[0] + y * dv, v2[1] + y)
+ h1 = (h1[0] + w * dh, h1[1] + w)
+ h2 = (h2[0] + z * dh, h2[1] + z)
+ return (distance(im_l,
+ get_grid([v1, v2], [h1, h2], size),
+ size), x, y, w, z)
+
def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
l1 = line_from_angl_dist(l1, size)
l2 = line_from_angl_dist(l2, size)
#GaussianBlur is undocumented class, may not work in future versions of PIL
im_l_s = im_l.tostring()
- #let's try the bruteforce aproach:
- k = 30
-
+ #let's try the ULTRA bruteforce aproach:
pool = multiprocessing.Pool(None)
- tasks = [(im_l_s, v1, v2, h1, h2, x, y, delta_v, delta_h, size) for (x, y) in
- itertools.product(xrange(-k, k), xrange(-k, k))]
+ #import time
+ #start = time.time()
- opt_v = pool.map(job_br1, tasks, 8)
- opt_h = pool.map(job_br2, tasks, 8)
- _, x_v, y_v = max(opt_v)
- _, x_h, y_h = max(opt_h)
+ k = 30
+ tasks = [(im_l_s, v1, v2, h1, h2, x, y, w, z, delta_v, delta_h, size)
+ for x in xrange(-k, k, 2)
+ for y in xrange(-k, k, 2)
+ for z in xrange(-k, k, 2)
+ for w in xrange(-k, k, 2)]
+
+ opt = pool.map(job_4, tasks)
+ _, x_v, y_v, x_h, y_h = max(opt)
+
+ v1 = (v1[0] + x_v * delta_v, v1[1] + x_v)
+ v2 = (v2[0] + y_v * delta_v, v2[1] + y_v)
+ h1 = (h1[0] + x_h * delta_h, h1[1] + x_h)
+ h2 = (h2[0] + y_h * delta_h, h2[1] + y_h)
+
+ k = 5
+ tasks = [(im_l_s, v1, v2, h1, h2, x, y, w, z, delta_v, delta_h, size)
+ for x in xrange(-k, k)
+ for y in xrange(-k, k)
+ for z in xrange(-k, k)
+ for w in xrange(-k, k)]
+
+ opt = pool.map(job_4, tasks)
+ _, x_v, y_v, x_h, y_h = max(opt)
v1 = (v1[0] + x_v * delta_v, v1[1] + x_v)
v2 = (v2[0] + y_v * delta_v, v2[1] + y_v)
pool.terminate()
pool.join()
+ #print time.time() - start
+
### Show error surface
#
# from gridf_analyzer import error_surface