30

CIELAB and LCH Explained

CIE XYZ gave the world a universal numerical reference for color. But equal steps in XYZ do not feel like equal steps to the eye. CIELAB (1976) was the CIE's first attempt at a perceptually scaled coordinate system - and almost half a century later, it remains the working space of palette designers, ΔE tolerancing, gamut mapping, and the perceptually-tuned web color world.

Colorimetry · 09 8 Live Demos ~50 min read XYZ → Lab → LCh
1976
CIELAB published
L* 0-100
Lightness range
~±128
Practical a* b* extent
ΔE ≈ 1
Just-noticeable threshold
00

Advanced Lab/LCh workbench

Lab is more than a coordinate transform. It is a working model for perceptual spacing, gamut boundaries, palette ramps, tolerancing, and the practical handoff between legacy CIE workflows and modern Oklab/OKLCh tools. This workbench exposes those tradeoffs in one place.

Interactive 00 - Advanced perceptual color model

Compare Lab, LCh, Oklab, gamut clipping, and delta-E tolerances

Pick a model and reference white, then tune L*, chroma, hue, hue spread, delta-E tolerance, and gamut compression. The canvas shows the a*/b* plane, a generated palette, a tolerance pair, and how the same color behaves in a display gamut.

Current coordinate L -- C -- h --
Cartesian Lab L -- a -- b --
Display preview --
Delta-E pair --
Gamut status --
Recommendation --
Perceptual delta 0%
Gamut pressure 0%
Uniformity warning 0%

Lab/LCh gives useful perceptual structure, but saturated blues and reds still need caution. Oklab usually behaves better for new design systems, while CIELAB remains the reference for legacy ΔE and ICC workflows.

01

Why XYZ wasn't enough

CIE XYZ is rigorous, but it is not perceptually uniform. Two XYZ points the same Euclidean distance apart can look very different in perceived color difference. Worse, the non-uniformity is itself non-uniform - dense regions sit near the green edge of the chromaticity diagram while the entire blue corner is spread across a small visual interval.

Designers, paint companies, and quality-control engineers needed a coordinate system where equal numerical distance meant equal perceived difference. In 1976 the CIE published two candidates: CIELAB (often written CIE L*a*b*) and CIELUV. CIELAB became the workhorse for surface color; CIELUV survived in television and some video applications. This article focuses on CIELAB.

Perceptual uniformity is approximate. CIELAB makes the geometry closer to perception, not equal to it. Industries that need tight tolerancing built refined difference formulas - CIEDE2000 and CIEDE94 - that correct CIELAB's worst non-uniformities locally. The principle remains: Lab is the closest-to-uniform space that the major standards have produced and that everyone agrees to use.
02

XYZ → Lab transformation

The Lab transform works in two steps. First, divide X, Y, and Z by the corresponding values of the reference white, normalizing the input. Second, apply a non-linear cube-root function (with a small linear segment near zero), then combine to produce three coordinates.

f(t) = t1/3,   for t > (6/29)3
f(t) = (1/3)(29/6)2 · t + 4/29,   otherwise Lab nonlinearity (continuous, mostly cube root, linear below 0.008856)

Applied to each channel:

L* = 116 · f(Y / Yw) − 16
a* = 500 · [ f(X / Xw) − f(Y / Yw) ]
b* = 200 · [ f(Y / Yw) − f(Z / Zw) ] CIELAB coordinates, given a reference white (Xw, Yw, Zw)

Read these three lines carefully. L* depends only on the Y channel - it is a perceptually scaled lightness function. a* compares the cube-rooted X to the cube-rooted Y - effectively a red-green opponent signal. b* compares Y to Z - effectively a yellow-blue opponent signal. The structure deliberately echoes Hering's three opponent channels.

03

The L*, a*, b* axes

CIELAB is a three-dimensional Cartesian space with three orthogonal axes. Knowing what each axis means is the entry ticket to reading Lab values fluently.

L* (Lightness)
0 = black, 100 = reference white. Perceptually scaled - a sample at L* = 50 looks twice as light as L* = 25, not as in Y.
a* (Red-Green)
Positive = red, negative = green. Roughly ±128 covers practical sRGB colors. Zero a* with zero b* is a neutral gray.
b* (Yellow-Blue)
Positive = yellow, negative = blue. Same ~±128 practical range. Note: yellow is positive, not negative.
Neutral axis
The line a* = b* = 0 runs through every gray from black (L* = 0) to reference white (L* = 100).
Symmetric structure
The a* and b* axes are signed. Going from red to green is one continuous numerical move through zero - the opponent organization is built in.
Reference white anchor
L* = 100, a* = 0, b* = 0 is the reference white by definition. Move the reference white and every Lab value shifts.
Interactive 01 · L*a*b* plane explorer

Walk the a*/b* plane at any L* slice

Pick a lightness L*. The plane shows every (a*, b*) coordinate at that lightness, rendered in sRGB approximately. Black regions are outside the sRGB gamut. Click anywhere to drop a probe and read the corresponding Lab and hex values.

