1、白平衡基础:色温与色彩科学、人眼视觉与色彩恒常性、白平衡的定义与目标
各位同学,咱们今天正式开讲。做图像传感器调试这么多年,我始终觉得白平衡是ISP pipeline里最“玄学”的一环。为什么这么说?因为它不光是数学公式,还牵扯到人眼的感知。你调出来的图,数据上可能完美,但人看着就是不舒服——这种坑,我踩过不止一次。
所以第一章,咱们先把地基打牢。搞懂色温、色彩科学,还有那个神奇的“色彩恒常性”。这些概念懂了,后面调AWB算法你才知道自己在干什么。
1.1 色温:光的“脾气”
说白了,色温就是描述光源颜色的一个物理量。单位是开尔文(K)。
你想想看,一块铁被加热,温度低的时候是暗红色,温度高了变成亮黄色,再高就发蓝了。色温就是这个道理——色温越低,光越偏红黄;色温越高,光越偏蓝。
| 光源场景 | 典型色温 (K) | 视觉感受 |
|---|---|---|
| 蜡烛/篝火 | 1800 - 2000 | 温暖、昏黄 |
| 白炽灯 | 2800 - 3200 | 暖白 |
| 日出/日落 | 3000 - 4000 | 金色 |
| 日光灯/正午阳光 | 5000 - 6500 | 中性白 |
| 阴天/阴影 | 7000 - 9000 | 冷白、偏蓝 |
1.2 色彩科学:从光到数字
人眼能感知颜色,是因为视网膜上有三种视锥细胞——L、M、S,分别对长波(红)、中波(绿)、短波(蓝)敏感。这就是三色刺激理论的基础。
相机传感器呢?它用拜耳阵列(Bayer Pattern)来模拟这个过程。每个像素只能感知一种颜色(R、G或B),然后通过插值算法算出全彩图。
但这里有个关键问题:传感器的光谱响应和人眼不一样。所以我们需要一个色彩校正矩阵(CCM),把传感器捕捉到的RGB值,映射到人眼感知的标准色彩空间(比如sRGB)里。
核心公式(简化版):
// 白平衡增益应用
R_out = R_in * R_gain
G_out = G_in * G_gain // 通常G_gain固定为1.0
B_out = B_in * B_gain
// 色彩校正矩阵
[R_linear] [CCM_00 CCM_01 CCM_02] [R_sensor]
[G_linear] = [CCM_10 CCM_11 CCM_12] * [G_sensor]
[B_linear] [CCM_20 CCM_21 CCM_22] [B_sensor]
嗯,这里要注意:白平衡增益是在CCM之前应用的。顺序搞反了,颜色就全乱了。我见过有新手把顺序弄反,结果怎么调都偏色,最后发现是pipeline顺序错了。
1.3 人眼视觉与色彩恒常性
为什么一张白纸,在暖色灯光下看是白的,在阴天冷光下看还是白的?这就是色彩恒常性。
人脑会自动“扣除”环境光的颜色,还原物体本身的固有颜色。但相机没有这个能力。它拍到的就是物理真实——暖光下白纸就是偏黄的,冷光下就是偏蓝的。
所以,白平衡算法的目标,就是模拟人眼的色彩恒常性。让相机拍出来的白纸,在任何光源下都看起来是白的。
1.4 白平衡的定义与目标
定义很简单:白平衡(White Balance, WB)就是通过调整R、G、B通道的增益,使图像中的中性色(白、灰、黑)不偏色。
但目标呢?不止一个。
- 客观目标: 让中性色在色度图上落在白点附近(比如D65白点)。
- 主观目标: 让图像看起来自然、舒适,符合人眼记忆中的场景颜色。
- 工程目标: 算法要稳定、鲁棒,不能在不同场景间频繁跳变。
这三个目标有时候是冲突的。比如,一个完全客观正确的白平衡,在日落场景下可能让画面显得太“冷”,失去了暖色调的氛围感。这时候,我们就要做取舍——保留一部分色温,让画面更有“味道”。
1.5 本章知识体系
下面这张图,把第一章的核心逻辑串起来了。你对照着看,思路会更清晰。
这张图你看懂了吗?色温是输入,色彩科学是处理工具,色彩恒常性是我们要模仿的目标。三者汇聚到白平衡算法上,最终输出一个“好看”的图像。
好了,第一章就到这里。内容不多,但都是基础中的基础。后面讲灰度世界、色温估计、增益计算,全都依赖这些概念。你先把这些消化掉,咱们下章见。