4、镜头阴影校正(LSC):镜头阴影现象、LSC算法原理、LSC标定流程
镜头阴影校正,圈里人常叫它LSC。这玩意儿,说白了就是解决照片四周发暗、偏色的问题。你拿手机拍一张白墙,如果发现中间亮、四周暗,那就是典型的镜头阴影。我刚开始做ISP的时候,觉得这问题不大,直到有一次客户投诉说我们模组拍出来的照片像戴了墨镜……嗯,从那以后我再也不敢小看LSC了。
4.1 镜头阴影现象
镜头阴影分两种:亮度阴影和颜色阴影。
- 亮度阴影(Luma Shading):图像中心到边缘亮度逐渐下降。原因很简单——镜头是个凸透镜,光线从中心直射过去损失小,从边缘斜着进去光路长、衰减大。你想想看,就像手电筒直照墙面是一个亮圆斑,斜着照就变成椭圆且暗很多。
- 颜色阴影(Color Shading):边缘不仅暗,还偏色。这是因为不同波长的光在镜头里折射率不一样,导致R、G、B通道的衰减程度不同。我遇到过一款广角镜头,拍出来的照片边缘明显偏绿,那就是典型的颜色阴影。
实际项目中,这两种阴影往往同时出现。所以LSC要同时做两件事:提亮边缘、校正色差。
4.2 LSC算法原理
LSC的核心思路很简单:给每个像素乘一个增益系数。中心区域增益接近1.0,越往边缘增益越大。但具体怎么算,这里头有讲究。
4.2.1 增益模型
常用的增益模型有两种:
- 多项式模型:用二次或四次多项式拟合增益曲面。公式长这样:
Gain(r) = 1 + a1 * r² + a2 * r⁴
其中r是像素到图像中心的归一化距离。a1、a2是标定出来的系数。这个模型计算量小,适合低端芯片。但精度一般,尤其对广角镜头不太够用。
- 网格模型(Grid Model):把图像分成M×N个网格,每个网格存一个增益值。像素点的增益通过双线性插值得到。这是目前主流方案,精度高,但需要更多存储空间。
我个人习惯用网格模型。虽然标定麻烦点,但效果确实好。有一次做一款鱼眼镜头,多项式模型怎么调都压不住边缘偏色,换成网格模型一次搞定。
4.2.2 分通道处理
R、G、B三个通道要分别做校正。因为每个通道的阴影曲线不一样。具体做法:
- 对每个通道单独标定增益网格
- 校正时分别查表、插值
- 最后合并成RGB图像
这里有个坑——G通道通常有两个(RGGB排列),它们的阴影特性略有差异。我建议对G1和G2分别标定,不要偷懒共用一组系数。
4.3 LSC标定流程
标定是LSC最关键的环节。算法再牛,标定数据不准也是白搭。整个流程分五步:
4.3.1 准备阶段
- 搭建均匀光源箱(积分球),保证照度均匀性在99%以上
- 准备标准灰卡(反射率18%左右)
- 固定相机模组,确保光轴与光源垂直
我曾经遇到一个奇葩问题——标定出来的增益曲线不对称。查了半天发现是模组没装正,歪了0.5度。嗯,机械公差有时候比算法问题更头疼。
4.3.2 采集原始图像
- 关闭所有ISP模块(只保留RAW输出)
- 在不同曝光时间下采集多帧图像
- 取平均去噪,得到干净的RAW图
4.3.3 计算增益网格
以网格模型为例:
// 伪代码:计算每个网格的增益
for each grid (i, j):
// 取网格内所有像素的平均值
avg_val = mean(pixels_in_grid)
// 以图像中心网格为参考
ref_val = grid_at_center.avg_val
// 增益 = 参考值 / 当前值
gain[i][j] = ref_val / avg_val
注意:如果某个网格的像素值太低(比如接近黑电平),计算出来的增益会异常大。需要做阈值保护。
4.3.4 平滑与校验
- 对增益网格做低通滤波,去除噪声
- 用标定好的参数拍一张白墙,检查校正效果
- 如果边缘还有阴影,微调增益值
4.3.5 参数固化
把标定好的增益网格写入模组的OTP或系统参数文件。量产时每个模组都要单独标定,因为镜头和sensor的装配公差会导致阴影特性不一样。
4.4 知识体系总览
下面这张图概括了LSC的核心逻辑,从现象到算法再到标定,一条线串起来:
4.5 避坑指南
做LSC这几年,我踩过的坑不少。挑几个典型的说说:
- 标定光源不均匀:我曾经用普通灯箱做标定,结果灯箱本身就有阴影,标定出来的参数把灯箱的阴影也“校正”了。后来换了积分球才解决。
- 忘记关其他ISP模块:标定时如果AWB或BLC开着,它们会干扰LSC的标定数据。记得所有模块都关掉,只留RAW输出。
- 增益饱和:边缘像素增益太大,导致像素值溢出。解决办法是适当降低整体曝光,给边缘留出增益余量。
- 温度漂移:sensor的暗电流随温度变化,会影响阴影特性。我建议在常温下标定一次,高温下再验证一次,确保参数在-20°C到60°C范围内都可用。
好了,LSC这块就聊到这儿。说白了,镜头阴影校正就是个“查漏补缺”的活——把镜头欠了每个像素的光,用增益补回去。算法不复杂,但标定细节多。你只要把均匀光源、增益计算、参数固化这三个环节把控好,基本不会出大问题。