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 被去掉了。这个图看起来像一只“舌头”或“马蹄形”,边界上的点代表单色光(光谱色),内部是混合色。
色域,就是某个设备或标准能覆盖的颜色范围。在色度图上,色域通常用一个三角形来表示。三角形的三个顶点分别是红、绿、蓝三原色的坐标。
从这张图可以看得很清楚:sRGB 的色域最小,Adobe RGB 和 DCI-P3 更大。为什么?因为 sRGB 诞生时是为了适配 CRT 显示器,那时候的荧光粉只能覆盖这么大范围。现在手机屏幕动不动就宣称 100% DCI-P3 覆盖,但如果你做 AWB 调试,最终输出还是要映射回 sRGB,否则在普通屏幕上会过饱和。
色域映射的坑:
我做过一个项目,传感器原生色域比 sRGB 大很多。一开始我们直接做 CCM 转到 sRGB,结果发现某些高饱和颜色(比如深蓝色)被“削波”了——颜色细节丢失,变成一片死蓝。后来我们引入了色域映射算法,用感知优先的方式把超出 sRGB 的颜色压缩回来,而不是简单裁剪。
3.4 色彩空间转换流程
在实际的 AWB 算法中,色彩空间转换是一个标准流程。我整理了一个典型的处理链路:
- Raw 域:传感器输出的 Bayer 格式数据,此时还是线性 RGB,没有做任何色彩处理。
- 白平衡增益:在 Raw 域对 R、G、B 通道分别乘以增益系数,校正色温偏差。
- 色彩校正矩阵(CCM):把传感器 RGB 转到标准 RGB(如 sRGB)。这一步是 3x3 矩阵乘法,用来补偿传感器光谱响应和人眼之间的差异。
- 伽马校正:把线性 RGB 转到 sRGB 伽马空间,适配显示设备。
- 可选转换:如果需要做色彩分析或评估,再转到 CIE XYZ 或 CIE Lab。
我的习惯:
调试时,我会在 Raw 域、sRGB 域和 Lab 域同时观察数据。Raw 域看白平衡增益是否合理,sRGB 域看最终视觉效果,Lab 域看色偏的量化指标。三个空间互相印证,不容易漏掉问题。
最后说一句:色彩空间不是越“大”越好。sRGB 虽然色域小,但它是互联网的通用语言。你做 AWB 调试,最终用户看到的是 sRGB 下的效果。所以,理解 sRGB 的约束,比追求广色域更重要。