This test page includes saturation examples of ppmhsy, including the newest version, 1.2, with gamma correction. We compare the results with results from Gimp and Imagemagick, which use variants of the HLS model. Note that Gimp uses much the same algorithms as the popular Photoshop. Saturation by a factor of more than 2 in gimp is done by saturating twice by 100%.

Note: most saturation increases tested here are very heavy, up to a factor of 4. This is to show the effect of the algorithms more clearly. Usually, you'll only want to saturate up to a factor of 1.5 or perhaps 2.

Desaturation. From left to right: original, gimp desaturated, ppmhsy 1.1 (no gamma correction), ppmhsy 1.2 (gamma correction). Note: this image clearly demonstrates the desaturation problem with regular HSV or HLS colour spaces. Results from imagemagick are identical to gimp. The ppmhsy rendering results in a faithful greyscale image. Note that the Gimp greyscale mode produces an image similar to the ppmhsy image.

A more blatant example of the HSV/HLS brightness problem can be seen when one takes an image with primary colours. With help of such an image, it is also possible to see differences in different Y formulas. See the page on Y values.

Increasing saturation 4x. From left to right: original, gimp, ppmhsy 1.1, ppmhsy 1.2. Note: gimp looks reasonably neat here, but the greens are brightened and the blues are darkened. Ppmhsy compensates by adding extra red and blue, which amplifies noise in the dark areas. The newest version of ppmhsy with gamma correction corrects the noise problem in the dark areas.

The need for gamma correction is apparent here. A much clearer example of this is found in the image below. From left to right: original, gimp desaturated, ppmhsy desaturated without gamma correction, ppmhsy desaturated with gamma correction. Note: Gimp renders the blue and red waves too bright. Ppmhsy without gamma correction makes the waves disappear completely (gimp greyscale mode produces a similar result). Ppmhsy with gamma correction produces a more accurate result. Even the bright bands around the edges of the blue and red waves are rendered faithfully.

Increasing saturation 4x. From left to right: original, gimp, imagemagick, ppmhsy 1.1, ppmhsy 1.2. Note: the yellows in the flower's heart are brightened in gimp and imagemagick, causing ugly contrast in the shadows. This effect already happens at 2x saturation. At 4x saturation, we also get terrible noise in the blues, which seems to be a result of the great brightness differences between small differences of H or S of blue/cyan for equal L. It is not present in the ppmhsy version. Oddly, the noise in the Gimp version is worse (see below). There is little difference between ppmhsy with and without gamma correction here.

To further test my hypotheses about the noise in the blue-cyan areas, I did a 4x saturation on a simple blue-cyan gradient. The results are quite surprising. From left to right: original, gimp, imagemagick, ppmhsy 1.1, ppmhsy 1.2. There is terrible banding in the gimp image, indicating some kind of serious rounding error, which may result from the fact that gimp uses 8-bit integers to represent the HLS values. The imagemagick image looks quite smooth, but has a steep brightness gradient about 1/3 from the bottom (strongest at H=192), which is further proof of the theory about the brightness noise. The difference between ppmhsy with and without gamma correction is very clear here: without gamma correction it is too bright and there is a small bright band around H=200.

So, it appears that for H around 190-200, varying H or S with equal L is likely to cause visible brightness differences, resulting in noise. Furthermore, we may conclude that the gimp (version 1.2.3) algorithm is defective, and should be fixed.

Another situation where cyans can easily be shown to be troublesome are hue shifts. Say, I want to prove that I am an alien by turning a picture of myself cyan. Left: original. Middle: Gimp, 180 deg. hue shift. Right: ppmhsy, 180 deg. hue shift. Of all possible hue shifts, this one turns out worst in Gimp. The ppmhsy rendering shows that the HSY model is also suitable for hue operations.

Boris van Schooten, boris@13thmonkey.org