cleaner code
authorTomas Musil <tomik.musil@gmail.com>
Wed, 28 Nov 2012 17:14:54 +0000 (18:14 +0100)
committerTomas Musil <tomik.musil@gmail.com>
Wed, 28 Nov 2012 18:55:48 +0000 (19:55 +0100)
geometry.py
gridf.py
imago.py
intrsc.py
manual.py

index 09b0199..b8aea09 100644 (file)
@@ -1,5 +1,7 @@
 """Imago geometry module"""
 
+from manual import line, intersection
+
 class V(object):
     def __init__(self, x, y):
         self.x = x
@@ -15,7 +17,7 @@ class V(object):
         return V(other * self.x, other * self.y)
 
     def __len__(self):
-        return 2;
+        return 2
 
     def __getitem__(self, key):
         if key == 0:
@@ -35,5 +37,5 @@ class V(object):
     def normal(self):
         return V(-self.y, self.x)
 
-def projection(point, line, vector):
-    return V(*intersection(g_line(point, point + vector.normal), g_line(*line)))
+def projection(p, l, v):
+    return V(*intersection(line(p, p + v.normal), line(*l)))
index 0955d7e..d39bdd5 100644 (file)
--- a/gridf.py
+++ b/gridf.py
@@ -1,9 +1,11 @@
+"""Imago grid-fitting module"""
+
 import multiprocessing
 
 import Image, ImageDraw, ImageFilter
 
-from geometry import V
-from manual import lines as g_grid, l2ad, intersection, line as g_line
+from geometry import V, projection
+from manual import lines as g_grid, l2ad
 from intrsc import intersections_from_angl_dist
 from linef import line_from_angl_dist
 import pcf
@@ -19,24 +21,21 @@ class MyGaussianBlur(ImageFilter.Filter):
     def filter(self, image):
         return image.gaussian_blur(self.radius)
 
-def projection(point, line, vector):
-    return V(*intersection(g_line(point, point + vector.normal), g_line(*line)))
-
 def job_br1(args):
     X, Y, im_l, a, b, c, d, s, v1, v2, k, hough, size = args
     return [(distance(im_l, 
-                     get_grid(a + X[y] * s * v1, 
-                              b + Y[y] * s * v1, 
-                              c, d, hough, size),
-                     size), a + X[y] * s * v1, b + Y[y] * s * v1) for y in range(2 *k)]
+             get_grid(a + X[y] * s * v1, 
+                      b + Y[y] * s * v1, 
+                      c, d, hough, size),
+             size), a + X[y] * s * v1, b + Y[y] * s * v1) for y in range(2 *k)]
 
 def job_br2(args):
     X, Y, im_l, a, b, c, d, s, v1, v2, k, hough, size = args
     return [(distance(im_l, 
-                     get_grid(a, b, c + X[y] * s * v2, 
-                              d + Y[y] * s * v2, 
-                              hough, size),
-                     size), c + X[y] * s * v2, d + Y[y] * s * v2) for y in range(2 *k)]
+             get_grid(a, b, c + X[y] * s * v2, 
+                      d + Y[y] * s * v2, 
+                      hough, size),
+             size), c + X[y] * s * v2, d + Y[y] * s * v2) for y in range(2 *k)]
 
 def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
     a, b, c, d = [V(*a) for a in bounds]
@@ -63,7 +62,6 @@ def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
     #error_surface(im_l, a, b, c, d, hough, size, v1 ,v2)
 
     grid = get_grid(a, b, c, d, hough, size)
-    dist = distance(im_l_s, grid, size)
     
     #let's try the bruteforce aproach:
     s = 0.001
@@ -75,13 +73,13 @@ def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
 
     pool = multiprocessing.Pool(None)
 
-    tasks = [(X[x], Y[x], im_l_s, a, b, c, d, s, v1, v2, k, hough, size) for x in xrange(0, 2 * k)]
+    tasks = [(X[x], Y[x], im_l_s, a, b, c, d, s, 
+              v1, v2, k, hough, size) for x in xrange(0, 2 * k)]
 
     import time
     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:
@@ -96,7 +94,8 @@ def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
                 c, d = tpl[1], tpl[2]
     print time.time() - start
     grid = get_grid(a, b, c, d, hough, size) 
-    grid_lines = [[l2ad(l, size) for l in grid[0]], [l2ad(l, size) for l in grid[1]]]
+    grid_lines = [[l2ad(l, size) for l in grid[0]], 
+                  [l2ad(l, size) for l in grid[1]]]
     
     ### 
 
@@ -107,12 +106,11 @@ def find(lines, size, l1, l2, bounds, hough, do_something, im_h):
         for y in xrange(im_t.size[1]):
             im_t_l[x, y] = (im_l_l[x, y], 0, 0)
 
-    im_t_d = ImageDraw.Draw(im_t)
-
-    for l in grid[0] + grid[1]:
-        im_t_d.line(l, width=1, fill=(0, 255, 0))
+    #im_t_d = ImageDraw.Draw(im_t)
+    #for l in grid[0] + grid[1]:
+    #    im_t_d.line(l, width=1, fill=(0, 255, 0))
 
-    do_something(im_t, "lines and grid")
+    #do_something(im_t, "lines and grid")
 
 
     ###
