我正在制作自动白平衡校准应用程序。 我有一个色度计和 api。所以我的应用程序可以测量 CIExyY 和 CIEXYZ。 我的应用程序可以设置我的设备 LED 面板的 R、G、B 输出值。
我设置了R、G、B值组合并测量了CIEXYZ 3次。 然后我评估了跟随矩阵。
我认为一旦我评估了矩阵,我就可以用 R、G、B 输出值计算 CIEXYZ。
但这不是正确的值。
R、G、B输出值为0~1023。 0并不意味着0输出。 0~1023只是级别。
使用颜色,给定表示为 CIE XYZ 三刺激值的原色和白点,您可以计算从 LED 色彩空间转换为 CIE XYZ 的归一化主矩阵,如下所示:
import colour
import numpy as np
XYZ_PRIMARIES = np.array(
[
[2.12500000, 1.00000000, -0.00000000],
[0.38405797, 1.00000000, 0.06521739],
[2.50000000, 1.00000000, 13.16666667],
]
)
XYZ_WHITEPOINT = np.array([0.89458689, 1.00000000, 0.95441595])
NPM = colour.normalised_primary_matrix(
colour.XYZ_to_xy(XYZ_PRIMARIES), colour.XYZ_to_xy(XYZ_WHITEPOINT)
)
print(NPM)
print(np.linalg.inv(NPM))
[[ 4.45169812e-01 2.77134409e-01 1.72282669e-01]
[ 2.09491676e-01 7.21595256e-01 6.89130676e-02]
[ -3.63410128e-17 4.70605593e-02 9.07355391e-01]]
[[ 2.72539405 -1.01800301 -0.4401632 ]
[-0.79516802 1.68973205 0.02264719]
[ 0.04124189 -0.08763902 1.10092938]]
您还可以创建一个新的 RGB 颜色空间,它允许您转换为其他已知的颜色空间:
RGB_COLOURSPACE_LED = colour.RGB_Colourspace(
"LED", colour.XYZ_to_xy(XYZ_PRIMARIES), colour.XYZ_to_xy(XYZ_WHITEPOINT)
)
print(RGB_COLOURSPACE_LED)
print(
colour.matrix_RGB_to_RGB(RGB_COLOURSPACE_LED, colour.models.RGB_COLOURSPACE_BT2020)
)
[[ 7.05392504e-01 2.49107517e-01 4.54999792e-02]
[ 4.04429548e-02 9.47423997e-01 1.21330485e-02]
[ -5.83382089e-04 2.69551875e-02 9.73628195e-01]]
请注意,这假设 LED 呈线性行为,但几乎可以肯定情况并非如此!