[Image-SIG] Odd behavior in PIL 1.1.4 equalization
David Kirtley
dkirtley at gmail.com
Wed May 4 18:35:25 CEST 2005
Hi all,
I seem to have found an odd behavior in the equalization.
I created a series of test images with PIL for a demonstration:
a 300x300 RGB image with three bars of gray with offsets of 20 in
all three channels
with starting values of 0 to 200 in steps of 50.
I expected the equalization routine to move them to 0, 128, 255 as per
the definition of Histogram Equailzation but to my suprise the
equalization routine decides to instead
set them to 0, 85, 170.
Is this intended functionality? Is this a bug/feature? :)
David
------------------------------------- Source used-------------------------
import Image, ImageOps, ImageDraw, ImageFilter
def fill(im,start):
d = ImageDraw.Draw(im)
d.rectangle((0,0,99,299), fill=(start+0,start+0,start+0), outline
=(start+0,start+0,start+0))
d.rectangle((100,0,199,299), fill=(start+20,start+20,start+20),
outline =(start+20,start+20,start+20))
d.rectangle((200,0,299,299), fill=(start+40,start+40,start+40),
outline =(start+40,start+40,start+40))
return im
x = Image.new('RGB',(300,300))
original = open('original.csv','w')
equalized = open('equalized.csv','w')
for image_base in [a for a in range(0,200,50)]:
a = fill(x, image_base)
a.save('%s_original.png'%image_base,'PPM')
b = ImageOps.equalize(a)
b.save('%s_equalized.png'%image_base,'PPM')
original.write('%s,'%image_base+`a.histogram()`[1:-1]+'\n')
equalized.write('%s,'%image_base+`b.histogram()`[1:-1]+'\n')
More information about the Image-SIG
mailing list