1 """Hough transform module."""
12 This class stores the transformed image and metainformation.
14 def __init__(self, size, dt, init_angle, image):
15 self.size = size # this is a tuple (width, height)
16 self.dt = dt # this is the angle step in hough transform
17 self.initial_angle = init_angle
21 def Transform(cls, image):
22 """Create Hough transform of the *image* with default parameters."""
23 # TODO rename to transform?
26 initial_angle = (pi / 4) + (dt / 2)
27 image_s = pcf.hough(size, image.tostring(), initial_angle, dt)
28 image_t = Image.fromstring('L', size, image_s)
29 return cls(size, dt, initial_angle, image_t)
31 def apply_filter(self, filter_f):
32 return Hough(self.size, self.dt, self.initial_angle,
35 def lines_from_list(self, p_list):
36 """Take a list of transformed points and return a list of corresponding
37 lines as (angle, distance) tuples."""
40 lines.append(self.angle_distance(p))
43 def all_lines_h(self):
45 im_l = self.image.load()
47 for x in xrange(self.size[0] / 2):
48 for y in xrange(self.size[1]):
50 lines1.append(self.angle_distance((x, y)))
52 for x in xrange(self.size[0] / 2, self.size[0]):
53 for y in xrange(self.size[1]):
55 lines2.append(self.angle_distance((x, y)))
56 return [lines1, lines2]
59 # TODO what is this? how does it differ from the upper one?
60 im_l = self.image.load()
62 for x in xrange(self.size[0]):
63 for y in xrange(self.size[1]):
65 lines.append(self.angle_distance((x, y)))
68 def angle_distance(self, point):
69 """Take a point from the transformed image and return the corresponding
70 line in the original as (angle, distance) tuple."""
71 return (self.dt * point[1] + self.initial_angle,
72 point[0] - self.size[0] / 2)