一、镜头阴影校正概述

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 校正基本原理

校正的思路其实很简单:既然四角信号弱,那就给它多加点增益。

具体做法是:

  1. 拍一张均匀光照下的灰卡或白墙
  2. 统计每个像素位置的亮度值
  3. 以画面中心为基准,计算每个位置的增益系数
  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 三个通道分别存一套增益网格

这样既节省存储,又能保证校正精度。

下面这张图展示了镜头阴影校正的整体流程:

镜头阴影校正流程 原始图像 增益表 (Gain Grid) 像素 × 增益 校正后图像 关键点: 增益表通过标定获得,R/G/B 三通道独立存储,网格间双线性插值

嗯,这里要注意一点:增益表不是一成不变的。不同色温下,色彩阴影的表现不一样。所以实际产品中,通常会存多组增益表,对应不同色温,然后根据当前色温做切换或插值。

我做过一个项目,只存了一组 D65 下的增益表。结果用户拿到室内暖光灯下拍照,四角偏色严重。后来改成三组增益表(D65、A 光源、TL84),问题才解决。

校正效果评估指标:

  • 四角亮度与中心亮度比值 > 90%
  • R/G/B 通道在四角的比值偏差 < 3%
  • 校正后无明显色差或噪声放大

镜头阴影校正,说白了就是给图像边缘「补光」。但补多少、怎么补、补了之后会不会引入新问题,这些才是调试的难点。后面几章我会详细讲具体的调试方法和参数配置。