我需要从色度图中获取CIE x和y坐标。我尝试了以下操作:取一个 RGB 点,转换为 sRGB,然后绘制它。分别将RGB转换为xyY,并比较结果。
import numpy as np
from colour.plotting import *
import colour
rgb = np.array([100,50,200])
RGB = colour.models.eotf_inverse_sRGB(rgb / 255)
plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB)
所以我正在寻找的坐标在 [0.3, 0.26] 左右。据我了解,要获得它们,我需要将 RGB 转换为 XYZ,并采用 XY 坐标。我找到了以下解决方案:
illuminant_RGB = np.array([0.31270, 0.32900])
illuminant_XYZ = np.array([0.34570, 0.35850])
chromatic_adaptation_transform = 'Bradford'
RGB_to_XYZ_matrix = np.array([[0.41240000, 0.35760000, 0.18050000],
[0.21260000, 0.71520000, 0.07220000],
[0.01930000, 0.11920000, 0.95050000]])
result = colour.RGB_to_XYZ(rgb/255., illuminant_RGB, illuminant_XYZ, RGB_to_XYZ_matrix, chromatic_adaptation_transform)
colour.XYZ_to_xyY(result)
然而,这会产生
[ 0.29439225, 0.22595116, 0.27536142]
,这是不正确的。
那些
xyY
值是准确的:
RGB
的线性
[100, 50, 200] / 255
值 =
(0.39, 0.20, 0.78)
XYZ
,其中RGB 白点 (0.31270, 0.32900) 和 XYZ 白点 (0.34570, 0.35850) =
(0.3587, 0.2754, 0.5846)
xyY
=
(0.2944, 0.2260, 0.2754)
(0.3, 0.26)
- 您期望的值 - 以及您选择的线性 RGB 输入
0.2754
的相对亮度,线性 RGB 值为
(0.37 0.23 0.45)
,这与您输入的
(0.39, 0.20, 0.78)
有很大不同。