课程导论:镜头阴影与AWB是什么?为什么重要?
各位同学好,我是这门课的主讲。在图像处理这个行当摸爬滚打了十几年,我见过太多「看起来不错,一放大就露馅」的案例。今天咱们要聊的这两个东西——镜头阴影和AWB(自动白平衡),恰恰是决定一张照片「专不专业」的关键分水岭。
说白了,它们一个是管亮度的均匀性,一个是管颜色的准确性。你想想看,一张照片如果四角发暗、中间偏亮,或者整个画面偏蓝偏黄,哪怕分辨率再高、细节再丰富,观感也会大打折扣。我在项目中遇到过不少这样的场景:硬件选型没问题,传感器参数也调好了,但最终成像就是「脏脏的」。查来查去,根因往往就出在这两个环节。
镜头阴影:为什么四角总是比中间暗?
先说说镜头阴影。它的学名叫Lens Shading,也叫暗角。你拿手机对着白墙拍一张,如果四角明显比中心暗,那就是镜头阴影在作怪。
为什么会这样?原因主要有两个:
- 光学原因:镜头本身是个凸透镜,光线从中心区域直射到传感器,路径短、损失小;而从边缘区域斜射过来,路径长、还要穿过更多镜片边缘,能量自然衰减。这叫余弦四次方定律,是物理规律,躲不开。
- 传感器原因:像素本身对入射角度有要求。边缘光线斜着打进来,微透镜和光电二极管的耦合效率会下降,这叫像素响应非均匀性。
关键指标:一般手机镜头在边缘的亮度可能只有中心的40%~60%。专业相机好一些,但也很难做到95%以上。校正的目标,就是把边缘亮度拉回到中心的90%以上。
嗯,这里要注意:镜头阴影不是「坏」的,它是物理限制。我们要做的不是消除它(也消除不了),而是用算法去补偿它。
AWB白平衡:为什么白纸拍出来是蓝色的?
再来看AWB。你拿手机在室内暖光灯下拍一张白纸,如果照片偏黄,或者在阴天室外拍偏蓝,那就是白平衡没做好。
人眼有「色彩恒常性」——不管光源是暖色还是冷色,我们的大脑会自动把白纸「校正」成白色。但传感器没这个本事,它老老实实地记录进入镜头的光线。所以,AWB的任务就是模拟人眼的色彩恒常性。
我刚开始做ISP的时候,总觉得AWB不就是找个白色区域算个增益嘛,能有多难?直到有一次在混合光源场景下(一半日光灯、一半钨丝灯),算法彻底翻车,画面一半蓝一半黄。从那以后,我再也不敢小看AWB了。
| 光源类型 | 色温(K) | 典型场景 | 未校正偏色 |
|---|---|---|---|
| 烛光 | 1500-2000 | 烛光晚餐 | 严重偏橙红 |
| 钨丝灯 | 2500-3000 | 家庭暖光 | 偏黄 |
| 日光 | 5000-6500 | 正午户外 | 中性(参考基准) |
| 阴天 | 6500-8000 | 多云/阴影 | 偏蓝 |
个人习惯:我调试AWB时,一定会准备三张参考图——白纸、灰卡、肤色卡。白纸看色温,灰卡看中性,肤色卡看人眼最敏感的区域。这三张图能暴露90%的问题。
为什么这两个问题要放在一起讲?
你可能觉得,镜头阴影管亮度,AWB管颜色,两者各管各的,没什么交集。但实际工程中,它们会互相干扰。
举个例子:镜头阴影校正需要知道每个像素的增益系数。但这个增益系数如果算错了,或者在不同色温下不一致(因为镜头的透光率随波长变化),就会导致校正后的图像出现颜色阴影——四角偏绿或偏紫。反过来,AWB如果先做了,但没考虑边缘亮度衰减对颜色统计的影响,也会算出色温偏差。
所以,成熟的ISP pipeline里,这两个模块通常是紧耦合的。先做镜头阴影校正,再做AWB,但AWB的统计信息又会反过来微调阴影校正的参数。这就是实战中容易踩坑的地方。
我曾经踩过的坑:有一款模组,镜头阴影校正单独测没问题,AWB单独测也没问题,但合在一起就偏色。查了两天才发现,是阴影校正的增益表在低色温下不准,导致AWB统计到的R/G/B比例失真。从那以后,我坚持用多色温光源做联合标定。
课程目标与前置知识
这门课的目标很明确:让你能独立完成镜头阴影校正和AWB的算法实现、参数调试和工程落地。不是纸上谈兵,是真正能跑在硬件上的代码。
具体来说,学完这门课,你应该能:
- 理解镜头阴影和AWB的数学模型和物理原理
- 手写一套基于多项式拟合的镜头阴影校正算法
- 实现灰度世界、完美反射、色温估计等多种AWB算法
- 掌握联合调试的方法,解决实际项目中的偏色和暗角问题
- 用Python快速验证算法,再用C++移植到嵌入式平台
前置知识方面,你需要:
- 熟悉Python基础(numpy、opencv的基本操作)
- 了解C++语法(指针、数组、类)
- 对图像格式(Bayer、RGB、YUV)有基本概念
- 一点线性代数的底子(矩阵乘法、最小二乘法)
如果你这些还不太熟,也别慌。每章我都会给出代码注释和数学推导的详细说明。你跟着敲一遍,跑一遍,自然就理解了。
本章知识体系
下面这张图,把镜头阴影和AWB在整个ISP pipeline中的位置,以及它们之间的关系,画了出来。你可以把它当作整门课的地图。
从这张图你能看到,整个流程是串行的:RAW数据进来,先过LSC,再过AWB,最后输出校正后的RGB图像。但中间有一条虚线反馈——AWB的统计结果可以用来微调LSC的增益表。这就是我前面说的「紧耦合」。