L*
50
a*
0
b*
0
Hex (clipped to sRGB)
#808080
Chroma / Hue (LCh)
C 0 / h 0°
04

The cube root nonlinearity

Why a cube root? The simple answer is empirical: human lightness perception scales approximately as the cube root of luminance over a wide range. This relationship was established through psychophysical experiments long before CIELAB - it shows up in the Munsell value scale, Stevens's power law for brightness, and the Weber-Fechner approximations that preceded it.

Applying the cube root makes the L* coordinate match perceived lightness. A patch at L* = 50 looks halfway between black and white. A patch at Y = 18 (the famous "18% gray") sits very close to L* = 50, which is why mid-gray cards have that counter-intuitive value.

Interactive 02 · L* vs Y

Compare perceived lightness to physical luminance

Both bars below climb from black to white. The top bar is linear in Y (luminance) - it spends most of its width looking nearly white. The bottom bar is linear in L* - the gray steps look visually uniform. The same numerical interval in Y vs L* covers very different perceptual distances.

Top: linear Y (luminance) · Bottom: linear L* (perceived lightness)
This is why "50% gray" is a tricky phrase. 50% gray as a Y value (mid-luminance) is 18% reflectance, which looks like a fairly dark gray. 50% gray as an L* value (mid-lightness) is roughly 46% reflectance, which looks neutrally mid-tone. Most photographers mean L*-50; most physicists mean Y-50.
05

LCh polar coordinates

CIELAB's Cartesian a*/b* layout is mathematically convenient but psychologically awkward. People don't think in terms of "+20 red and +15 yellow"; they think "orangish, medium-saturated." The polar form LCh (also written L*C*h°) keeps L* but replaces a*, b* with chroma and hue angle.

C* = √(a*² + b*²),   h° = atan2(b*, a*) chroma is distance from neutral axis; hue is the angle around it
L* (Lightness)
Identical to CIELAB. 0 = black, 100 = white.
C* (Chroma)
Distance from the neutral gray axis. 0 = neutral, large values = saturated. Bounded by gamut limits.
h° (Hue angle)
Angle in degrees: 0° ≈ red, 90° ≈ yellow, 180° ≈ green, 270° ≈ blue. Continuous around the circle.
Same data as Lab
LCh and Lab are mathematically interconvertible. Same gamut, same distances. Only the coordinates differ.
Interactive 03 · LCh hue wheel

Spin around the chroma plane at one lightness

The wheel renders L* C* h° colors at the lightness you set. Click anywhere to drop a probe and read the L*, C*, h° values plus the Lab equivalent.

L* C* h°
60 / 0 / 0°
Hue name (approximate)
neutral gray
Lab equivalent
L 60 / a 0 / b 0
Hex preview
#909090
LCh's hue angle is more useful than HSL's hue. HSL hue is computed from raw RGB - it has no perceptual grounding, so a 20° rotation in HSL produces visibly different magnitudes of color change depending on where you start. LCh hue is grounded in the perceptual Lab plane, so equal angular steps look more like equal hue steps.
06

Reference white sensitivity

Lab is defined relative to a reference white. The same physical sample, described against D65, gets different Lab numbers than against D50. ICC color management uses Lab at D50; most digital imaging uses D65. Mismatching the assumed white point is one of the most common (and silent) sources of color management bugs.

Interactive 04 · White-point comparison

Same hex, different Lab numbers

Pick a color. The system computes its Lab values against D65 and D50 white points. The two triples are different by a few units in a* and b* - that seemingly small difference is enough to invert a ΔE comparison.

Lab under D65 (sRGB default)
L 65.4 / a 50.0 / b 73.7
LCh under D65
C 89.0 / h 55.9°
Lab under D50 (ICC PCS)
L 65.4 / a 53.5 / b 75.2
LCh under D50
C 92.3 / h 54.6°
07

ΔE color difference

The whole point of building a perceptually uniform space was to make color difference calculable as a simple distance. In CIELAB the original formula was just Euclidean:

ΔE*76 = √((L*₁ − L*₂)² + (a*₁ − a*₂)² + (b*₁ − b*₂)²) CIE 1976 color difference - sometimes also called ΔEab

Two stimuli with ΔE = 1 are at the "just noticeable difference" threshold for most observers. ΔE = 2-3 looks like a slight but clear shift; ΔE = 5 is a definite color step; ΔE = 10 is dramatic. The 1976 formula is the simplest in a family that has grown over time - CIE94 and CIEDE2000 weight the components to fix known non-uniformities.

Interactive 05 · ΔE calculator

Compare two colors numerically

Type two hex values. The system computes ΔE in three flavors - ΔE76 (Euclidean), ΔE94, and CIEDE2000 - and classifies the result on a standard tolerance scale.

