Oklab color space

This is an old revision of this page, as edited by Ftrebien (talk | contribs) at 00:03, 25 July 2024. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Oklab color space is a uniform color space for device independent color designed to improve perceptual uniformity, hue and lightness prediction, color blending, and usability while ensuring numerical stability and ease of implementation.[1] Introduced by Björn Ottosson in 2020, Oklab and its cylindrical counterpart, Oklch, have been included in the CSS Color Level 4 draft for device-independent web colors.[2] They are supported by recent versions of major web browsers,[3] allowing the specification of wide-gamut P3 colors.[4]

Oklab's model is fitted with improved color appearance data: CAM16 data for lightness and chroma, and IPT data for hue. The new fit addresses issues such as unexpected hue and lightness changes in blue colors present in CIELAB, and simplifies the creation of color schemes and smoother color gradients.[1][4][5]

Coordinates

Oklab uses the same spatial structure as the CIELAB color space, expressing color by three values:

  • L for perceptual lightness, ranging from 0.0 (black) to 1.0 (white), often expressed as a percentage
  • a and b for opponent channels of the four unique hues, unbounded but in practice ranging from -0.5 to +0.5
    • a for green (negative) to red (positive)
    • b for blue (negative) to yellow (positive)

Like CIELCh, Oklch represents colors using:

  • L for perceptual lightness
  • C for chroma representing chromatic intensity, unbounded and not negative but in practice not exceeding 0.5
  • h for hue angle in a color wheel, typically denoted in decimal degrees

Color differences

The perceptual color difference in Oklab is calculated as the Euclidean distance between the (L, a, b) coordinates.[6][2]

Conversion from CIE XYZ

Converting from CIE XYZ with a Standard Illuminant D65 involves:[1]

  1. Converting to an LMS color space with a linear map:
     
  2. Applying a cube-root non-linearity:
     
  3. Converting to Oklab with another linear map:
     

Given:

 

Conversion from sRGB

Converting from sRGB requires first converting from sRGB to CIE XYZ with a Standard Illuminant D65. As the last step of this conversion is a linear map from linear RGB to CIE XYZ, the reference implementation directly employs the multiplied matrix representing the composition of the two linear maps:[1]

 

Conversion to CIE XYZ and sRGB

Converting to CIE XYZ and sRGB simply involves applying the respective inverse functions in reverse order:[1]

 

Conversion to and from Oklch

Like CIELch, the Cartesian coordinates a and b are converted to the polar coordinates C and h° as follows:

 

And the polar coordinates are converted to the Cartesian coordinates as follows:

 

References

  1. ^ a b c d e Ottosson, Björn (23 Dec 2020). "A perceptual color space for image processing". GitHub Pages. Retrieved 24 July 2024.
  2. ^ a b CSS Color Module Level 4 (Candidate recommendation draft). W3C. Retrieved 24 July 2024.
  3. ^ "Oklab color model". Can I Use. Retrieved 24 July 2024.
  4. ^ a b Sitnik, Andrey; Turner, Travis (25 January 2023). "OKLCH in CSS: why we moved from RGB and HSL". Evil Martians. Retrieved 24 July 2024.
  5. ^ Levien, Raph (18 January 2021). "An interactive review of Oklab". GitHub Pages. Retrieved 24 July 2024.
  6. ^ Lilley, Chris (July 2021). "Better than Lab? Gamut reduction CIE Lab & OKLab". W3C. Retrieved 24 July 2024.