I've finally implemented a concept that has been on the back of my
mind for some time. I call it pseudoGrey. It is a method to encode
more than 8 bits of greyscale within a 24-bit color image. Using the
technique, exactly 1,786 levels of grey can be encoded and decoded. The
algorithm borrows from the concept of luma, in that the "plusses" map
roughly to the luma weights of the three color components.
To use this technique, you begin with a 12-bit greyscale number. The
base 8-bit value for each rgb element is the 12-bit value right-shifted
by four. Then 1 is added to none, one, or two of the components by
examining the low-order nibble of input. On:
2.. 4 -> blue + 1
5.. 6 -> red + 1
7.. 8 -> red + 1, blue + 1
9..10 -> green + 1
11..13 -> green + 1, blue + 1
14..15 -> green + 1, red + 1
I don't think anyone can actually see the difference between 256 and
1786 levels of grey. However, without degrading the color image, you
preserve analytical detail which would otherwise be lost. Of course,
you need to have started with at least 512 levels of grey to get any
benefit. Film and many scanners do provide data sources that might take
advantage of this technique.
To see an implementation, visit the SIHwheel below. The source code
for the applet links from there. The color wheel begins
"non-augmented", which means there are 4096 slots available for greys.
If you click in the center of the wheel, the intensity bar is mapped to
pseudoGrey. If you have a 24-bit display and screen-peeker program, you
will be able to verify the pseudoGrey encoding. If you augment the
color set (by having three or more hue domains in their extra-hue mode),
the color wheel won't use more than 8-bit grey. The 16-bit SIH
colorspace always has at least true 256 grey levels.
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.