1 from PIL import Image, ImageFilter
5 def edge_detection(image):
6 image = image.filter(ImageFilter.GaussianBlur())
7 # GaussianBlur is undocumented class, it might not work in future versions
9 image = Image.fromstring('L', image.size, pcf.edge(image.size, image.tostring()))
13 image_l = image.load()
14 new_image = Image.new('L', image.size)
15 new_image_l = new_image.load()
17 for x in range(2, image.size[0] - 2):
18 for y in range(2, image.size[1] - 2):
21 for b in range(y - 2, y + 3)])
22 for a in range(x - 2, x + 3)])
23 + (17 * image_l[x, y]))
28 new_image_l[x, y] = pix
31 def high_pass(image, height):
32 image_l = image.load()
33 new_image = Image.new('L', image.size)
34 new_image_l = new_image.load()
36 for x in xrange(image.size[0]):
37 for y in xrange(image.size[1]):
38 if image_l[x, y] < height:
41 new_image_l[x, y] = image_l[x, y]
45 def components(image):
46 image_l = image.load()
47 new_image = Image.new('L', image.size)
48 new_image_l = new_image.load()
53 for y in xrange(1, image.size[1] - 1):
54 for x in xrange(1, image.size[0] - 1):
57 s.add(new_image_l[x - 1, y - 1])
58 s.add(new_image_l[x, y - 1])
59 s.add(new_image_l[x + 1, y - 1])
60 s.add(new_image_l[x - 1, y])
62 components.append(set())
63 new_image_l[x, y] = comp_counter
64 components[comp_counter].add((x, y))
70 components[c].add((x,y))
73 c1, c2 = s.pop(), s.pop()
74 components[c2].add((x, y))
75 for (x1, y1) in components[c2]:
76 new_image_l[x1, y1] = c1
77 components[c1] = components[c1] | components[c2]
80 new_image = Image.new('L', image.size)
81 new_image_l = new_image.load()
83 for component in components:
88 for (x, y) in component:
92 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255
97 def components2(image):
98 image_l = image.load()
99 new_image = Image.new('L', image.size)
100 new_image_l = new_image.load()
105 for y in xrange(2, image.size[1] - 2):
106 for x in xrange(2, image.size[0] - 2):
110 for (a, b) in [(a,b) for a in range(x - 2, x + 3)
111 for b in range(y - 2, y + 1)]:
112 if not (b == y and a >= x):
113 s.add(new_image_l[a, b])
116 components.append(set())
117 new_image_l[x, y] = comp_counter
118 components[comp_counter].add((x, y))
123 new_image_l[x, y] = c
124 components[c].add((x,y))
128 components[c1].add((x, y))
129 new_image_l[x, y] = c1
131 for (x1, y1) in components[c2]:
132 new_image_l[x1, y1] = c1
133 components[c1] = components[c1] | components[c2]
134 components[c2] = None
136 new_image = Image.new('L', image.size)
137 new_image_l = new_image.load()
139 for component in components:
144 for (x, y) in component:
148 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255