- im_l = im_l.filter(MyGaussianBlur(radius=30))
- #GaussianBlur is undocumented class, may not work in future versions of PIL
- im_l = im_l.tostring()
-
- #error_surface(im_l, a, b, c, d, hough, size, v1)
-
- grid = get_grid(a, b, c, d, hough, size)
- dist = distance(im_l, grid, size)
-
- #let's try the bruteforce aproach:
- s = 0.001
- k = 50
- X, Y = [], []
- for i in range(-k, k):
- X.append(range(-k, k))
- Y.append(2*k*[i])
-
- tasks = [(X[x], Y[x], im_l, a, b, c, d, s, v1, v2, k, hough, size) for x in xrange(0, 2 * k)]
-
- pool = multiprocessing.Pool(None)
-
- #start = time.time()
- opt_ab = pool.map(job_br1, tasks, 1)
- opt_cd = pool.map(job_br2, tasks, 1)
- an, bn, cn, dn = 4 * [0]
- d1 = 0
- for lst in opt_ab:
- for tpl in lst:
- if tpl[0] > d1:
- d1 = tpl[0]
- an, bn = tpl[1], tpl[2]
- d1 = 0
- for lst in opt_cd:
- for tpl in lst:
- if tpl[0] > d1:
- d1 = tpl[0]
- cn, dn = tpl[1], tpl[2]
- #print time.time() - start
- grid = get_grid(an, bn, cn, dn, hough, size)
- grid_lines = [[l2ad(l, size) for l in grid[0]], [l2ad(l, size) for l in grid[1]]]
- return grid, grid_lines
-
- #old optimization experiments:
- print dist
-
- path = [(0,0)] #MNTR
- s = 0.01
- for _ in range(10):
- ts1 = [(s, 0), (0, s), (-s, 0), (0, -s)]
- grids = [(get_grid(a + t[0] * v1, b + t[1] * v1,
- c, d, hough, size), t) for t in ts1]
- distances = [distance(im_l, grid, size) for (grid, t) in grids]
- gradient = [(di - dist) for di in distances]
- gradient = [gradient[0] - gradient[2], gradient[1] - gradient[3]]
- norm = (gradient[0] ** 2 + gradient[1] ** 2) ** 0.5
- gradient = [g / (100 * norm) for g in gradient]
- path.append(gradient)
- a, b = a + gradient[0] * v1, b + gradient[1] * v1
- dist = distance(im_l, grid, size)
- print dist