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