如何将 CIE xy 值转换为灰度值

问题描述

有没有办法 CIE chromaticity coordinates 灰度值(0 到 255)?

ImageJ、R 或 Python 中的任何现有实现? 还是公式?

这是取自here的表格。

enter image description here

解决方法

因为 x,y 色度坐标描述了我们对颜色的感知,并且是通过实验获得的,所以理解它们的最好方法是通过 CIE 的数据表,目前可以在这里找到:

http://files.cie.co.at/204.xls

Wikipedia 告诉您很多关于这些数据的信息,并提供分析近似值。

x,y 坐标指定一种颜色,没有关联的亮度(~brightness)。您可以通过选择任何值来添加此亮度 Y。您现在在 Yxy 颜色空间中有一种颜色(例如 0.5)。将其转换为 XYZ 三元组:

X = Y / y * x
Z = Y / y * (1-x-y)

最后,使用此矩阵乘法将 XYZ 转换为 RGB:

| R |   |  0.41847,-0.15866,-0.082835 |  | X |
| G | = | -0.091169,0.25243,0.015708 |  | Y |
| B |   |  0.00092090,-0.0025498,0.17860  |  | Z |

方程来源:Wikipedia

如果结果值由于值太大而超出 RGB 色域,请选择较小的 Y 值,这相当于仅按比例缩小您的 RGB 值(所有三个值均等)。如果因为 x,y 坐标不能由 RGB 原色表示而出现负值,那么您必须找到可以的坐标近似值。这等效于找到落在色域内的最近的 RGB 三元组。一种简单的方法是将任何负值设置为 0。