X-Git-Url: http://git.tomasm.cz/imago.git/blobdiff_plain/90126edf1467ea467f28fb2bd12b10cc42c6d63f..763884f1a5fd3c98e53112f2d136b7e5ecea3343:/imago_pack/hough.py diff --git a/imago_pack/hough.py b/imago_pack/hough.py index 473d750..2f6e63f 100644 --- a/imago_pack/hough.py +++ b/imago_pack/hough.py @@ -1,21 +1,30 @@ """Hough transform module.""" -from math import sin, cos, pi +from math import pi from PIL import Image import pcf class Hough: - def __init__(self, size): + def __init__(self, size, dt, init_angle, image): self.size = size - self.dt = pi / size[1] - self.initial_angle = (pi / 4) + (self.dt / 2) - - def transform(self, image): - image_s = pcf.hough(image.size, image.tostring(), self.initial_angle, self.dt) - image = Image.fromstring('L', image.size, image_s) - return image + self.dt = dt + self.initial_angle = init_angle + self.image = image + + @classmethod + def Transform(cls, image): + size = image.size + dt = pi / size[1] + initial_angle = (pi / 4) + (dt / 2) + image_s = pcf.hough(size, image.tostring(), initial_angle, dt) + image_t = Image.fromstring('L', size, image_s) + return cls(size, dt, initial_angle, image_t) + + def apply_filter(self, filter_f): + return Hough(self.size, self.dt, self.initial_angle, + filter_f(self.image)) def lines_from_list(self, p_list): lines = [] @@ -23,29 +32,30 @@ class Hough: lines.append(self.angle_distance(p)) return lines - def all_lines_h(self, image): - im_l = image.load() + def all_lines_h(self): + im_l = self.image.load() lines1 = [] - for x in xrange(image.size[0] / 2): - for y in xrange(image.size[1]): + for x in xrange(self.size[0] / 2): + for y in xrange(self.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 y in xrange(image.size[1]): + for x in xrange(self.size[0] / 2, self.size[0]): + for y in xrange(self.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() + def all_lines(self): + im_l = self.image.load() lines = [] - for x in xrange(image.size[0]): - for y in xrange(image.size[1]): + for x in xrange(self.size[0]): + for y in xrange(self.size[1]): if im_l[x, y]: lines.append(self.angle_distance((x, y))) return lines 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)