4、镜头阴影校正(LSC):镜头阴影现象、校正原理、网格参数调试
镜头阴影校正,圈内人常叫它 LSC。说实话,这玩意儿是 ISP 调试里最磨人的活之一。你想想看,明明镜头中心拍出来挺通透的,一到四角就暗下去了,或者偏色了。这就是典型的镜头阴影。
我刚开始调 LSC 那会儿,总觉得不就是个亮度补偿嘛,拉一拉增益就完事了。后来发现,事情远没那么简单。你增益拉多了,暗角是没了,但噪声也跟着放大了,四角全是彩噪,那画面简直没法看。
4.1 镜头阴影现象
镜头阴影,说白了就是镜头的光学特性导致的亮度不均匀。主要有两种表现:
- 亮度阴影(Luma Shading):画面中心亮,四周暗。这个最常见,尤其是大光圈镜头。
- 颜色阴影(Color Shading):画面中心和四周颜色不一致。比如中心偏暖,四周偏冷。这个更头疼,因为人眼对颜色不均匀特别敏感。
为什么会这样?我简单解释一下。光线从镜头中心通过时,路径短,能量损失小。从边缘通过时,路径长,而且镜头本身会有遮挡,能量自然就弱了。再加上不同波长的光在镜头里的折射率不一样,RGB 三个通道的衰减程度也不同,这就导致了颜色阴影。
关键点:亮度阴影和颜色阴影往往同时存在。调试时不能只盯着亮度看,颜色均匀性同样重要。
我记得有一次,客户拿了一颗新镜头过来,说中心到边缘的亮度差了 30% 以上。我一看,这镜头的光学设计就有问题,但没办法,硬件已经定了,只能靠 LSC 硬扛。那一次我调了整整三天,才把阴影压到 5% 以内。
4.2 校正原理
LSC 的校正原理其实不复杂。说白了就是:给暗的地方补光,亮的地方不动。
具体怎么做呢?ISP 内部会维护一张增益网格表。这张表把画面分成 M×N 个网格,每个网格对应一个增益值。校正时,ISP 根据像素所在的网格位置,查表得到增益,然后乘到像素值上。
数学表达很简单:
I_out(x, y) = I_in(x, y) × Gain(x, y)
其中 Gain(x, y) 就是网格插值后的增益值。
这里有个坑,我必须要说。增益不能无限大。你想想看,如果四角需要 2 倍的增益,那意味着原本 100 的像素值要变成 200。但噪声也被放大了 2 倍。所以 LSC 的极限,取决于你的 sensor 信噪比和镜头本身的阴影程度。
注意:增益过大时,暗区的噪声会非常明显。我建议最大增益不要超过 2.5 倍,否则画质会严重劣化。
另外,颜色阴影的校正需要分通道处理。R、G、B 三个通道各自独立计算增益。这样就能解决偏色问题。我习惯先调亮度阴影,再调颜色阴影。因为亮度调好了,颜色阴影的偏差会更容易看出来。
4.3 网格参数调试
网格参数调试,是 LSC 里最需要耐心的部分。网格分得越细,校正精度越高,但计算量也越大。网格太粗,又会出现块状效应。
常见的网格配置是这样的:
| 分辨率 | 推荐网格数 | 说明 |
|---|---|---|
| 2MP (1920×1080) | 9×7 或 11×9 | 网格间距约 200 像素 |
| 5MP (2592×1944) | 13×11 或 15×13 | 网格间距约 150 像素 |
| 8MP (3264×2448) | 17×13 或 19×15 | 网格间距约 160 像素 |
| 13MP (4208×3120) | 21×17 或 25×19 | 网格间距约 160 像素 |
我个人习惯,网格间距控制在 150~200 像素之间。太密了,调试工作量翻倍,而且容易过拟合。太疏了,校正效果不够精细,边缘会有明显的亮度跳变。
4.3.1 调试步骤
我一般按这个流程走:
- 拍摄均匀光源:用 DNP 灯箱或者积分球,拍一张均匀的灰卡。注意,光源要均匀,否则你调出来的 LSC 参数会带偏。
- 提取阴影曲线:从中心到四角,提取 R、G、B 三个通道的亮度曲线。这个可以用工具自动做,但我建议你肉眼也看一下,有时候工具会骗人。
- 计算增益:以中心亮度为基准,计算每个网格需要的增益值。公式很简单:Gain = 中心亮度 / 当前网格亮度。
- 写入参数:把增益值写入 ISP 的寄存器或者 tuning 文件。
- 验证效果:重新拍一张均匀光源,检查亮度和颜色均匀性。我一般要求亮度偏差 < 5%,色差 ΔE < 3。
小技巧:调试时,可以用伪彩色显示来辅助判断。把亮度偏差映射成颜色,一眼就能看出哪里暗哪里亮。比看数值快多了。
4.3.2 避坑指南
我曾经踩过一个坑,说出来给大家提个醒。有一次我调完 LSC,在实验室里看效果很好,均匀性 3% 以内。结果一到户外,拍蓝天的时候,四角出现了明显的偏紫。我排查了半天,才发现问题出在光源上。实验室用的是 D65 光源,而户外是自然光,光谱不一样,镜头的阴影特性也跟着变了。
所以,我建议:
- 至少用两种不同色温的光源来调试(比如 D65 和 A 光源)。
- 调试完成后,一定要在真实场景下验证。
- 如果镜头批次之间有差异,建议每颗镜头单独标定。
嗯,这里还要注意一点。LSC 参数和镜头模组的组装精度有很大关系。如果镜头装歪了,或者 sensor 和镜头的光轴不重合,你调出来的 LSC 参数就会不对称。遇到这种情况,先别急着调 LSC,先把模组组装问题解决了再说。
最后说一句,LSC 调试没有捷径。你调得越多,手感越好。我刚开始调的时候,一个镜头要折腾一周。现在熟练了,半天就能搞定。但每次遇到新镜头,我还是会老老实实走一遍流程,不敢偷懒。