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,
10 pcf.edge(image.size, image.tostring()))
14 image_l = image.load()
15 new_image = Image.new('L', image.size)
16 new_image_l = new_image.load()
18 for x in range(2, image.size[0] - 2):
19 for y in range(2, image.size[1] - 2):
22 for b in range(y - 2, y + 3)])
23 for a in range(x - 2, x + 3)])
24 + (17 * image_l[x, y]))
29 new_image_l[x, y] = pix
32 def high_pass(image, height):
33 image_l = image.load()
34 new_image = Image.new('L', image.size)
35 new_image_l = new_image.load()
37 for x in xrange(image.size[0]):
38 for y in xrange(image.size[1]):
39 if image_l[x, y] < height:
42 new_image_l[x, y] = image_l[x, y]
46 def components(image):
47 image_l = image.load()
48 new_image = Image.new('L', image.size)
49 new_image_l = new_image.load()
54 for y in xrange(1, image.size[1] - 1):
55 for x in xrange(1, image.size[0] - 1):
58 s.add(new_image_l[x - 1, y - 1])
59 s.add(new_image_l[x, y - 1])
60 s.add(new_image_l[x + 1, y - 1])
61 s.add(new_image_l[x - 1, y])
63 components.append(set())
64 new_image_l[x, y] = comp_counter
65 components[comp_counter].add((x, y))
71 components[c].add((x,y))
74 c1, c2 = s.pop(), s.pop()
75 components[c2].add((x, y))
76 for (x1, y1) in components[c2]:
77 new_image_l[x1, y1] = c1
78 components[c1] = components[c1] | components[c2]
81 new_image = Image.new('L', image.size)
82 new_image_l = new_image.load()
84 for component in components:
89 for (x, y) in component:
93 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255
98 def components2(image):
99 image_l = image.load()
100 new_image = Image.new('L', image.size)
101 new_image_l = new_image.load()
106 for y in xrange(2, image.size[1] - 2):
107 for x in xrange(2, image.size[0] - 2):
111 for (a, b) in [(a,b) for a in range(x - 2, x + 3)
112 for b in range(y - 2, y + 1)]:
113 if not (b == y and a >= x):
114 s.add(new_image_l[a, b])
117 components.append(set())
118 new_image_l[x, y] = comp_counter
119 components[comp_counter].add((x, y))
124 new_image_l[x, y] = c
125 components[c].add((x,y))
129 components[c1].add((x, y))
130 new_image_l[x, y] = c1
132 for (x1, y1) in components[c2]:
133 new_image_l[x1, y1] = c1
134 components[c1] = components[c1] | components[c2]
135 components[c2] = None
137 new_image = Image.new('L', image.size)
138 new_image_l = new_image.load()
140 for component in components:
145 for (x, y) in component:
149 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255