我想编写代码来根据 LED 驱动器 R、G、B 输出值预测 CIE XYZ

问题描述 投票:0回答:1

我正在制作自动白平衡校准应用程序。 我有一个色度计和 api。所以我的应用程序可以测量 CIExyY 和 CIEXYZ。 我的应用程序可以设置我的设备 LED 面板的 R、G、B 输出值。

我设置了R、G、B值组合并测量了CIEXYZ 3次。 然后我评估了跟随矩阵。

matrix

我认为一旦我评估了矩阵,我就可以用 R、G、B 输出值计算 CIEXYZ。

但这不是正确的值。

R、G、B输出值为0~1023。 0并不意味着0输出。 0~1023只是级别。

colors led color-space
1个回答
0
投票

使用颜色,给定表示为 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 呈线性行为,但几乎可以肯定情况并非如此!

© www.soinside.com 2019 - 2024. All rights reserved.