1 from PIL import Image, ImageFilter
5 def color_enhance(image):
7 min_r, min_g, min_b = 999, 999, 999
8 max_r, max_g, max_b = -1, -1, -1
10 for x in xrange(image.size[0]):
11 for y in xrange(image.size[1]):
12 min_r = min(min_r, image_l[x, y][0])
13 max_r = max(max_r, image_l[x, y][0])
14 min_g = min(min_g, image_l[x, y][1])
15 max_g = max(max_g, image_l[x, y][1])
16 min_b = min(min_b, image_l[x, y][2])
17 max_b = max(max_b, image_l[x, y][2])
19 new_image = Image.new('RGB', image.size)
20 new_image_l = new_image.load()
21 for x in xrange(image.size[0]):
22 for y in xrange(image.size[1]):
23 r, g, b = image_l[x, y]
24 r = (r - min_r) * 255 / (max_r - min_r)
25 g = (g - min_g) * 255 / (max_g - min_g)
26 b = (b - min_b) * 255 / (max_b - min_b)
27 new_image_l[x, y] = (r, g, b)
28 # print min_r, max_r, r, g, b
32 def edge_detection(image):
33 new_image = image.filter(ImageFilter.GaussianBlur())
34 # GaussianBlur is undocumented class, it might not work in future versions
36 new_image = Image.fromstring('L', image.size,
37 pcf.edge(image.size, image.tostring()))
41 image_l = image.load()
42 new_image = Image.new('L', image.size)
43 new_image_l = new_image.load()
45 for x in range(2, image.size[0] - 2):
46 for y in range(2, image.size[1] - 2):
49 for b in range(y - 2, y + 3)])
50 for a in range(x - 2, x + 3)])
51 + (17 * image_l[x, y]))
56 new_image_l[x, y] = pix
59 def high_pass(image, height):
60 image_l = image.load()
61 new_image = Image.new('L', image.size)
62 new_image_l = new_image.load()
64 for x in xrange(image.size[0]):
65 for y in xrange(image.size[1]):
66 if image_l[x, y] < height:
69 new_image_l[x, y] = image_l[x, y]
73 def components(image):
74 image_l = image.load()
75 new_image = Image.new('L', image.size)
76 new_image_l = new_image.load()
81 for y in xrange(1, image.size[1] - 1):
82 for x in xrange(1, image.size[0] - 1):
85 s.add(new_image_l[x - 1, y - 1])
86 s.add(new_image_l[x, y - 1])
87 s.add(new_image_l[x + 1, y - 1])
88 s.add(new_image_l[x - 1, y])
90 components.append(set())
91 new_image_l[x, y] = comp_counter
92 components[comp_counter].add((x, y))
98 components[c].add((x,y))
101 c1, c2 = s.pop(), s.pop()
102 components[c2].add((x, y))
103 for (x1, y1) in components[c2]:
104 new_image_l[x1, y1] = c1
105 components[c1] = components[c1] | components[c2]
106 components[c2] = None
108 new_image = Image.new('L', image.size)
109 new_image_l = new_image.load()
111 for component in components:
116 for (x, y) in component:
120 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255
125 def components2(image):
126 image_l = image.load()
127 new_image = Image.new('L', image.size)
128 new_image_l = new_image.load()
133 for y in xrange(2, image.size[1] - 2):
134 for x in xrange(2, image.size[0] - 2):
138 for (a, b) in [(a,b) for a in range(x - 2, x + 3)
139 for b in range(y - 2, y + 1)]:
140 if not (b == y and a >= x):
141 s.add(new_image_l[a, b])
144 components.append(set())
145 new_image_l[x, y] = comp_counter
146 components[comp_counter].add((x, y))
151 new_image_l[x, y] = c
152 components[c].add((x,y))
156 components[c1].add((x, y))
157 new_image_l[x, y] = c1
159 for (x1, y1) in components[c2]:
160 new_image_l[x1, y1] = c1
161 components[c1] = components[c1] | components[c2]
162 components[c2] = None
164 new_image = Image.new('L', image.size)
165 new_image_l = new_image.load()
167 for component in components:
172 for (x, y) in component:
176 new_image_l[int(round(float(x_c)/c)), int(round(float(y_c)/c))] = 255