1 from PIL import Image, ImageFilter
3 def edge_detection(image):
4 image = image.filter(ImageFilter.GaussianBlur())
5 # GaussianBlur is undocumented class, it might not work in future versions
8 new_image = Image.new('L', image.size)
9 new_image_l = new_image.load()
11 for x in xrange(2, image.size[0] - 2):
12 for y in xrange(2, image.size[1] - 2):
15 for b in range(y - 2, y + 3)])
16 for a in range(x - 2, x + 3)])
17 - (25 * image_l[x, y]))
22 new_image_l[x, y] = pix
26 image_l = image.load()
27 new_image = Image.new('L', image.size)
28 new_image_l = new_image.load()
30 for x in range(2, image.size[0] - 2):
31 for y in range(2, image.size[1] - 2):
34 for b in range(y - 2, y + 3)])
35 for a in range(x - 2, x + 3)])
36 + (16 * image_l[x, y]))
41 new_image_l[x, y] = pix
44 def high_pass(image, height):
45 image_l = image.load()
46 new_image = Image.new('L', image.size)
47 new_image_l = new_image.load()
49 for x in xrange(image.size[0]):
50 for y in xrange(image.size[1]):
51 if image_l[x, y] < height:
54 new_image_l[x, y] = image_l[x, y]
58 def components(image):
59 image_l = image.load()
60 new_image = Image.new('L', image.size)
61 new_image_l = new_image.load()
66 for y in xrange(1, image.size[1] - 1):
67 for x in xrange(1, image.size[0] - 1):
70 s.add(new_image_l[x - 1, y - 1])
71 s.add(new_image_l[x, y - 1])
72 s.add(new_image_l[x + 1, y - 1])
73 s.add(new_image_l[x - 1, y])
75 components.append(set())
76 new_image_l[x, y] = comp_counter
77 components[comp_counter].add((x, y))
83 components[c].add((x,y))
86 c1, c2 = s.pop(), s.pop()
87 components[c2].add((x, y))
88 for (x1, y1) in components[c2]:
89 new_image_l[x1, y1] = c1
90 components[c1] = components[c1] | components[c2]
93 new_image = Image.new('L', image.size)
94 new_image_l = new_image.load()
96 for component in components:
101 for (x, y) in component:
105 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255
110 def components2(image):
111 image_l = image.load()
112 new_image = Image.new('L', image.size)
113 new_image_l = new_image.load()
118 for y in xrange(2, image.size[1] - 2):
119 for x in xrange(2, image.size[0] - 2):
123 for (a, b) in [(a,b) for a in range(x - 2, x + 3)
124 for b in range(y - 2, y + 1)]:
125 if not (b == y and a >= x):
126 s.add(new_image_l[a, b])
129 components.append(set())
130 new_image_l[x, y] = comp_counter
131 components[comp_counter].add((x, y))
136 new_image_l[x, y] = c
137 components[c].add((x,y))
141 components[c1].add((x, y))
142 new_image_l[x, y] = c1
144 for (x1, y1) in components[c2]:
145 new_image_l[x1, y1] = c1
146 components[c1] = components[c1] | components[c2]
147 components[c2] = None
149 new_image = Image.new('L', image.size)
150 new_image_l = new_image.load()
152 for component in components:
157 for (x, y) in component:
161 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255