一、镜头阴影校正概述
1.1 什么是镜头阴影
镜头阴影,说白了就是拍出来的照片四角发暗、中间亮。你拿手机对着白墙拍一张,如果四角明显比中心暗,那就是镜头阴影。
我刚开始做图像调试那会儿,第一次看到这个现象还以为是传感器坏了。后来才知道,这其实是光学系统的物理限制,几乎每个镜头都有,只是程度不同而已。
镜头阴影的核心表现:
- 画面中心亮度正常,四角逐渐变暗
- 均匀光照下,四角亮度可能只有中心的 50%-80%
- 严重时肉眼可见明显的暗角
1.2 产生原因
为什么会这样?主要有两个原因。
光学特性
镜头本身就是一个光学系统。光线从镜头中心通过时,路径最短,能量损失最小。到了边缘,光线要走更长的路,还要穿过更多镜片边缘,自然就衰减了。
我记得有个项目,用了大光圈镜头,四角阴影特别严重。当时光学工程师跟我说,这是物理定律,没法完全消除,只能靠算法补偿。
CRA 不匹配
CRA(Chief Ray Angle,主光线角)是个关键参数。镜头出射的光线有个角度,传感器像素也有个最佳接收角度。这两个角度对不上,边缘像素就收不到足够的光。
我遇到过一款模组,镜头 CRA 是 28 度,传感器最佳 CRA 只有 22 度。结果拍出来的照片,四角不仅暗,还偏色。这就是典型的 CRA 不匹配。
| 原因类型 | 本质 | 典型表现 |
|---|---|---|
| 光学特性 | 光路衰减 | 四角均匀变暗 |
| CRA 不匹配 | 角度失配 | 四角偏色 + 变暗 |
1.3 阴影类型
亮度阴影
就是单纯的亮度不均匀。R、G、B 三个通道衰减比例差不多,画面只是四角暗,颜色没变。这种相对好处理,用增益补偿就行。
色彩阴影
这个就麻烦了。不同波长的光在镜头边缘衰减不一样,红色衰减多,蓝色衰减少,或者反过来。结果四角不仅暗,还偏色。
我调过一款广角镜头,四角偏紫红色特别明显。后来查数据发现,红色通道在边缘的响应比蓝色低了将近 15%。这就是典型的色彩阴影。
我的经验:色彩阴影比亮度阴影难调得多。亮度阴影可以统一补偿,色彩阴影需要分通道单独处理,而且不同色温下表现还不一样。
1.4 校正基本原理
校正的思路其实很简单:既然四角信号弱,那就给它多加点增益。
具体做法是:
- 拍一张均匀光照下的灰卡或白墙
- 统计每个像素位置的亮度值
- 以画面中心为基准,计算每个位置的增益系数
- 实际拍照时,对每个像素乘以对应的增益
用公式表示就是:
I_corrected(x, y) = I_raw(x, y) × Gain(x, y)
其中 Gain(x, y) 是预先计算好的增益表
中心区域 Gain ≈ 1.0
边缘区域 Gain > 1.0
注意:增益不能无限放大。边缘增益太大,会把噪声也放大。我见过有人把边缘增益调到 2.0 以上,结果四角全是噪点。一般建议增益上限控制在 1.5-1.8 之间。
实际工程中,我们不会为每个像素单独存一个增益值,那样太占内存。通常的做法是:
- 用网格方式采样,比如 16×16 或 32×32 的网格
- 网格点之间用双线性插值计算
- R、G、B 三个通道分别存一套增益网格
这样既节省存储,又能保证校正精度。
下面这张图展示了镜头阴影校正的整体流程:
嗯,这里要注意一点:增益表不是一成不变的。不同色温下,色彩阴影的表现不一样。所以实际产品中,通常会存多组增益表,对应不同色温,然后根据当前色温做切换或插值。
我做过一个项目,只存了一组 D65 下的增益表。结果用户拿到室内暖光灯下拍照,四角偏色严重。后来改成三组增益表(D65、A 光源、TL84),问题才解决。
校正效果评估指标:
- 四角亮度与中心亮度比值 > 90%
- R/G/B 通道在四角的比值偏差 < 3%
- 校正后无明显色差或噪声放大
镜头阴影校正,说白了就是给图像边缘「补光」。但补多少、怎么补、补了之后会不会引入新问题,这些才是调试的难点。后面几章我会详细讲具体的调试方法和参数配置。