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]
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:
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
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]:
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
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