#ff6a00
#ff7a20
ΔE76 (Euclidean)
7.6
ΔE94
4.2
ΔE00 (CIEDE2000)
4.8
Lab of color 1
L 65 / a 50 / b 74
Lab of color 2
L 67 / a 42 / b 65
Clearly visible difference. Acceptable in many applications; failure for high-fidelity print or paint matching.
< 1
Imperceptible to most
1-2
Just-noticeable
2-5
Clearly visible
> 10
Different colors
08

When Lab is not truly uniform

CIELAB is much better than XYZ for uniform spacing, but not perfect. The well-known MacAdam ellipses - small regions in chromaticity space within which observers cannot tell colors apart - vary in size by an order of magnitude across the gamut. In Lab, the variation is smaller, but blues remain compressed and the saturated reds stretched. ΔE = 1 means different things in different parts of the gamut.

Two main fixes evolved. CIEDE2000 stays in CIELAB but applies location-dependent weights to the lightness, chroma, and hue terms so that "equal ΔE" maps more consistently to "equal perceived difference." CAM16-UCS works in a different space derived from the CIECAM16 appearance model and is even closer to uniform - but it is computationally heavier and not yet standard in design tools.

Saturated red overestimate
CIELAB stretches the saturated red region. A ΔE step in strong reds feels smaller than the same ΔE in pastels.
Blue compression
Blues collapse in CIELAB. Two visibly distinct blues can give the same Lab numbers within rounding.
Lightness-chroma coupling
Perceived lightness depends slightly on chroma - the Helmholtz-Kohlrausch effect. CIELAB ignores this.
Surround dependence
CIELAB has no concept of surround. The CIECAM family addresses this with explicit viewing-condition parameters.
09

Oklab and modern alternatives

In 2020 Björn Ottosson published Oklab, a perceptually scaled color space designed to be even closer to uniform than CIELAB while remaining computationally cheap. It is based on a different LMS-style cone basis followed by a cube root and a final matrix transform. The space comes in Oklab (Cartesian) and OKLCh (polar) forms, mirroring CIELAB.

Oklab fixes several of CIELAB's local distortions - especially the saturated blue and red regions - without giving up the speed needed for live color picking and interactive design. The CSS Color Module Level 4 specifies OKLCh as a first-class color syntax for the web. As of 2024, browser support is universal.

CIELAB / LCh

Published 1976. Industry standard for paint, textile, ICC color management, ΔE tolerancing, and the original perceptually-aware design tools.

Use when: matching legacy workflows, ICC profiles, ΔE compliance, decades of accumulated literature.

Oklab / OKLCh

Published 2020. Better local uniformity than CIELAB, especially in blue and red regions. CSS standardized. Fast to compute.

Use when: new design systems, palette generation, interactive color tools, modern web color, anywhere CSS Color 4 is targeted.

Interactive 06 · CIELAB vs Oklab

Compare hue rotations in both spaces

A row of 12 evenly-spaced hue steps at a fixed lightness and chroma. The top row is generated in CIELAB; the bottom row in Oklab. Compare the perceptual evenness of the steps - especially in the blue-purple region.

12 evenly-spaced hue angles in CIELAB
12 evenly-spaced hue angles in Oklab
10

Practical use: palette design

LCh's biggest practical win is palette design. By fixing one or two of L*, C*, h° and varying the third, you produce families of colors with controlled perceptual relationships. This is the basis of every credible "design system color ramp" - where Material Design, Tailwind, and Radix all use LCh-aware curves rather than raw HSL.

Lightness ramp
Fix hue and chroma; vary L*. Produces the 50→900 ramps in Material/Tailwind palettes. Steps look perceptually even.
Hue rotation
Fix lightness and chroma; vary h°. Produces qualitative palettes for data visualization where all swatches feel equally bright.
Complementary pair
Rotate hue by 180° while keeping L*/C* fixed. The pair is balanced in lightness and intensity, unlike RGB complements.
Triadic palette
Three hues 120° apart at same L*/C*. Looks visually equal-weight - unlike triadic palettes built from raw HSL.
Analogous palette
Three or more hues within a 30-60° arc. Produces calm, coherent ranges; useful for backgrounds and decorative work.
Diverging scale
Two hues meeting at neutral, with monotone L* on each side. Standard for diverging data (negative ↔ positive).
Interactive 07 · LCh palette builder

Generate a 10-step lightness ramp at any hue

Choose a hue and chroma. The system generates a 10-step ramp from L* = 10 to L* = 95 at that hue and chroma. Notice how the steps look perceptually even - and how a similar HSL ramp would not.

LCh ramp (perceptually even)
HSL ramp at the same hue (perceptually uneven)
"If you build a colour ramp by varying HSL lightness, the middle steps look thin and the dark steps look heavy. If you build it in LCh by varying L*, the steps look evenly spaced. That single difference is why every modern design system migrated." Editorial summary · color-systems engineering
11

Test your understanding

Six questions on CIELAB, LCh, and color difference. Wrong answers come with brief explanations.

Quick check

Loading…
 
Question 1 of 6
12

Continue your journey