What are the values of the primary and secondary colors in CIE L*ab color space using D65 2° observer?

172 Views Asked by At

Question

Using D65 illuminant and a 2° observer, what are the values of sRGB red, green, blue, cyan, magenta, and yellow in CIE L*ab color space?

Here are the coordinates of my white point:

95.047, 100, 108.883

Problem

I tried a dozen different tools (both free and paid, like Photoshop), and noticed not a single one can agree on what red (and the other colors) is in CIE Lab, even when using the same illuminant, observer, and white point.

What I tried

I made a benchmark using different tools. Here is a sample using the following online tools:

┌───┬─────────────┬────────────────────────┬───────────────────────┬─────────────────────┐
│   │ Rgb         │ Lab (aspose.app)       │ Lab (colorizer.org)   │ Lab (nixsensor.com) │
├───┼─────────────┼────────────────────────┼───────────────────────┼─────────────────────┤
│ R │ 255, 0, 0   │ 54.291, 64.644, 55.913 │ 53.23, 80.11, 67.22   │ 53.24 80.09 67.20   │
│ G │ 0, 255, 0   │ 87.819, -63.417, 64.79 │ 87.74, -86.18, 83.18  │ 87.73 -86.18 83.18  │
│ B │ 0, 0, 255   │ 29.568, 54.63, -89.624 │ 32.3, 79.2, -107.86   │ 32.30 79.19 -107.86 │
│ C │ 0, 255, 255 │ 90.666, -40.526, -11.9 │ 91.12, -48.08, -14.14 │ 91.11 -48.09 -14.13 │
│ M │ 255, 0, 255 │ 60.169, 74.832, -48.40 │ 60.32, 98.25, -60.84  │ 60.32 98.23 -60.82  │
│ Y │ 255, 255, 0 │ 97.607, -12.6, 74.715  │ 97.14, -21.56, 94.48  │ 97.14 -21.55 94.48  │
└───┴─────────────┴────────────────────────┴───────────────────────┴─────────────────────┘

These results seem somewhat similar in the L channel, but the a and b values are inconsistent from one tool to the other.

Looking at the source from cielab.io, I can see they use the exact same illuminant, observer, and white point as I do.

const STD_ILL_D65: XYZ = { x: 0.950489, y: 1, z: 1.08884 };

So what is going on here? Why can't I find anywhere a standard definition of red, green, blue, etc in CIE Lab using D65 illuminant and 2° observer?

3

There are 3 best solutions below

0
Kel Solaar On

Your question has unfortunately an infinite amount of answers because they are an infinite amount of RGB spaces (thus the infinite quantity of primaries and secondaries).

You need to specify which RGB space your values are encoded with, ideally which gamut, whitepoint and colour component transfer function, Then, with that, you can obtain a single answer.

0
orangeBall On

According to the sRGB specification, the XYZ coordinates of the sRGB primaries are

┌────┬──────┬──────┐
│ x  │ y    │ z    │
├────┼──────┼──────┤
│ 64 │ 0.33 │ 0.03 │
├────┼──────┼──────┤
│ 30 │ 0.6  │ 0.10 │
├────┼──────┼──────┤
│ 15 │ 0.06 │ 0.79 │
└────┴──────┴──────┘

Using the equations from Bruce Lindbloom, we can interpolate these coordinates to the CIE L*a*b* color space.

Assuming L is in range [0, 100], a is in range [-128, 127], and b is in range [-128, 127], the coordinates of sRGB red, green, and blue in CIE L*a*b* using D65 illuminant and 2° observer are

┌─────────────┬──────────────┬─────────────┐
│ 53.24080499 │ 80.09229045  │ 67.20312527 │
├─────────────┼──────────────┼─────────────┤
│ 87.73471268 │ -86.18270839 │ 83.17930383 │
├─────────────┼──────────────┼─────────────┤
│ 32.29701093 │ 79.18725441  │ -107.860155 │
└─────────────┴──────────────┴─────────────┘
0
Wacton On

In this particular case it looks like the nixsensor.com values are correct, which also matches values from other places like www.brucelindbloom.com.

There are 2 issues with aspose.app values:

  1. The LAB values are using D50 illuminant (which is why red L = 54.29)
  2. A & B are percentages out of ~125, so instead of displaying A = 80.81 (for D50 illuminant), they display A = 80.81 / 125 = 64.6%

I'm guessing colorizer.org is just a rounding error.