@@ -148,5 +146,5 @@ def distance(im_l, grid, size):
     #im_g = im_g.filter(MyGaussianBlur(radius=3))
     #GaussianBlur is undocumented class, may not work in future versions of PIL
     #im_d, distance = combine(im_l, im_g)
-    distance = pcf.combine(im_l, im_g.tostring())
-    return distance
+    distance_d = pcf.combine(im_l, im_g.tostring())
+    return distance_d
index fcba0a4..66c758f 100755 (executable)
--- a/imago.py
+++ b/imago.py
@@ -4,7 +4,6 @@
 
 import sys
 import os
-import math
 import argparse
 
 try:
@@ -26,10 +25,12 @@ def main():
     parser.add_argument('files', metavar='file', nargs='+',
                         help="image to analyse")
     parser.add_argument('-w', type=int, default=640,
-                        help="scale image to the specified width before analysis")
-    parser.add_argument('-m', '--manual', dest='manual_mode', action='store_true',
+                    help="scale image to the specified width before analysis")
+    parser.add_argument('-m', '--manual', dest='manual_mode',
+                        action='store_true',
                         help="manual grid selection")
-    parser.add_argument('-d', '--debug', dest='show_all', action='store_true',
+    parser.add_argument('-d', '--debug', dest='show_all',
+                        action='store_true',
                         help="show every step of the computation")
     parser.add_argument('-s', '--save', dest='saving', action='store_true',
                         help="save images instead of displaying them")
@@ -53,7 +54,7 @@ def main():
                               image.size[1])), Image.ANTIALIAS)
     do_something = im_debug.show
     if args.saving:
-        do_something = imsave("saved/" + args.files[0][:-4] + "_" +
+        do_something = Imsave("saved/" + args.files[0][:-4] + "_" +
                                str(image.size[0]) + "/").save
 
     if args.manual_mode:
@@ -94,7 +95,7 @@ def main():
 
     return 0
 
-class imsave():
+class Imsave():
     def __init__(self, saving_dir):
         self.saving_dir = saving_dir
         self.saving_num = 0
index cead665..00165b1 100644 (file)
--- a/intrsc.py
+++ b/intrsc.py
@@ -1,7 +1,7 @@
-from math import sin, cos, tan
+from math import cos, tan
 from operator import itemgetter
 
-import Image, ImageDraw
+import ImageDraw
 
 def board(image, lines, show_all, do_something):
     intersections = intersections_from_angl_dist(lines, image.size)
@@ -14,12 +14,12 @@ def board(image, lines, show_all, do_something):
     if show_all:
         do_something(image_g, "intersections")
 
-    board = []
+    board_r = []
     
     for line in intersections:
-        board.append([stone_color(image, intersection) for intersection in
+        board_r.append([stone_color(image, intersection) for intersection in
                       line])
-    return board
+    return board_r
 
 def intersections_from_angl_dist(lines, size, get_all=False):
     intersections = []
@@ -27,7 +27,8 @@ def intersections_from_angl_dist(lines, size, get_all=False):
         line = []
         for (angl2, dist2) in sorted(lines[0], key=itemgetter(1)):
             if abs(angl1 - angl2) > 0.4:
-                x =  - ((dist2 / cos(angl2)) - (dist1 / cos(angl1))) / (tan(angl1) - tan(angl2))
+                x =  (- ((dist2 / cos(angl2)) - (dist1 / cos(angl1))) 
+                        / (tan(angl1) - tan(angl2)))
                 y = (tan(angl1) * x) - (dist1 / cos(angl1))
                 if get_all or (-size[0] / 2 < x < size[0] / 2 and 
                     -size[1] / 2 < y < size[1] / 2):
index e60a848..a4e94f7 100644 (file)
--- a/manual.py
+++ b/manual.py
@@ -1,7 +1,7 @@
 """Manual grid selection module"""
 
 import pygame
-import Image, ImageDraw
+import ImageDraw
 from math import atan, sin, cos, pi, sqrt, acos, copysign
 
 class UserQuitError(Exception):
@@ -14,8 +14,8 @@ class Screen:
         pygame.display.set_caption("Imago manual mode")
         self._screen = pygame.display.get_surface()
 
-    def display_picture(self, im):
-        pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
+    def display_picture(self, img):
+        pg_img = pygame.image.frombuffer(img.tostring(), img.size, img.mode)
         self._screen.blit(pg_img, (0,0))
         pygame.display.flip()
 
@@ -31,7 +31,7 @@ def find_lines(im_orig):
     hoshi = lambda c: draw.ellipse((c[0] - 1, c[1] - 1, c[0] + 1, c[1] + 1),
                  fill=(255, 64, 64))
     corners = []
-    color=(64, 64, 255)
+    color = (64, 64, 255)
     line_width = 1
     lines_r = []
 
@@ -94,8 +94,8 @@ def _lines(corners, n):
         c = intersection(line(x[0], corners[2]), line(corners[1], corners[3]))
         d = intersection(line(corners[0], corners[3]), line(corners[1], corners[2]))
         if d:
-            l = (intersection(line(corners[0], corners[1]), line(c,d)),
-                 intersection(line(corners[2], corners[3]), line(c,d)))
+            l = (intersection(line(corners[0], corners[1]), line(c, d)),
+                 intersection(line(corners[2], corners[3]), line(c, d)))
         else:
             lx = line(c, (c[0] + corners[0][0] - corners[3][0], 
                       c[1] + corners[0][1] - corners[3][1]))