Saturday, April 19, 2008

Measuring color difference

This blog entry is incomplete. Equations to get XYZ is wrong.

The other day I was asked how we could get the "difference" of two colors.

RGB value in a CG software is not proportional to what the monitor outputs due to gamma. So we will first correct it. We assume the monitor setting is sRGB. According to sRGB official document (IEC 61966-2-1) we will convert sRGB to XYZ,

We can convert an sRGB value to a linear-RGB value by
Wrong. Should use sRGB->linear-RGB equation.
Then convert it to XYZ.
Wrong. Should use linearRGB->XYZ equation.
if one ore more of R_liner, G_liner, B_linear value is less than 0.0031308, use
Wrong. Should use linearRGB->XYZ equation when linear value is small.instead only for that color(s).

We now got the monitor independent color, i.e. the exact color we can see.
Still it is known that the distance of two colors:doesn't represent the perceptual color difference. L*a*b* color space was invented for that purpose. (Like XYZ, a set of three values L*, a* and b* represent one color)indicates the perceptual color difference. So we will convert XYZ to L*a*b*.
To take color adaptation into account, L*a*b* requires "white point", i.e. ambient light color = your light on the ceiling. To adjust the XYZ colorwhere
  • A: (Xn, Yn, Zn) = (109.851, 100, 35.582)
  • B : (Xn, Yn, Zn) = (99.095, 100, 98.072)
  • C : (Xn, Yn, Zn) = (98.072, 100, 118.225)
  • D65: (Xn, Yn, Zn) = (98.072, 100, 108.892)
D65 will be good unless you are working in the sun or at a night club.
These are values I found on the net. I still cannot find the accurate way to calculate the value.
Then depending on the value of X', Y', or Z', again if one of more value of them is larger than 0.008856, useor if it is smaller, usefinally,Now you can use above (color diff) equation to get the difference of color.

Basically it is the same as what is written in Wikipedia (at least this moment), except that the Matrix in sRGB->XYZ calculation is a little bit different.

References: (japanese)

No comments: