问题描述
有没有办法 CIE chromaticity coordinates 灰度值(0 到 255)?
ImageJ、R 或 Python 中的任何现有实现? 还是公式?
这是取自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。