manual mode works
[imago.git] / hough.py
index 5fca93f..0e9fe2d 100644 (file)
--- a/hough.py
+++ b/hough.py
@@ -1,10 +1,10 @@
-from PIL import Image
 from math import sin, cos, pi
 from math import sin, cos, pi
-from commons import clear
+
+from PIL import Image
 
 class Hough:
     def __init__(self, size):
 
 class Hough:
     def __init__(self, size):
-       self.size = size
+        self.size = size
         self.dt = pi / size[1]
         self.initial_angle = (pi / 4) + (self.dt / 2)
 
         self.dt = pi / size[1]
         self.initial_angle = (pi / 4) + (self.dt / 2)
 
@@ -18,8 +18,6 @@ class Hough:
         initial_angle = self.initial_angle
 
         for x in xrange(size[0]):
         initial_angle = self.initial_angle
 
         for x in xrange(size[0]):
-            clear()
-            print "hough transform: {0:>3}/{1}".format(x + 1, size[0])
             for y in xrange(size[1]):
                 if image_l[x, y]:
                     # for every angle:
             for y in xrange(size[1]):
                 if image_l[x, y]:
                     # for every angle:
@@ -30,8 +28,9 @@ class Hough:
                         distance = (((x - (size[0] / 2)) * sin((dt * a) + initial_angle)) + 
                                     ((y - (size[1] / 2)) * -cos((dt * a) + initial_angle)) +
                                     size[0] / 2)
                         distance = (((x - (size[0] / 2)) * sin((dt * a) + initial_angle)) + 
                                     ((y - (size[1] / 2)) * -cos((dt * a) + initial_angle)) +
                                     size[0] / 2)
-                        column = int(round(distance)) # column of the matrix closest to the distance
-                        if column >= 0 and column < size[0]:
+                        # column of the matrix closest to the distance
+                        column = int(round(distance)) 
+                        if 0 <= column < size[0]:
                             matrix[column][a] += 1
 
         new_image = Image.new('L', size)
                             matrix[column][a] += 1
 
         new_image = Image.new('L', size)
@@ -47,44 +46,35 @@ class Hough:
             
         return new_image
 
             
         return new_image
 
-    def all_lines(self, image):
-       im_l = image.load()
-       lines = []
-       for x in xrange(image.size[0]):
-            for y in xrange(image.size[1]):
-               if im_l[x, y]:
-                   lines.append(self.angle_distance((x, y)))
+    def lines_from_list(self, p_list):
+        lines = []
+        for p in p_list:
+            lines.append(self.angle_distance(p))
         return lines
         return lines
-    
-    def find_angle_distance(self, image):
-        image_l = image.load()
-
-        points = []
 
 
-        count = 0
-        point_x = 0
-        point_y = 0
+    def all_lines_h(self, image):
+        im_l = image.load()
+        lines1 = []
         for x in xrange(image.size[0] / 2):
         for x in xrange(image.size[0] / 2):
-            for y in xrange(image.size[1] / 2, image.size[1]):
-                if image_l[x, y]:
-                    count += 1
-                    point_x += x
-                    point_y += y
-        points.append((float(point_x) / count, float(point_y) / count))
-
-        count = 0
-        point_x = 0
-        point_y = 0
+            for y in xrange(image.size[1]):
+                if im_l[x, y]:
+                    lines1.append(self.angle_distance((x, y)))
+        lines2 = []
         for x in xrange(image.size[0] / 2, image.size[0]):
         for x in xrange(image.size[0] / 2, image.size[0]):
-            for y in xrange(image.size[1] / 2, image.size[1]):
-                if image_l[x, y]:
-                    count += 1
-                    point_x += x
-                    point_y += y
-        points.append((float(point_x) / count, float(point_y) / count))
-
-        return [self.angle_distance(p) for p in points]
+            for y in xrange(image.size[1]):
+                if im_l[x, y]:
+                    lines2.append(self.angle_distance((x, y)))
+        return [lines1, lines2]
 
 
+    def all_lines(self, image):
+        im_l = image.load()
+        lines = []
+        for x in xrange(image.size[0]):
+            for y in xrange(image.size[1]):
+                if im_l[x, y]:
+                    lines.append(self.angle_distance((x, y)))
+        return lines
+    
     def angle_distance(self, point):
     def angle_distance(self, point):
-       return (self.dt * point[1] + self.initial_angle, point[0] - self.size[0] / 2)
-       
+        return (self.dt * point[1] + self.initial_angle, point[0] - self.size[0] / 2)
+