·13 min read

CIE L*a*b*: The Color Space That Matches Human Vision

RGB is how screens display color. CMYK is how printers reproduce it. But neither describes how humans see color. For that, we need CIE L*a*b* — a color space designed to be perceptually uniform, where a numerical distance between two colors corresponds to how different they actually look.

The Problem L*a*b* Solves

Try this experiment: in RGB, change a color from (0, 200, 0) to (0, 210, 0). Then change another color from (0, 50, 0) to (0, 60, 0). Both are a change of 10 units in the green channel, but the first change is barely visible while the second is obvious. This is because RGB is perceptually non-uniform — equal numeric steps do not produce equal perceptual steps.

This matters for any application where you need to measure or compare colors: paint matching, quality control in manufacturing, medical imaging, food science, textile production. You need a color space where "distance = perceived difference." That is exactly what CIE L*a*b* was designed to provide.

History: From MacAdam Ellipses to L*a*b*

The quest for a perceptually uniform color space began with David MacAdam's experiments at the Eastman Kodak Company in 1942. MacAdam asked human observers to identify the boundaries of "just noticeable difference" around target colors on the CIE 1931 chromaticity diagram. The result was a set of ellipses — now called MacAdam ellipses — that varied dramatically in size and orientation across the diagram. Near green, you could change color a lot before anyone noticed; near blue-violet, tiny changes were immediately apparent.

This proved that the CIE 1931 xy chromaticity diagram was wildly non-uniform. The CIE spent decades developing alternatives. The first major attempt was CIE 1964 (U*V*W*). Then came CIELUV in 1976 (optimized for emissive displays) and CIELAB (L*a*b*) in 1976 (optimized for surface colors). L*a*b* became the standard for industries dealing with physical colors and has remained the reference since then.

Understanding the Three Axes

CIE L*a*b* describes color with three coordinates:

L* = Lightness (0 = black, 100 = white)

a* = Green–Red axis (negative = green, positive = red)

b* = Blue–Yellow axis (negative = blue, positive = yellow)

The a* and b* axes directly correspond to the opponent-process theory of color vision proposed by Ewald Hering in 1878 and confirmed by Hurvich and Jameson in 1957. This is not a coincidence — L*a*b* was deliberately modeled on how the human visual system processes color signals from the retina. The a* axis maps to the red-green opponent channel, and the b* axis maps to the blue-yellow opponent channel.

You can visualize L*a*b* as a cylinder: the vertical axis is L* (lightness), and the horizontal cross-section at any lightness level shows the a*b* plane (a circle of hues with chroma increasing from center to edge). This is similar to how our Color Wheel organizes colors, but with the crucial advantage of perceptual uniformity.

The Conversion Pipeline: RGB → XYZ → L*a*b*

You cannot convert directly from RGB to L*a*b*. You must go through CIE XYZ, an intermediary color space defined by the CIE in 1931 based on color matching experiments by W. David Wright and John Guild.

Step 1: sRGB to Linear RGB (apply inverse gamma)

For each channel c = R, G, or B (normalized to [0, 1]):

If c ≤ 0.04045: c_lin = c / 12.92

Else: c_lin = ((c + 0.055) / 1.055) ^ 2.4

Step 2: Linear RGB to CIE XYZ (matrix multiplication, D65 illuminant)

X = 0.4124564 × R_lin + 0.3575761 × G_lin + 0.1804375 × B_lin

Y = 0.2126729 × R_lin + 0.7151522 × G_lin + 0.0721750 × B_lin

Z = 0.0193339 × R_lin + 0.1191920 × G_lin + 0.9503041 × B_lin

Step 3: XYZ to L*a*b*

First, normalize by the reference white point (D65):

x_r = X / X_n, y_r = Y / Y_n, z_r = Z / Z_n

where X_n = 0.95047, Y_n = 1.00000, Z_n = 1.08883

Apply the f() function to each:

f(t) = t^(1/3) if t > (6/29)^3 = 0.008856

