Better than Lab?

Gamut reduction: CIE Lab & OKLab

Chris Lilley, W3C

CIE XYZ

Linear-light. Great for physical color mixing

Not perceptually uniform.

CIE Lab & LCH

Not linear-light.

Opponent colors, central neutral axis

Perceptually uniform ... mostly

CIE Luminance

NPU Luminance

CIE Lightness

PU Lightness

CIE Chroma, Hue

PU Chroma & Hue

Out of gamut colors

Gamut Mapping Aims (gamut reduction)

Gamut mapping (LC plane) [Morovic 2008]

intersecting gamut boundary

Shallow or concave gamut boundaries

Display P3 yellow to sRGB: Strict gamut intersection

Out of P3 gamut in red; out of sRGB gamut in salmon.

very desaturated result

Display P3 yellow to sRGB: Clip if deltaE < 2

Out of P3 gamut in red; out of sRGB gamut in salmon.

much better result

Color difference (ΔE)

1976
delta E is Euclidean distance in Lab
1984
CMC formula, used in fabric dyeing industry
1994
delta E 94, based on LCH, corrects for errors
2000
deltaE 2000 corrects for many errors

deltaE 1976

1976 formula

deltaE 1994

1994 formula

deltaE 2000

2000 formula

ΔE 2000
reveals
CIE Lab
non-
uniformity
[Lissner 2010]

uneven PU

Limitations of CIE Lab and LCH

  1. Over-estimating color differences at high chroma
  2. Axis asymmetry near zero
  3. Hue curvature, especially near blue
    • [Hung & Berns 1995] [Zhao & Luo 2020]

CIE Lab mostly works well

most colors ok

CIE Lab blue curvature

blue to purple

A better way?

Instead of compensating for the non-uniformity
with a complex distance metric,
use a better, more uniform space.

Improved Uniform Color Space?

ΔE 2000
IPT
[Ebner 1998]
[Lissner 2010]

just no

ΔE 2000
LAB2000

uniform, less good linearity

ΔE 2000
LAB2000
optimized

better linearity, worse uniformity

Color appearance models

candidate for CSS colors?

OKLab [Ottosson 2020]

Recap: chromatic adaptation in LMS

Bradford chromatic adaptation involves:
conversion to LMS cone-like space,
transformation to new white point,
and conversion back.

OKLab 2

So I made some notes [Lilley 2021]

And read other opinions [Levien 2021]

checked a few details with Björn, and

implemented OKLab in color.js

Uniformity comparison (smaller is better)

Oklab CIELab IPT Jzazbz CAM16
L RMS 0.201.704.922.380.00
C RMS 0.811.842.181.790.00
H RMS 0.490.690.480.430.59

Suspense

Ok but is it okay?
Show me the blue! Is there purple?

OKLab blue linearity

blue to blue

compare CIE Lab blue curvature

blue to purple

sRGB blue to neutral: OKLab

green is higher than red

sRGB blue to neutral: CIE Lab

red is higher than green

Display P3 yellow to sRGB OKLCH: intersection

Out of P3 gamut in red; out of sRGB gamut in salmon.

somewhat desaturated result

Display P3 yellow to sRGB OKLCH: Clip if ΔE < .02

Out of P3 gamut in red; out of sRGB gamut in salmon.

better result

Bonus

OKLab ΔE is simple Euclidean distance (so, fast)

Bonus 2

OKLab hue linearity aids gamut mapping
and
OKLab hue uniformity aids gradients [Levien 2021]

References

References 2

Thank you!

Questions?

Created 4 March 2019 by Bert Bos. Last modified $Date: 2021/09/18 01:16:55 $ by $Author: clilley $.