fix executable modules, more documentation
[imago.git] / imago_pack / hough.py
1 """Hough transform module."""
2
3 from math import sin, cos, pi
4
5 from PIL import Image
6
7 import pcf
8
9 class Hough:
10     def __init__(self, size):
11         self.size = size
12         self.dt = pi / size[1]
13         self.initial_angle = (pi / 4) + (self.dt / 2)
14
15     def transform(self, image):
16         image_s = pcf.hough(image.size, image.tostring(), self.initial_angle, self.dt)
17         image = Image.fromstring('L', image.size, image_s)
18         return image
19
20     def lines_from_list(self, p_list):
21         lines = []
22         for p in p_list:
23             lines.append(self.angle_distance(p))
24         return lines
25
26     def all_lines_h(self, image):
27         im_l = image.load()
28         lines1 = []
29         for x in xrange(image.size[0] / 2):
30             for y in xrange(image.size[1]):
31                 if im_l[x, y]:
32                     lines1.append(self.angle_distance((x, y)))
33         lines2 = []
34         for x in xrange(image.size[0] / 2, image.size[0]):
35             for y in xrange(image.size[1]):
36                 if im_l[x, y]:
37                     lines2.append(self.angle_distance((x, y)))
38         return [lines1, lines2]
39
40     def all_lines(self, image):
41         im_l = image.load()
42         lines = []
43         for x in xrange(image.size[0]):
44             for y in xrange(image.size[1]):
45                 if im_l[x, y]:
46                     lines.append(self.angle_distance((x, y)))
47         return lines
48     
49     def angle_distance(self, point):
50         return (self.dt * point[1] + self.initial_angle, point[0] - self.size[0] / 2)
51