4. 镜头阴影校正(LSC):亮度阴影与颜色阴影的成因分析、LSC Gain Table 的生成与标定流程、四角偏色问题的解决思路
镜头阴影校正,圈里人常叫 LSC。说白了,就是解决照片四周发暗、发绿或者发红的问题。你拿手机对着白墙拍一张,如果四角比中心暗,那就是亮度阴影;如果四角偏绿或偏紫,那就是颜色阴影。
我刚开始做 ISP 调试那会儿,最头疼的就是这个。明明 sensor 和 lens 都选得不错,一拍出来四角就是花的。后来才明白,这不是硬件坏了,是光学的物理规律决定的。
4.1 亮度阴影与颜色阴影的成因分析
先说说亮度阴影。镜头本身是个凸透镜,光线从中心通过和从边缘通过,路径长度不一样。边缘的光线到达 sensor 时,能量已经衰减了不少。这就是 cos⁴ 定律——边缘照度大致按 cos⁴θ 下降。θ 越大,衰减越狠。
颜色阴影呢?更麻烦。不同波长的光在镜头里折射率不同。红光偏折小,蓝光偏折大。到了 sensor 边缘,红光和蓝光到达的位置就错开了。这就是 Chief Ray Angle(CRA)失配。Sensor 的微透镜设计有最佳入射角,边缘光线角度偏了,颜色就串了。
我在一个项目里遇到过极端情况——用了大广角镜头,边缘亮度掉了 40%,四角还带一圈紫边。当时排查了很久,最后发现是 lens 的 CRA 和 sensor 的 micro-lens 没对齐。换了个 lens 就好了。所以选型阶段就要看 CRA 匹配。
4.2 LSC Gain Table 的生成与标定流程
校正阴影,核心就是给每个像素乘一个增益。中心区域增益小,边缘增益大。这个增益值存在一张表里,叫 Gain Table。
标定流程我一般分五步走:
- 准备均匀光源——积分球或者均匀白板。光源色温要稳定,我习惯用 D65。
- 采集 raw 图——盖上镜头盖拍一张暗场,再对着光源拍一张亮场。暗场用来减掉固定噪声。
- 计算增益——把亮场图分成网格,比如 16x16 或 32x32。每个网格算一个平均亮度值。中心网格的亮度作为基准,其他网格的增益 = 基准 / 当前亮度。
- 插值平滑——直接算出来的增益可能有噪声,要用双线性或双三次插值做平滑。我习惯用双线性,速度快,效果也够。
- 写入寄存器——把平滑后的 Gain Table 转成定点数,烧进 ISP 的 LSC 模块。
这里有个细节:Gain Table 的精度很关键。我一般用 Q8.8 格式,也就是 16 位定点数,8 位整数 8 位小数。精度太低,校正后会有条纹;精度太高,寄存器装不下。
下面这张图是 LSC 标定的完整流程:
4.3 四角偏色问题的解决思路
亮度阴影校正完了,四角可能还是偏色。这就是颜色阴影没处理好。解决思路分三个层次:
4.3.1 分通道校正
R、G、B 三个通道的阴影曲线不一样。不能用一个 Gain Table 通吃。我习惯对每个通道单独标定,生成三张 Gain Table。这样校正后,四角的颜色就能和中心一致。
4.3.2 色温补偿
不同色温下,颜色阴影的表现不同。D65 下偏绿,A 光下可能偏红。所以标定时要覆盖多个色温。我一般标三个点:D65(6500K)、TL84(4000K)、A 光(2856K)。运行时根据 AWB 的结果,插值选择对应的 Gain Table。
4.3.3 边缘微调
有时候标定做完了,四角还是有一点点偏。这时候可以手动微调边缘区域的增益。我习惯在调试工具里画一个 ROI,实时看四角的 R/G、B/G 比值。调到和中心一致为止。
举个例子,有一次客户反馈夜景模式下四角偏紫。我查了标定数据,发现暗光下 sensor 的 R 通道噪声大,导致增益计算不准。后来在暗场标定里加了多帧平均,噪声压下去了,偏色也消失了。
| 偏色类型 | 典型表现 | 根因 | 解决方向 |
|---|---|---|---|
| 四角偏绿 | G 通道增益不足 | CRA 失配导致 G 像素感光弱 | 增大 G 通道边缘增益 |
| 四角偏紫 | R 和 B 通道增益不匹配 | 暗光下 R 通道噪声大 | 多帧平均降噪后重新标定 |
| 四角偏红 | B 通道增益过高 | lens 在红外波段透过率异常 | 检查 IR filter 或调整 B 通道增益 |
嗯,到这里 LSC 的核心内容就差不多了。亮度阴影靠增益补,颜色阴影靠分通道加色温补偿。标定流程要稳,调试时要细。四角偏色不是玄学,是光学和 sensor 的物理规律。摸透了,就能调好。