faster gridf, cancel scaling
authorTomas Musil <tomik.musil@gmail.com>
Fri, 18 Jul 2014 17:29:56 +0000 (19:29 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Fri, 18 Jul 2014 17:29:56 +0000 (19:29 +0200)
src/gridf3.py
src/intrsc.py

index 8a1a216..6f6f386 100644 (file)
@@ -127,7 +127,7 @@ class Line:
         elif key == 2:
             return self.c
 
         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
     for c1 in d1.points:
         if c1 in d2.points:
             continue
@@ -136,6 +136,15 @@ def gen_corners(d1, d2):
             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]
             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
         except IndexError:
             continue
             # there is not a corresponding intersection
@@ -152,6 +161,8 @@ def dst(p, l):
     return abs(a * x + b * y + c) / sqrt(a*a+b*b)
 
 def score(lines, points):
     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))
     score = 0
     for p in points:
         s = min(map(lambda l: dst(p, l), lines))
@@ -227,7 +238,7 @@ def find(lines, size, l1, l2, bounds, hough, show_all, do_something, logger):
             diag2.points = ransac.filter_near(data, diag2, 2)
 
 
             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))
             
             try:
                 new_sc, new_grid = min(map(lambda g: (score(sum(g, []), data), g), grids))
index 546d0f2..7455d0c 100644 (file)
@@ -75,16 +75,17 @@ def board(image, lines, show_all, do_something):
         image_p = Image.fromstring('RGB', size, buff, 'raw')
         do_something(image_p, "color distribution")
 
         image_p = Image.fromstring('RGB', size, buff, 'raw')
         do_something(image_p, "color distribution")
 
-    max_s0 = max(s[0] for s in board_raw)
-    min_s0 = min(s[0] for s in board_raw)
-    norm_s0 = lambda x: (x - min_s0) / (max_s0 - min_s0)
-    max_s1 = max(s[1] for s in board_raw)
-    min_s1 = min(s[1] for s in board_raw)
-    norm_s1 = lambda x: (x - min_s1) / (max_s1 - min_s1)
-    max_s1 = max(s[1] for s in board_raw)
-    min_s1 = min(s[1] for s in board_raw)
-    norm_s1 = lambda x: (x - min_s1) / (max_s1 - min_s1)
-    color_data = [(norm_s0(s[0]), norm_s1(s[1])) for s in board_raw]
+    #max_s0 = max(s[0] for s in board_raw)
+    #min_s0 = min(s[0] for s in board_raw)
+    #norm_s0 = lambda x: (x - min_s0) / (max_s0 - min_s0)
+    #max_s1 = max(s[1] for s in board_raw)
+    #min_s1 = min(s[1] for s in board_raw)
+    #norm_s1 = lambda x: (x - min_s1) / (max_s1 - min_s1)
+    #max_s1 = max(s[1] for s in board_raw)
+    #min_s1 = min(s[1] for s in board_raw)
+    #norm_s1 = lambda x: (x - min_s1) / (max_s1 - min_s1)
+    #color_data = [(norm_s0(s[0]), norm_s1(s[1])) for s in board_raw]
+    color_data = [(s[0], s[1]) for s in board_raw]
 
     clusters = k_means.cluster(3, 2,zip(color_data, range(len(color_data))),
                                [[0., 0.5], [0.5, 0.5], [1., 0.5]])
 
     clusters = k_means.cluster(3, 2,zip(color_data, range(len(color_data))),
                                [[0., 0.5], [0.5, 0.5], [1., 0.5]])
@@ -194,5 +195,4 @@ def stone_color_raw(image, (x, y)):
              sum(p[2] for p in points) / norm)
     hue, luma, saturation = colorsys.rgb_to_hls(*color)
     color = colorsys.hls_to_rgb(hue, 0.5, 1.)
              sum(p[2] for p in points) / norm)
     hue, luma, saturation = colorsys.rgb_to_hls(*color)
     color = colorsys.hls_to_rgb(hue, 0.5, 1.)
-    print color
     return luma, saturation, color, hue
     return luma, saturation, color, hue