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.
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.
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.
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.
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.
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) = (1/3)(29/6)2 · t + 4/29, otherwise Lab nonlinearity (continuous, mostly cube root, linear below 0.008856)
Applied to each channel:
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.
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.
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°
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.
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.
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.
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
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.
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°
Δ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:
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.
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.
- Δ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
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.
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.
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.
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.
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.
Test your understanding
Six questions on CIELAB, LCh, and color difference. Wrong answers come with brief explanations.
Quick check
Continue your journey
The Color Solid: Visualizing All Colors in 3D
See the Lab solid whole - and slice it at any lightness.
Colorimetry · 41Color Appearance Models: CIECAM
Where Lab leaves off: adding viewing conditions to predict appearance.
Foundations · 29Color Order Systems: Munsell, NCS, Pantone, RAL
The human-navigable atlases that publish their colors in these Lab values.
Foundations · 01What Color Is and How Humans See It
The cornerstone explainer connecting light, surface, eye, brain, and standards.
Physics · 04Spectral Power Distributions and Why RGB Is Not Enough
The spectra that feed into XYZ, which feeds into CIELAB.
Vision · 05Human Color Vision: Cones, Opponent Signals, and the Brain
The biological opponent channels that L*a*b*'s axes mirror.
Vision · 07Color Constancy, Adaptation, and Why Colors Change with Context
The phenomena CIELAB does not model - solved by CIECAM appearance models.
Colorimetry · 08CIE XYZ Explained
The space CIELAB is built on top of.
Colorimetry · 10Chromaticity Diagrams Without the Intimidation
The horseshoe diagram and how Lab's a*/b* plane differs from xy.
Colorimetry · 11Metamerism Explained
Why two surfaces with the same Lab can still look different under different lights.