3、镜头阴影校正(LSC):成因分析、增益映射表生成、调试策略
镜头阴影校正,圈里人常叫 LSC。说白了,就是解决照片四周发暗、发偏色的问题。你拿手机对着白墙拍一张,如果中间亮、四角暗,那就是典型的亮度阴影(Luma Shading)。如果四角还带点绿或者带点红,那就是颜色阴影(Color Shading)。
我刚开始调 ISP 时,觉得 LSC 不就是乘个增益嘛,简单。后来发现,增益映射表怎么生成、怎么平滑过渡、怎么跟 sensor 的响应曲线配合,全是坑。今天咱们就把这块掰开揉碎讲清楚。
3.1 阴影成因:为什么四角会变暗?
原因其实就两个:光学原因和 sensor 原因。
- 光学原因(Lens Roll-off):镜头本身是个凸透镜,光线从中心到边缘的路径长度不一样。边缘光线到达 sensor 的角度更斜,能量自然就弱了。这符合余弦四次方定律(Cos⁴ Law)。说白了,边缘收到的光只有中心的 30%~60%。
- Sensor 原因(Pixel Angle Response):sensor 每个像素上面有个微透镜,微透镜把光汇聚到光电二极管。边缘光线入射角太大,微透镜聚光效率下降,甚至光线会打到隔壁像素的电路区,造成串扰。这就是颜色阴影的根源——不同颜色的像素对入射角敏感度不同。
关键指标:阴影通常用中心亮度与四角亮度的比值(Shading Ratio)来衡量。比如中心亮度 200,四角亮度 120,比值就是 200/120 ≈ 1.67。一般要求这个比值在 1.2 以内,高端模组能做到 1.1 以内。
我在项目中遇到过一款广角镜头,Shading Ratio 到了 2.3。四角暗得跟戴了墨镜一样。后来发现是镜头跟 sensor 的 CRA(主光线角)不匹配。嗯,这里要注意:LSC 不是万能的,增益太大(超过 2.5 倍)会放大噪声,四角噪点会非常明显。
3.2 增益映射表生成:从标定到插值
LSC 的核心是一张增益映射表(Gain Map)。这张表记录了每个像素位置需要乘多少增益。生成过程分三步:
- 采集 raw 图:用均匀光源(积分球或灯箱)拍一张灰卡或白板。注意光源要均匀,不均匀的话 LSC 会把光源不均匀也校正掉,那就错了。
- 计算增益:以图像中心为参考点,计算每个像素的增益值。公式很简单:
Gain(x,y) = CenterValue / PixelValue(x,y)。中心值一般取中心区域的平均值。 - 生成网格表:全分辨率下每个像素都存增益,数据量太大。实际做法是分成网格(比如 16x16 或 32x32 的网格),每个网格存一个增益值。ISP 运行时通过双线性插值算出每个像素的增益。
我个人习惯:网格密度不要小于 16x16。太稀疏的话,插值出来的增益曲线会有阶梯感,尤其在阴影变化剧烈的区域。我见过有人用 8x8 网格,结果画面出现一圈一圈的亮纹,那就是插值精度不够。
下面这张图展示了增益映射表的生成流程:
3.3 调试策略:从粗调到精调
LSC 调试不是一锤子买卖。我一般分四步走:
3.3.1 粗调:确定整体趋势
先用自动标定工具生成一张基础增益表。然后拍一张灰卡,看四角亮度是否均匀。如果四角还是暗,就整体提高边缘增益。如果中心过曝,就降低中心增益。这一步目标是让亮度阴影控制在 5% 以内。
3.3.2 精调:处理颜色阴影
亮度均匀了,颜色可能还不均匀。比如四角偏绿,说明 G 通道增益不够,或者 R/B 通道增益过高。需要分别调整 R、G、B 三个通道的增益表。我习惯用色温计配合灰卡,在 D65 和 A 光下分别验证。
我曾经踩过的坑:有一次在 D65 下调好了 LSC,换到 A 光下四角全红了。原因是 sensor 的 R 通道在低色温下响应变弱,而 LSC 增益表是固定的。后来我改用多色温标定,生成多组增益表,根据色温切换。嗯,这个坑希望大家别重复踩。
3.3.3 边界处理:防止过校正
图像边缘的增益往往最大。如果增益超过 2.5 倍,边缘噪声会非常明显。我建议设置一个增益上限(Gain Clamp),比如最大 2.0 倍。超出部分不做校正,宁可边缘暗一点,也不能让噪点炸裂。
3.3.4 验证:多场景测试
LSC 调完不能只在实验室看。要拿到户外、室内、夜景下验证。尤其要注意:
- 天空场景:均匀的蓝天最容易看出颜色阴影
- 白墙场景:最容易看出亮度阴影
- 夜景场景:检查边缘噪声是否被放大
3.4 参数配置参考
下面是我常用的 LSC 参数配置表,供你参考:
| 参数项 | 推荐值 | 说明 |
|---|---|---|
| 网格密度 | 16x16 ~ 32x32 | 根据 sensor 分辨率调整,越高越精细 |
| 增益上限 | 2.0x ~ 2.5x | 超过此值不做校正,防止噪声 |
| 插值方式 | 双线性插值 | 兼顾平滑与性能 |
| 标定光源 | D65 + A 光 | 至少两种色温,覆盖日常场景 |
| 中心参考区 | 图像中心 10% | 取均值作为参考亮度 |
小技巧:如果你发现 LSC 调完后画面边缘有轻微的偏色,可以试试在增益表上做高斯平滑。平滑半径 1~2 个网格点,能有效消除增益突变带来的色差。我一般会在生成增益表后加一步平滑滤波。
3.5 避坑指南
最后总结几个我踩过的坑,你遇到了可以直接绕开:
- 坑一:光源不均匀——标定用的光源本身就不均匀,LSC 会把光源不均匀当成镜头阴影校正掉。结果换到自然光下,画面反而出现反向阴影。解决办法:用积分球,或者用多张图平均。
- 坑二:增益表不更新——有些模组在变焦或切换镜头时,阴影特性会变。如果增益表还是用原来的,画面会出问题。记得在变焦后重新加载对应的增益表。
- 坑三:忽略温度影响——sensor 在高温下暗电流增加,会影响阴影标定。我建议在常温下标定一次,再在高温(60°C)下验证一次,看阴影是否有偏移。
LSC 调好了,画面质感能提升一大截。但记住:LSC 是锦上添花,不是雪中送炭。如果镜头和 sensor 本身匹配就有问题,LSC 只能补救,不能根治。选型阶段就要把 CRA 匹配做好,后面调起来才轻松。