| Technical Notes - The Python Imaging Library | ![]() |
|
| Copyright © 1997 by Fredrik Lundh <fredrik@pythonware.com> | ||
| Updated 17 Aug 1997 (Created 21 May 1997) |
Histogram equalization can be used to improve the visual appearance of an image. Peaks in the image histogram (indicating commonly used grey levels) are widened, while the valleys are compressed.
Figure: original image, with corresponding histogram
![]()
![]()
Figure: same image, after equalization
![]()
![]()
# histogram equalization
import operator
def equalize(h):
lut = []
for b in range(0, len(h), 256):
# step size
step = reduce(operator.add, h[b:b+256]) / 255
# create equalization lookup table
n = 0
for i in range(256):
lut.append(n / step)
n = n + h[i+b]
return lut
#
# test stuff
if __name__ == "__main__":
import Image
im = Image.open("/usr/iv/tip/images/clenna.im")
# calculate lookup table
lut = equalize(im.histogram())
# map image through lookup table
im = im.point(lut)
im.save("out.ppm")