Color Spaces sRGB 和 CIE-XYZ

技术笔记

RGB与CIE-XYZ之间的转换公式

将 RGB 转换为 CIE XYZ 的公式 | 描述颜色一直是一项复杂的挑战。 相机通常以通用的 sRGB 色彩空间提供图像数据,因此,如果您收到的任何图像未附带额外信息,该图像很可能以 sRGB 色彩空间呈现。其他色彩空间(例如与人眼视觉相关的色彩空间)则用于色彩分析。 鉴于此类分析是常见任务,我们制作了一份色彩速查表,其中简要概述了 sRGB 和 CIE-XYZ 以及它们的转换公式。sRGB sRGB 中的“s”代表“标准(standard)”,它是色彩空间中的最低公约数。 它于 20 世纪 90 年代开发,旨在为当时的显示器和打印机提供一个通用且实用的色彩空间。尽管目前存在许多不同且覆盖范围更广的色彩空间,但 sRGB 仍是 RGB 图像数据的事实标准。 CIE-XYZ CIE(Commission Internationale de l'Illumination)即国际照明委员会,该委员会基于人眼可感知到的颜色建立了色彩空间。XYZ 不包含负数,而是使用三刺激值来定义人眼可见的色彩空间。 X 代表由锥细胞响应曲线构成的非负线性组合。Y 代表 Luminance,而 Z 则定义为几乎等同于蓝色。如何转换 由于我们处理的是定义明确的色彩空间,因此可以明确地将一种色彩空间转换为另一种。 请参考以下公式以帮助您入门:sRGB 到 XYZ sRGB 到 sRGB' - 对 sRGB 数据进行线性化 来自相机的 sRGB 数据(尤其是 8 位数据)通常是非线性的,呈现出所谓的 Gamma 函数。 我们将 sRGB 定义为应用了 Gamma 函数的原始相机数据,将 sRGB' 定义为线性化后的表示形式。请注意,我们首先将 sRGB 数据缩放至 [0...1] 范围,因此对于 8 位数据,我们将所有值除以 255。 以下计算对 R、G 和 B 这三个通道均适用,我们用通用符号 V 和 V' 表示。sRGB' 到 XYZ——应用变换矩阵 A:一个标准化的 3×3 矩阵描述了如何将 sRGB' 数据转换为 CIE-XYZ 数据。 对于那些使用不支持轻松进行矩阵计算的工具(例如 MS-Excel)进行实现的人,这里提供了一个将 Y 作为单个方程计算的简要说明。附注:当我们说 Y 代表亮度时,可以看到绿色贡献最大,而蓝色仅产生微弱影响。 另附说明:如果您将自己的结果与使用 ICC 配置文件(例如 Mathworks Matlab 中的“应用”功能)的工具所得结果进行比较,请注意:此处展示的转换结果生成的 CIE-XYZ 数据采用 sRGB 定义中规定的 D65 参考白点。 ICC 配置文件始终使用 D50 作为参考白点,在从 XYZ 转换为 LAB 或与这些结果进行比较时,请务必注意这一点。 XYZ 到 sRGB 若要进行反向计算,公式同样简单明了:XYZ 到 sRGB'——应用变换矩阵 sRGB' 到 sRGB——应用 Gamma 值。与之前一样,V 和 V' 分别代表 sRGB 和 sRGB' 的三个通道,该公式适用于每个通道。

描述颜色一直是一项复杂的挑战。相机提供的图像数据通常采用通用的 sRGB 色彩空间,因此,如果您收到的图像没有附加信息,那么它很可能就是以 sRGB 色彩空间表示的。其他色彩空间(例如与人眼视觉相关的色彩空间)则用于色彩分析。

鉴于此类分析是常见任务,我们制作了一份Color速查表,其中简要概述了sRGB和CIE-XYZ,并提供了它们之间的转换公式。

sRGB

sRGB 中的“s”代表“标准”,它是色彩空间中的“最小公倍数”。 它于 20 世纪 90 年代开发,旨在为当时的显示器和打印机提供一个通用且可用的色彩空间。尽管目前有许多不同且更宽广的色彩空间,但 sRGB 仍然是 RGB 图像数据的事实标准。

CIE-XYZ

CIE(Commission Internationale de l'Illumination)是国际照明委员会的英文缩写,该委员会基于人眼可感知到的颜色建立了色彩空间。XYZ 不包含负数,而是使用三刺激值来定义人眼可见的色彩空间。 X 代表由锥细胞响应曲线构成的非负线性组合。Y 代表 Luminance,而 Z 则被定义为几乎等同于蓝色。

如何转换

由于我们处理的是定义明确的色彩空间,因此可以明确地在不同的色彩空间之间进行转换。请参考以下公式作为入门指南:

sRGB 到 XYZ

sRGB 到 sRGB' —— 对 sRGB 数据进行线性化处理

来自相机的 sRGB 数据(尤其是 8 位数据)通常是非线性的,呈现所谓的 Gamma 函数。我们将 sRGB 定义为应用了 Gamma 函数的原始相机数据,而 sRGB' 则定义为线性化的表示形式。

请注意,我们首先将 sRGB 数据缩放至 [0...1] 范围,因此对于 8 位数据,需将所有值除以 255。

以下计算对 R、G 和 B 三个通道均适用,我们用通用符号 V 和 V' 表示。

将 sRGB' 转换为 XYZ —— 应用变换矩阵
A一个标准化的 3×3 矩阵描述了如何将 sRGB' 数据转换为 CIE-XYZ 数据。

对于那些使用不支持矩阵计算的工具(例如 MS-Excel)进行实现的人,这里提供了一个用于计算 Y 的简单公式,以供参考。

附注:当我们说 Y 代表亮度时,可以看出绿色贡献最大,而蓝色仅产生微弱影响。


另附说明:如果您将您的结果与使用 ICC 配置文件(例如 Mathworks Matlab 中的应用表单)的工具所得结果进行比较,请注意:此处展示的转换结果生成的 CIE-XYZ 数据采用 D65 作为参考白点,这符合 sRGB 定义中的规定。 ICC 配置文件始终使用 D50 作为参考白点,在从 XYZ 转换为 LAB 时,或与这些结果进行比较时,请务必注意这一点。

XYZ 到 sRGB

若要进行反向计算,公式同样简单明了:


XYZ 到 sRGB' — 应用变换矩阵

sRGB' 到 sRGB — 应用 Gamma 校正

与之前一样,V 和 V' 分别代表 sRGB 和 sRGB' 的三个通道,该公式适用于每个通道。

准备好实现您的愿景了吗?

需要帮助吗?

图像质量测试?

Phone (DE): +49 2273 99 99 1-0
Phone (USA): +1 408 386 1496
Phone (China): +86 158 8961 9096
Office Hours: Mon–Fri, 9–5 PM (CET)