4. 镜头阴影校正 (LSC):从原理到实战

镜头阴影校正,简称 LSC。说白了,就是解决照片四周发暗、中心过亮的问题。你拿手机对着白墙拍一张,如果四角明显比中心暗,那就是镜头阴影。

我刚开始做 ISP 时,觉得这模块挺简单——不就是乘个增益嘛。后来踩了不少坑才发现,LSC 的标定和调试,细节多得很。

4.1 LSC 原理:为什么会有阴影?

镜头阴影分两种:

  • 亮度阴影(Luma Shading):镜头边缘进光量少,物理上就暗。这是光学定律,躲不开。
  • 色彩阴影(Color Shading):不同波长光线通过镜头后折射角度不同,导致 R/G/B 通道衰减不一致。结果就是四角偏色,比如偏绿或偏紫。

校正思路很简单:对每个像素位置,乘一个补偿增益。中心区域增益接近 1.0,边缘区域增益大于 1.0。R、G、B 三个通道分别算,这样既能提亮又能纠偏。

核心公式(简化版):

I_out(x, y) = I_in(x, y) × Gain(x, y)

其中 Gain(x, y) 由标定数据查表或多项式拟合得到。

4.2 LSC 标定流程:一步都不能省

标定是 LSC 的根基。标定不准,后面调死也没用。我见过团队用廉价灯箱标定,结果换到户外全崩了。

标准流程如下:

  1. 准备均匀光源:积分球或高均匀度灯箱。不均匀度要 < 1%。
  2. 拍摄灰卡或白板:18% 灰卡或白色漫反射板。注意不要过曝,中心亮度控制在 80% 左右。
  3. 采集多帧平均:拍 8-16 帧去噪,消除 sensor 随机噪声。
  4. 提取 shading 曲线:对每个通道,计算中心区域均值,然后算每个像素的衰减比例。
  5. 生成增益网格:通常用 16×16 或 32×32 网格,插值到全分辨率。
  6. 验证:用标定后的增益拍白板,检查均匀性。目标:四角与中心差异 < 2%。

我的习惯:标定时至少拍 3 组不同色温(D65、A 光、TL84)。因为镜头阴影会随光源波长变化,单色温标定不够用。

下面这张图展示了 LSC 标定的完整流程:

LSC 标定与校正流程 均匀光源准备 拍摄灰卡/白板 多帧平均去噪 提取 Shading 曲线 生成增益网格 验证均匀性 在线校正 不合格则重新标定

4.3 LSC 调试:增益网格与插值

标定完拿到增益网格,接下来就是调试。这里有几个关键点:

4.3.1 网格分辨率

网格越密,校正越精细,但存储和计算开销也大。我一般这样选:

传感器分辨率 推荐网格 说明
2MP 以下 8×8 低端 sensor,阴影变化平缓
2MP - 8MP 16×16 主流手机 sensor,够用
8MP - 48MP 32×32 高像素 sensor,边缘细节多
48MP 以上 64×64 超大底 sensor,建议用多项式拟合

4.3.2 插值方式

网格到像素的插值,常用两种:

  • 双线性插值:速度快,但边缘可能有块状感。适合低分辨率网格。
  • 双三次插值:平滑,但计算量大。适合高分辨率网格。

我个人习惯用双线性 + 16×16 网格。平衡了性能和效果。如果 sensor 阴影曲线特别陡,再考虑升网格或换插值。

4.3.3 通道独立 vs 共用增益

这里有个坑:

  • 共用增益:只校正亮度阴影,不处理色彩阴影。速度快,但四角偏色问题还在。
  • 通道独立:R、G、B 各算各的增益。效果好,但标定工作量翻倍。

我建议至少用 R/B 通道独立 + G 通道共用。因为色彩阴影主要来自 R 和 B 通道的衰减差异,G 通道相对稳定。

注意:通道独立校正时,要防止增益过大导致噪声放大。边缘区域增益可能到 2.0 以上,噪声会被放大 6dB。建议配合去噪模块联调。

4.4 常见问题与避坑指南

调试 LSC 时,我遇到过不少问题。挑几个典型的说说:

4.4.1 校正后出现网格纹

现象:校正后的图像上能看到 16×16 的网格边界。

原因:网格分辨率太低,或者插值精度不够。

解决办法:

  • 提高网格分辨率到 32×32
  • 改用双三次插值
  • 对增益网格做平滑滤波

4.4.2 四角偏色校正不干净

现象:校正后四角还是偏绿或偏紫。

原因:标定时只用了单色温,或者光源均匀度不够。

解决办法:

  • 用多色温标定,生成多组增益表
  • 运行时根据色温插值选择增益表
  • 检查积分球均匀度,不合格就换

4.4.3 边缘噪声爆炸

现象:校正后边缘区域噪点明显比中心多。

原因:增益太大,噪声被同步放大。

解决办法:

  • 限制最大增益,比如不超过 2.5
  • 配合去噪模块,边缘区域用更强的去噪强度
  • 考虑用硬件 LSC 的增益上限寄存器

我曾经踩过的坑:有一次标定完 LSC,在实验室看白板很均匀。结果拿到室外拍蓝天,四角偏紫得一塌糊涂。查了两天才发现,实验室用的是卤素灯,色温 3200K,而室外是 6500K。从那以后,我标定 LSC 必做三组色温,运行时根据 AWB 结果动态切换。

4.5 联调要点

LSC 不是独立模块。它跟 AWB、去噪、Gamma 都有关系:

  • LSC + AWB:LSC 校正色彩阴影后,AWB 的统计会更准。建议先调 LSC,再调 AWB。
  • LSC + 去噪:边缘增益大,噪声也大。去噪强度要随增益自适应。
  • LSC + Gamma:Gamma 会改变亮度分布,可能让阴影校正效果变差。建议 LSC 放在 Gamma 之前。

嗯,LSC 就这些。记住:标定是基础,调试是细节,联调是保障。每一步都别偷懒。