From: Tomas Musil Date: Sat, 20 Oct 2012 18:55:19 +0000 (+0200) Subject: error surface plots X-Git-Url: http://git.tomasm.cz/imago.git/commitdiff_plain/f2f525ee1484b0d7f361f9b3f0dab302a94a1d47 error surface plots --- diff --git a/gridf.py b/gridf.py index 83a9771..bc84ea8 100644 --- a/gridf.py +++ b/gridf.py @@ -40,6 +40,38 @@ def projection(point, line, vector): l2 = g_line(point.t(), (point + n).t()) return V(*intersection(l2, g_line(*line))) +def error_surface(lines, a, b, c, d, hough, size, v1): + import matplotlib.pyplot as plt + from matplotlib import cm + import time + import pickle + X = [] + Y = [] + Z = [] + s = 0.001 + k = 5 + for i in range(-k, k): + X.append(range(-k, k)) + Y.append(2*k*[i]) + + start = time.clock() + for x in range(0, 2*k): + try: + Z.append([distance(lines, get_grid(a + X[x][y] * s * v1, b + Y[x][y] * s * v1, + c, d, hough, size), + size) for y in range(0, 2* k)]) + except Exception: + Z.append(Z[-1]) + o = ((time.clock() - start) * (2 * k - (x + 1))) / (60 * (x + 1)) + print x + 1, "{0} h {1:2.2f} m".format(int(o) / 60, o % 60) + s_file = open('surface' + str(k), 'w') + pickle.dump((X, Y, Z), s_file) + s_file.close() + plt.imshow(Z, cmap=cm.gnuplot2, interpolation='bicubic', + origin='upper', extent=(-k, k, -k, k), aspect='equal') + plt.colorbar() + + plt.show() def find(lines, size, l1, l2, bounds, hough, do_something): a, b, c, d = [V(*a) for a in bounds] @@ -54,6 +86,8 @@ def find(lines, size, l1, l2, bounds, hough, do_something): grid = get_grid(a, b, c, d, hough, size) dist = distance(lines, grid, size) print dist + + #error_surface(lines, a, b, c, d, hough, size, v1) s = 0.02 while True: @@ -100,6 +134,7 @@ def get_grid(a, b, c, d, hough, size): l1 = hough.lines_from_list([a.t(), b.t()]) l2 = hough.lines_from_list([c.t(), d.t()]) c = intersections_from_angl_dist([l1, l2], size, get_all=True) + #TODO do something when a corner is outside the image corners = (c[0] + c[1]) if len(corners) < 4: print l1, l2, c @@ -113,7 +148,7 @@ def distance(lines, grid, size): for line in sum(lines, []): dr_l.line(line_from_angl_dist(line, size), width=1, fill=255) im_l = im_l.filter(MyGaussianBlur(radius=3)) - # GaussianBlur is undocumented class, may not work in future versions of PIL + #GaussianBlur is undocumented class, may not work in future versions of PIL im_g = Image.new('L', size) dr_g = ImageDraw.Draw(im_g) for line in grid[0] + grid[1]: @@ -125,8 +160,8 @@ def distance(lines, grid, size): def combine(bg, fg): bg_l = bg.load() fg_l = fg.load() - res = Image.new('L', fg.size) - res_l = res.load() + #res = Image.new('L', fg.size) + #res_l = res.load() score = 0 area = 0 @@ -134,8 +169,9 @@ def combine(bg, fg): for x in xrange(fg.size[0]): for y in xrange(fg.size[1]): if fg_l[x, y]: - res_l[x, y] = bg_l[x, y] * fg_l[x, y] + #res_l[x, y] = bg_l[x, y] * fg_l[x, y] score += bg_l[x, y] area += 1 - return res, float(score)/area + #return res, float(score)/area + return None, float(score)/area