f(t) = (t / (3×(6/29)^2)) + 4/29 otherwise

Then compute L*a*b*:

L* = 116 × f(y_r) − 16

a* = 500 × (f(x_r) − f(y_r))

b* = 200 × (f(y_r) − f(z_r))

Worked example: Converting #E74C3C (a vibrant red) through the pipeline:

sRGB: (231, 76, 60) → Normalized: (0.906, 0.298, 0.235)

Linear: (0.800, 0.073, 0.045)

XYZ: X=0.386, Y=0.228, Z=0.053

L*a*b*: L*=54.9, a*=62.8, b*=44.1

High a* (positive) = strong red shift

Moderate b* (positive) = warm/yellow undertone

Delta E: Measuring Perceptual Distance

The whole point of L*a*b* is to make color comparison meaningful. The Delta E (ΔE) metric is simply the Euclidean distance in L*a*b* space:

ΔE*ab = √[(ΔL*)² + (Δa*)² + (Δb*)²]

The practical interpretation (based on research by Mahy, Van Eycken, and Oosterlinck, 1994, and refined by Mokrzycki and Tatol, 2011):

ΔE < 1.0: Not perceptible by human eye

ΔE 1–2: Perceptible through close observation

ΔE 2–3.5: Perceptible at a glance, acceptable in some industries

ΔE 3.5–5: Obvious difference, unacceptable for color matching

ΔE > 5: Colors are seen as completely different

In the automotive industry, acceptable ΔE between adjacent body panels is typically < 1.5. In print, ΔE < 2 is considered acceptable for most commercial work. The paint industry often demands ΔE < 1.0 for color-critical applications.

Real-World Applications

Paint Matching

When you bring a color chip to a hardware store and they mix paint to match, the spectrophotometer reads the sample in L*a*b* coordinates and formulates a recipe to hit those coordinates. Companies like PPG, Sherwin-Williams, and AkzoNobel all use L*a*b* as their internal color language.

Food Science

Food quality control relies heavily on L*a*b*. The browning of bread, the ripening of fruit, the color consistency of ketchup — all are measured in L*a*b* coordinates. A study by León et al. (2006) in Food Research International established L*a*b* as the standard for food color measurement, with specific Delta E tolerances for different products.

Textile Manufacturing

Fabric dye lots must match to strict tolerances. A shirt made from two bolts of fabric with ΔE > 2 will show a visible color difference under retail lighting. Textile companies use spectrophotometers to measure every dye batch in L*a*b* and reject lots that fall outside tolerance.

Printing and Prepress

The ICC (International Color Consortium) profile system, used in all professional printing, converts between device-dependent color spaces (sRGB, Adobe RGB, CMYK) through a device-independent connection space — and that connection space is L*a*b*. Every ICC color profile maps device colors to and from L*a*b*.

Limitations and Successors

Despite being a massive improvement over RGB and XYZ, L*a*b* is not perfectly perceptually uniform. The MacAdam ellipses, when plotted in L*a*b* space, are smaller and more circular than in XY space, but they are still not perfectly round. The blue region remains problematic — a known issue that led to the CIEDE2000 Delta E formula, which adds correction terms for the blue hue rotation.

More recently, Björn Ottosson's OKLAB (2020) was designed specifically to improve upon L*a*b* for digital applications, with better hue linearity and more uniform chroma scaling. OKLCH, the cylindrical form of OKLAB, is now available in CSS and represents the next generation of perceptually uniform color spaces for the web.

Working with L*a*b* in Practice

While most web designers work in RGB or HSL, understanding L*a*b* makes you a better colorist. When you need to check if two colors are truly distinguishable, convert them to L*a*b* and compute Delta E. When you need to create a perceptually even gradient, interpolate in L*a*b* space rather than RGB (which produces dull midpoints in many gradients). Use our Color Converter to explore color values, and our Gradient Maker to create beautiful palettes that respect how human vision actually works.

Sources & References

This article is based on research from leading color authorities: