色温基础:黑体辐射与色温

做AWB算法,第一个绕不开的概念就是色温。

很多人觉得色温就是「暖光偏黄,冷光偏蓝」,这个说法没错,但太粗糙了。你想想看,如果只是这样,那相机直接根据画面里红蓝比例做个判断不就行了?现实远没那么简单。

我个人习惯把色温理解成「理想黑体被加热到某个温度时发出的光的颜色」。这个定义听起来有点绕,咱们拆开看。

黑体辐射到底在说什么?

黑体是一个理想模型。它吸收所有入射光,不反射。当你加热它时,它只靠温度发光。

温度低的时候,比如 1000K,它发红光。温度升高到 3000K,变成橙黄。到 5500K 左右,接近白光。再往上到 8000K,就偏蓝了。

这个颜色变化是连续的,而且有严格的物理公式——普朗克公式。我在项目中遇到过有人直接用查表法做色温估计,结果在混合光源下全崩了。原因就是没理解黑体辐射的连续性,硬把离散的色温点当成了标准。

核心要点:色温不是「几个固定值」,而是一条连续的曲线。AWB算法要处理的是这条曲线上的任意一点,以及不在曲线上的点(非黑体辐射光源)。

色温与RGB通道的关系

好,现在咱们把色温和RGB联系起来。

不同色温的光源,照射到白色物体上,反射进传感器的RGB比例是不一样的。

  • 低色温(2000K-3500K):红光分量多,蓝光分量少。R/G > 1,B/G < 1。
  • 中等色温(4500K-5500K):RGB比例接近1:1:1。这就是我们常说的「标准白光」。
  • 高色温(6000K-8000K):蓝光分量多,红光分量少。R/G < 1,B/G > 1。

说白了,色温估计的本质就是根据图像中R、G、B通道的统计关系,反推出当前光源的色温值。

我的经验:实际工程中不要直接用R、B的值做判断。我建议用R/G和B/G的比值。这样可以消除曝光差异和传感器增益变化带来的干扰。这个比值对,色温估计就稳了一半。

常见光源色温表

这张表是我这些年整理下来的。每次做新平台的AWB调试,我都会先对着这张表标定一遍。

光源类型 色温范围 (K) 典型场景 R/G 趋势 B/G 趋势
烛光 1500 - 2000 烛光晚餐、暗光环境 极高 极低
白炽灯 2500 - 3000 家庭照明、老式台灯 高 低
卤素灯 3000 - 3500 车灯、摄影灯 偏高 偏低
荧光灯 (暖白) 3500 - 4500 办公室、商场 中等 中等
日光 (正午) 5000 - 5500 户外晴天 接近1 接近1
闪光灯 5500 - 6000 相机内置闪光 接近1 接近1
阴天/阴影 6500 - 7500 阴天户外、树荫下 低 高
蓝天 (无云) 8000 - 10000 高原、雪地阴影 极低 极高

注意:荧光灯和LED灯通常不是黑体辐射光源。它们的频谱有尖峰,色温只是近似值。我曾经在调试一款手机摄像头时,遇到荧光灯下白平衡怎么调都偏绿。后来发现是荧光灯的绿色谱线峰值太强,单纯用色温模型根本搞不定。最后不得不加了荧光灯检测分支。

色温估计的核心逻辑

理解了色温和RGB的关系,咱们就可以画出AWB色温估计的核心逻辑图了。

AWB色温估计核心逻辑 输入图像 (RAW) 统计 R/G, B/G 比值 判断是否在黑体辐射曲线上? 是 → 直接映射色温 否 → 进入非黑体补偿 输出色温估计值 说明 非黑体光源需要额外补偿算法

嗯,这里要注意。很多刚入行的工程师只做了「是」分支,结果在荧光灯和LED灯下全翻车。我建议从一开始就把非黑体补偿的接口留好,后面调试会省很多事。

小结

色温不是玄学,它是可以用物理模型精确描述的。理解黑体辐射曲线,掌握RGB比值与色温的对应关系,再配合常见光源色温表,你就有了做AWB的基础工具。

下一块内容,咱们会基于这些基础,开始写真正的色温估计算法。