from math import sqrt
from intrsc import intersections_from_angl_dist
-import linef as linef
-import ransac as ransac
-import manual as manual
+import linef
+import params
+import ransac
+import manual_lines as manual
from geometry import l2ad
# TODO comments, refactoring, move methods to appropriate modules
elif key == 2:
return self.c
-def gen_corners(d1, d2):
+def gen_corners(d1, d2, min_size):
for c1 in d1.points:
if c1 in d2.points:
continue
c2 = [p for p in d2.points if p in c1.l1.points][0]
c3 = [p for p in d1.points if p in c2.l2.points][0]
c4 = [p for p in d2.points if p in c3.l1.points][0]
+ x_min = min([c1[0], c2[0], c3[0], c4[0]])
+ x_max = max([c1[0], c2[0], c3[0], c4[0]])
+ if x_max - x_min < min_size:
+ continue
+ y_min = min([c1[1], c2[1], c3[1], c4[1]])
+ y_max = max([c1[1], c2[1], c3[1], c4[1]])
+ if y_max - y_min < min_size:
+ continue
+
except IndexError:
continue
# there is not a corresponding intersection
return abs(a * x + b * y + c) / sqrt(a*a+b*b)
def score(lines, points):
+ # TODO find whether the point actualy lies on the line or just in the same
+ # direction
score = 0
for p in points:
s = min(map(lambda l: dst(p, l), lines))
def find(lines, size, l1, l2, bounds, hough, show_all, do_something, logger):
- logger("finding the grid")
new_lines1 = map(lambda l: Line.from_ad(l, size), lines[0])
new_lines2 = map(lambda l: Line.from_ad(l, size), lines[1])
for l1 in new_lines1:
return sqrt(x * x + y * y)
for n_tries in xrange(3):
+ logger("finding the diagonals")
model = Diagonal_model(points)
- diag_lines = ransac.ransac_multi(6, points, 2, 800, model=model)
+ diag_lines = ransac.ransac_multi(6, points, 2,
+ params.ransac_diagonal_iter, model=model)
diag_lines = [l[0] for l in diag_lines]
centers = []
cen_lin = []
if show_all:
import matplotlib.pyplot as pyplot
- import Image
+ from PIL import Image
def plot_line_g((a, b, c), max_x):
find_y = lambda x: - (c + a * x) / b
image_p = Image.fromstring('RGB', size_f, buff, 'raw')
do_something(image_p, "finding diagonals")
+ logger("finding the grid")
data = sum(points, [])
# TODO what if lines are missing?
sc = float("inf")
diag2.points = ransac.filter_near(data, diag2, 2)
- grids = list(gen_corners(diag1, diag2))
+ grids = list(gen_corners(diag1, diag2, min(size) / 3))
try:
new_sc, new_grid = min(map(lambda g: (score(sum(g, []), data), g), grids))