164 lines · plain
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later2 3.. _colorspaces:4 5***********6Colorspaces7***********8 9'Color' is a very complex concept and depends on physics, chemistry and10biology. Just because you have three numbers that describe the 'red',11'green' and 'blue' components of the color of a pixel does not mean that12you can accurately display that color. A colorspace defines what it13actually *means* to have an RGB value of e.g. (255, 0, 0). That is,14which color should be reproduced on the screen in a perfectly calibrated15environment.16 17In order to do that we first need to have a good definition of color,18i.e. some way to uniquely and unambiguously define a color so that19someone else can reproduce it. Human color vision is trichromatic since20the human eye has color receptors that are sensitive to three different21wavelengths of light. Hence the need to use three numbers to describe22color. Be glad you are not a mantis shrimp as those are sensitive to 1223different wavelengths, so instead of RGB we would be using the24ABCDEFGHIJKL colorspace...25 26Color exists only in the eye and brain and is the result of how strongly27color receptors are stimulated. This is based on the Spectral Power28Distribution (SPD) which is a graph showing the intensity (radiant29power) of the light at wavelengths covering the visible spectrum as it30enters the eye. The science of colorimetry is about the relationship31between the SPD and color as perceived by the human brain.32 33Since the human eye has only three color receptors it is perfectly34possible that different SPDs will result in the same stimulation of35those receptors and are perceived as the same color, even though the SPD36of the light is different.37 38In the 1920s experiments were devised to determine the relationship39between SPDs and the perceived color and that resulted in the CIE 193140standard that defines spectral weighting functions that model the41perception of color. Specifically that standard defines functions that42can take an SPD and calculate the stimulus for each color receptor.43After some further mathematical transforms these stimuli are known as44the *CIE XYZ tristimulus* values and these X, Y and Z values describe a45color as perceived by a human unambiguously. These X, Y and Z values are46all in the range [0…1].47 48The Y value in the CIE XYZ colorspace corresponds to luminance. Often49the CIE XYZ colorspace is transformed to the normalized CIE xyY50colorspace:51 52 x = X / (X + Y + Z)53 54 y = Y / (X + Y + Z)55 56The x and y values are the chromaticity coordinates and can be used to57define a color without the luminance component Y. It is very confusing58to have such similar names for these colorspaces. Just be aware that if59colors are specified with lower case 'x' and 'y', then the CIE xyY60colorspace is used. Upper case 'X' and 'Y' refer to the CIE XYZ61colorspace. Also, y has nothing to do with luminance. Together x and y62specify a color, and Y the luminance. That is really all you need to63remember from a practical point of view. At the end of this section you64will find reading resources that go into much more detail if you are65interested.66 67A monitor or TV will reproduce colors by emitting light at three68different wavelengths, the combination of which will stimulate the color69receptors in the eye and thus cause the perception of color.70Historically these wavelengths were defined by the red, green and blue71phosphors used in the displays. These *color primaries* are part of what72defines a colorspace.73 74Different display devices will have different primaries and some75primaries are more suitable for some display technologies than others.76This has resulted in a variety of colorspaces that are used for77different display technologies or uses. To define a colorspace you need78to define the three color primaries (these are typically defined as x, y79chromaticity coordinates from the CIE xyY colorspace) but also the white80reference: that is the color obtained when all three primaries are at81maximum power. This determines the relative power or energy of the82primaries. This is usually chosen to be close to daylight which has been83defined as the CIE D65 Illuminant.84 85To recapitulate: the CIE XYZ colorspace uniquely identifies colors.86Other colorspaces are defined by three chromaticity coordinates defined87in the CIE xyY colorspace. Based on those a 3x3 matrix can be88constructed that transforms CIE XYZ colors to colors in the new89colorspace.90 91Both the CIE XYZ and the RGB colorspace that are derived from the92specific chromaticity primaries are linear colorspaces. But neither the93eye, nor display technology is linear. Doubling the values of all94components in the linear colorspace will not be perceived as twice the95intensity of the color. So each colorspace also defines a transfer96function that takes a linear color component value and transforms it to97the non-linear component value, which is a closer match to the98non-linear performance of both the eye and displays. Linear component99values are denoted RGB, non-linear are denoted as R'G'B'. In general100colors used in graphics are all R'G'B', except in openGL which uses101linear RGB. Special care should be taken when dealing with openGL to102provide linear RGB colors or to use the built-in openGL support to apply103the inverse transfer function.104 105The final piece that defines a colorspace is a function that transforms106non-linear R'G'B' to non-linear Y'CbCr. This function is determined by107the so-called luma coefficients. There may be multiple possible Y'CbCr108encodings allowed for the same colorspace. Many encodings of color109prefer to use luma (Y') and chroma (CbCr) instead of R'G'B'. Since the110human eye is more sensitive to differences in luminance than in color111this encoding allows one to reduce the amount of color information112compared to the luma data. Note that the luma (Y') is unrelated to the Y113in the CIE XYZ colorspace. Also note that Y'CbCr is often called YCbCr114or YUV even though these are strictly speaking wrong.115 116Sometimes people confuse Y'CbCr as being a colorspace. This is not117correct, it is just an encoding of an R'G'B' color into luma and chroma118values. The underlying colorspace that is associated with the R'G'B'119color is also associated with the Y'CbCr color.120 121The final step is how the RGB, R'G'B' or Y'CbCr values are quantized.122The CIE XYZ colorspace where X, Y and Z are in the range [0…1] describes123all colors that humans can perceive, but the transform to another124colorspace will produce colors that are outside the [0…1] range. Once125clamped to the [0…1] range those colors can no longer be reproduced in126that colorspace. This clamping is what reduces the extent or gamut of127the colorspace. How the range of [0…1] is translated to integer values128in the range of [0…255] (or higher, depending on the color depth) is129called the quantization. This is *not* part of the colorspace130definition. In practice RGB or R'G'B' values are full range, i.e. they131use the full [0…255] range. Y'CbCr values on the other hand are limited132range with Y' using [16…235] and Cb and Cr using [16…240].133 134Unfortunately, in some cases limited range RGB is also used where the135components use the range [16…235]. And full range Y'CbCr also exists136using the [0…255] range.137 138In order to correctly interpret a color you need to know the139quantization range, whether it is R'G'B' or Y'CbCr, the used Y'CbCr140encoding and the colorspace. From that information you can calculate the141corresponding CIE XYZ color and map that again to whatever colorspace142your display device uses.143 144The colorspace definition itself consists of the three chromaticity145primaries, the white reference chromaticity, a transfer function and the146luma coefficients needed to transform R'G'B' to Y'CbCr. While some147colorspace standards correctly define all four, quite often the148colorspace standard only defines some, and you have to rely on other149standards for the missing pieces. The fact that colorspaces are often a150mix of different standards also led to very confusing naming conventions151where the name of a standard was used to name a colorspace when in fact152that standard was part of various other colorspaces as well.153 154If you want to read more about colors and colorspaces, then the155following resources are useful: :ref:`poynton` is a good practical156book for video engineers, :ref:`colimg` has a much broader scope and157describes many more aspects of color (physics, chemistry, biology,158etc.). The159`http://www.brucelindbloom.com <http://www.brucelindbloom.com>`__160website is an excellent resource, especially with respect to the161mathematics behind colorspace conversions. The wikipedia162`CIE 1931 colorspace <http://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_xy_chromaticity_diagram_and_the_CIE_xyY_color_space>`__163article is also very useful.164