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%。
- 拍摄灰卡或白板:18% 灰卡或白色漫反射板。注意不要过曝,中心亮度控制在 80% 左右。
- 采集多帧平均:拍 8-16 帧去噪,消除 sensor 随机噪声。
- 提取 shading 曲线:对每个通道,计算中心区域均值,然后算每个像素的衰减比例。
- 生成增益网格:通常用 16×16 或 32×32 网格,插值到全分辨率。
- 验证:用标定后的增益拍白板,检查均匀性。目标:四角与中心差异 < 2%。
我的习惯:标定时至少拍 3 组不同色温(D65、A 光、TL84)。因为镜头阴影会随光源波长变化,单色温标定不够用。
下面这张图展示了 LSC 标定的完整流程:
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 就这些。记住:标定是基础,调试是细节,联调是保障。每一步都别偷懒。