我正在尝试将 RGB 颜色转换为 CIEXYZ ,最终想将它们转换为CIELAB但是我遇到了 java.awt的问题.color.ColorSpace.CS_CIEXYZ 色彩空间。
在线使用计算器我得到的值与Color Space提供的值不同
代码:
5.1.*
输出:
RGB:[255.0,255.0,255.0]
CIEXYZ:[0.95254517,0.98773193,0.81500244]
在线计算器:
http://www.easyrgb.com/index.php?X=CALC
XYZ = 95.050 100.000 108.900
我有什么东西可以忽视或做错吗?
答案 0 :(得分:1)
您看到的是Java类根据 CIE标准光源D50 进行色彩调整的结果。
使用Colour,例如,在保持 sRGB colourspace光源( CIE标准光源D65 )的同时转换为三刺激值:
import colour
sRGB = np.array([255., 255., 255.])
sRGB /= 255.
# Default conversion from *sRGB* colourspace
# to *CIE XYZ* tristimulus values.
# It should return *CIE Standard Illuminant D65*
# tristimulus values using the above array.
print(colour.sRGB_to_XYZ(sRGB))
[0.95042854 1. 1.08890037]
现在进行相同的转换但是按照色彩适应 CIE标准光源D50 :
# Conversion to *CIE XYZ tristimulus* values but chromatically adapting
# to *CIE Standard Illuminant D50*.
D50 = colour.ILLUMINANTS['cie_2_1931']['D50']
print(colour.sRGB_to_XYZ(sRGB, D50))
[0.96421199 1. 0.82518828]
通常将光源标准化为 Luminance ,这就是我们的计算中 Y 等于 1 的原因,我没有调查为什么Java类不返回规范化的值,但快速检查表明它的计算几乎都在点上:
D50 = colour.ILLUMINANTS['cie_2_1931']['D50']
print(colour.sRGB_to_XYZ(sRGB, D50) * 0.98773193)
颜色:[0.95238297 0.98773193 0.81506482]
Java:[0.95254517 0.98773193 0.81500244]