CIE XYZ derivatives: CIELUV and CIELAB
CIE XYZ describes every color a human can see, but equal steps in XYZ do not look like equal steps to the eye. CIELUV and CIELAB, both adopted by the CIE in 1976, reshape XYZ so that distance in the space roughly matches perceived difference.
The problem with XYZ
In the 1940s David MacAdam measured how far a color has to move on the chromaticity diagram before an observer notices the change. The regions of "no visible difference" turned out to be ellipses of very different sizes: tiny in the blues, large in the greens. XYZ is linear in light, which makes it ideal for computation, but it is not uniform in perception.
Both 1976 spaces fix this the same way: they take XYZ relative to a reference white, apply a nonlinearity similar to the eye's response (roughly a cube root), and split the result into lightness and two opponent axes.
Common part: lightness L*
L* is the same in both spaces. It depends only on Y, the luminance, relative to the white point Yn:
L* runs from 0 (black) to 100 (reference white). The linear segment near black avoids the infinite slope of the cube root at zero.
CIELAB (L*a*b*)
a* is the red-green axis (positive is red, negative is green), b* is the yellow-blue axis (positive is yellow). Neutral grays have a* = b* = 0. CIELAB is the standard in printing, paint, textiles and in color management (it is the usual profile connection space in ICC profiles).
CIELUV (L*u*v*)
CIELUV keeps the CIE 1976 u'v' chromaticity diagram inside it, in which additive mixtures of two lights lie on a straight line. That makes it convenient for displays and light sources. CIELAB lacks that property but models surface colors better.
White point
Both spaces need the reference white Xn, Yn, Zn. For sRGB and most screens this is D65 with the 2° observer: Xn = 95.047, Yn = 100, Zn = 108.883. Printing usually uses D50. The same color has different Lab values under a different white point, so a Lab value without its white point is incomplete.
LCh: the polar form
a* and b* can be read as a vector. Its length is chroma, its angle is hue:
LCh behaves like HSL or HSV, but with lightness that follows perception. Rotating h at constant L and C gives colors that look equally light, which HSL cannot do. That is why modern CSS has lch() and oklch().
Worked example
RGB (200, 80, 40), #c85028, in sRGB. The conversion to XYZ is described on the CIE XYZ and RGB page. The result, scaled to 0..100:
So the color is Lab (49.71, 45.77, 46.31) and Luv (49.71, 96.49, 36.18). Lightness is identical, the other two axes are not interchangeable.
Color difference ΔE
The point of a uniform space is that distance means something. The original 1976 formula is plain Euclidean distance in Lab:
Comparing our color with RGB (210, 90, 40), which is Lab (53.14, 44.76, 50.15), gives ΔE ≈ 5.25: a difference most people will notice side by side. A ΔE of about 2 is commonly treated as the threshold of a just-noticeable difference.
CIELAB is only approximately uniform, so later formulas correct it: CIE94 and CIEDE2000 (ΔE00) weight differences in lightness, chroma and hue separately. For quality control in printing, ΔE00 is the current standard.