3、色彩空间基础:RGB与sRGB色彩空间、CIE XYZ与Lab色彩空间、色度图与色域

做白平衡调试,说白了就是在跟颜色打交道。但颜色这东西,不同设备、不同标准下定义完全不一样。你想想看,同一个红色,在手机屏幕上、在印刷品上、在电影院投影上,看起来能一样吗?

所以,我们得先搞清楚颜色是怎么被“量化”的。这就是色彩空间要做的事。我个人习惯把色彩空间理解成一把“颜色的尺子”,不同尺子量出来的结果,得知道怎么换算。

3.1 RGB与sRGB色彩空间

RGB 是最常见的色彩模型。红、绿、蓝三个通道,每个通道 0-255,组合出 1600 多万种颜色。听起来挺多,对吧?但它的缺陷也很明显——它跟设备强相关。

我在项目中遇到过一个问题:同一张图,在 A 厂商的屏幕上饱和度过高,在 B 厂商的屏幕上又发灰。原因很简单,两个屏幕的 RGB 定义不一样。这就是为什么我们需要一个标准化的 RGB 空间——sRGB。

核心区别:

  • RGB:设备相关,没有标准白点、伽马值。不同设备看到的颜色不同。
  • sRGB:由微软和惠普在 1996 年制定,定义了标准白点(D65)、伽马曲线(≈2.2)和色域。它是互联网和消费电子的事实标准。

sRGB 的伽马校正很关键。人眼对暗部变化更敏感,对亮部变化不敏感。sRGB 用伽马曲线把 8bit 的量化资源更多地分配给暗部,这样看起来更自然。嗯,这里要注意:sRGB 的伽马值不是严格的 2.2,而是一个分段函数,在暗部有一段线性区,防止噪声被过度放大。

调试小技巧:

做 AWB 调试时,我建议始终在 sRGB 空间下观察最终效果。因为绝大多数用户屏幕都是 sRGB 的。如果你在广色域显示器上调得“刚刚好”,换到普通 sRGB 屏上可能就过饱和了。

3.2 CIE XYZ与Lab色彩空间

sRGB 虽然标准化了,但它还是基于显示设备的。科学家们想要一个与设备无关的色彩空间,于是就有了 CIE XYZ。

CIE XYZ 是 1931 年由国际照明委员会提出的。它基于人眼对颜色的视觉感知实验,用三个假想的原色 X、Y、Z 来表示所有可见光。其中 Y 代表亮度,X 和 Z 代表色度信息。

说白了,XYZ 是一个“数学上的颜色”,不依赖任何显示器或打印机。它是所有色彩空间之间转换的桥梁。

色彩空间 设备相关性 主要用途 我的经验
RGB 强相关 显示、采集 不同传感器 RGB 响应不同,需要标定
sRGB 标准相关 互联网、消费电子 AWB 最终输出目标空间
CIE XYZ 无关 色彩科学、转换桥梁 做色彩矩阵计算时经常用到
CIE Lab 无关 色彩差异评估 我最喜欢用它来量化 AWB 偏差

说到 CIE Lab,我得好好聊聊。Lab 空间的设计非常巧妙——它把颜色分成了三个维度:L(亮度)、a(红绿轴)、b(黄蓝轴)。这个空间最大的优点是感知均匀性。什么意思?就是在 Lab 空间里,两个颜色之间的欧氏距离,大致等于人眼感觉到的颜色差异。

我曾经用 Lab 空间做过一个 AWB 评估工具。把拍摄的灰卡颜色转换到 Lab 空间,计算它和标准灰(L=50, a=0, b=0)的 ΔE 值。ΔE 小于 1 人眼基本看不出差异,小于 3 算合格,大于 5 就明显偏色了。这个指标比肉眼判断靠谱得多。

避坑指南:

我曾经在 Lab 空间做色温估计时踩过一个坑:Lab 空间是基于人眼视觉的,但 CMOS 传感器的光谱响应和人眼不一样。直接从 Raw 图转到 Lab 做分析,结果会偏差很大。正确的做法是:先做色彩校正矩阵(CCM),把传感器 RGB 转到 sRGB,再转到 Lab。

3.3 色度图与色域

色度图,就是 CIE 1931 xy 色度图。它把 XYZ 空间投影到二维平面上,x 和 y 代表色度,亮度 Y 被去掉了。这个图看起来像一只“舌头”或“马蹄形”,边界上的点代表单色光(光谱色),内部是混合色。

色域,就是某个设备或标准能覆盖的颜色范围。在色度图上,色域通常用一个三角形来表示。三角形的三个顶点分别是红、绿、蓝三原色的坐标。

常见色域在 CIE 1931 色度图上的对比 sRGB Adobe RGB DCI-P3 D65 sRGB Adobe RGB DCI-P3 D65 白点 色域越大,能表示的颜色越丰富 AWB 调试需关注目标色域边界

从这张图可以看得很清楚:sRGB 的色域最小,Adobe RGB 和 DCI-P3 更大。为什么?因为 sRGB 诞生时是为了适配 CRT 显示器,那时候的荧光粉只能覆盖这么大范围。现在手机屏幕动不动就宣称 100% DCI-P3 覆盖,但如果你做 AWB 调试,最终输出还是要映射回 sRGB,否则在普通屏幕上会过饱和。

色域映射的坑:

我做过一个项目,传感器原生色域比 sRGB 大很多。一开始我们直接做 CCM 转到 sRGB,结果发现某些高饱和颜色(比如深蓝色)被“削波”了——颜色细节丢失,变成一片死蓝。后来我们引入了色域映射算法,用感知优先的方式把超出 sRGB 的颜色压缩回来,而不是简单裁剪。

3.4 色彩空间转换流程

在实际的 AWB 算法中,色彩空间转换是一个标准流程。我整理了一个典型的处理链路:

  1. Raw 域:传感器输出的 Bayer 格式数据,此时还是线性 RGB,没有做任何色彩处理。
  2. 白平衡增益:在 Raw 域对 R、G、B 通道分别乘以增益系数,校正色温偏差。
  3. 色彩校正矩阵(CCM):把传感器 RGB 转到标准 RGB(如 sRGB)。这一步是 3x3 矩阵乘法,用来补偿传感器光谱响应和人眼之间的差异。
  4. 伽马校正:把线性 RGB 转到 sRGB 伽马空间,适配显示设备。
  5. 可选转换:如果需要做色彩分析或评估,再转到 CIE XYZ 或 CIE Lab。

我的习惯:

调试时,我会在 Raw 域、sRGB 域和 Lab 域同时观察数据。Raw 域看白平衡增益是否合理,sRGB 域看最终视觉效果,Lab 域看色偏的量化指标。三个空间互相印证,不容易漏掉问题。

最后说一句:色彩空间不是越“大”越好。sRGB 虽然色域小,但它是互联网的通用语言。你做 AWB 调试,最终用户看到的是 sRGB 下的效果。所以,理解 sRGB 的约束,比追求广色域更重要。