I coded a computer vision algorithm to detect objects in different lighting conditions using HSV. I recently read a convincing critique of HSV by Charles Poynton:

HSB and HLS were developed to specify numerical Hue, Saturation and Brightness (or Hue, Lightness and Saturation) in an age when users had to specify colours numerically. The usual formulations of HSB and HLS are flawed with respect to the properties of colour vision. Now that users can choose colours visually, or choose colours related to other media (such as PANTONE), or use perceptually-based systems like Luv* and Lab*, HSB and HLS should be abandoned.

Here are some of problems of HSB and HLS. In colour selection where "lightness" runs from zero to 100, a lightness of 50 should appear to be half as bright as a lightness of 100. But the usual formulations of HSB and HLS make no reference to the linearity or nonlinearity of the underlying RGB, and make no reference to the lightness perception of human vision.

The usual formulation of HSB and HLS compute so-called "lightness" or "brightness" as (R+G+B)/3. This computation conflicts badly with the properties of colour vision, as it computes yellow to be about six times more intense than blue with the same "lightness" value (say L=50).

HSB and HSL are not useful for image computation because of the discontinuity of hue at 360 degrees. You cannot perform arithmetic mixtures of colours expressed in polar coordinates.

Nearly all formulations of HSB and HLS involve different computations around 60 degree segments of the hue circle. These calculations introduce visible discontinuities in colour space.

Although the claim is made that HSB and HLS are "device independent", the ubiquitous formulations are based on RGB components whose chromaticities and white point are unspecified. Consequently, HSB and HLS are useless for conveyance of accurate colour information.

If you really need to specify hue and saturation by numerical values, rather than HSB and HSL you should use polar coordinate version of u* and v*: h*uv for hue angle and c*uv for chroma.

I understand that HSV is better than RGB and that HSV has some advantages, such as removing shadows:

The Saturation component is regarded as invariant in shadow (only intensity changes), so processing the image in HSV space is better suit for shadow removing.

and easy computation:

HSV is often used simply because the code for converting between RGB and HSV is widely available and can also be easily implemented.

What are the tradeoffs of using HSB and HSV, which are inaccurate according to Poynton, compared to the standardized CIE color models such as CIELAB, CIELuv, and others?



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Browse other questions tagged or ask your own question.