[Image-SIG] Resampling with antialiasing while using only 8 greyscales
Paul Furley
paul.furley at dunelm.org.uk
Sat Mar 23 10:16:39 CET 2013
Good evening,
F
irstly, thanks for creating and maintaining such a fantastic library, the
PIL is awesome!
I've got an interesting problem and I'd really appreciate if someone could
point me in the right direction. I'm a reasonable developer but I've become
out of my depth in image science :)
I've got greyscale images which I have dithered (Floyd-Steinberg) so that
they contain exactly 8 shades. The pixel values present in the images are 0,
36, 73, 109, 146, 182, 219, 255 - so 8 levels with pure-white and
pure-black being represented. Naturally, most of the 256 possible pixel
values in the histogram are empty.
I want to reduce the size of this image by 3x in both directions, ie (300,
300) => (100, 100) *with* anti-aliasing but *without* creating pixels
outside of those 8 shades. Of course, the Lanczos implementation in PIL
doesn't know to only use values 0, 36, 73 etc, so it uses the full 256
range, thereby undoing my dithering work.
Can anyone suggest a good approach to this? Would it be possible to modify
the resampling algorithm to work in 8 shades rather than 256? Or is there a
way I could put the pixel values back into the 8 "buckets" afterwards
without wrecking the colour accuracy? I have tried the latter and gradients
become steps, as you'd expect. It doesn't seem right to apply dithering
again somehow.
I have considered re-ordering my process from:
*High-res image -> Dithering -> Resampling*
to
*High-res image -> Resampling -> Dithering*
but I then think the dithering process wreaks havoc on the beautifully
antialiased edges in the image.
Any thoughts would be very gratefully received.
Kind regards,
Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20130323/48fde52c/attachment-0001.html>
More information about the Image-SIG
mailing list