将 RGB 转换为 xy

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

我需要从色度图中获取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)

并获得以下信息:enter image description here

所以我正在寻找的坐标在 [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]
,这是不正确的。

python cielab
1个回答
0
投票

那些

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)
 有很大不同。

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