4、镜头阴影校正(LSC):从物理成因到高通Mesh实现

镜头阴影校正,圈里人常叫LSC。这玩意儿说简单也简单——把照片四周变暗的问题修回来。但说复杂,它涉及光学、传感器、甚至你的模组装配公差。

我个人习惯把LSC比作“给照片四角打补光灯”。你想想看,镜头本身是个凸透镜,光线从中心到边缘走过的路径不一样,能量衰减自然也不同。再加上传感器像素本身对斜入射光的响应差异,照片四周就暗下去了。

4.1 LSC的成因:不是镜头一个人的锅

很多人以为阴影全是镜头的问题。其实不然。我拆解一下,主要有三个因素在“合谋作案”:

  • 镜头光学阴影(Lens Shading):这是主因。光线从镜头中心到边缘,遵循余弦四次方定律(cos⁴θ)。说白了,边缘光线入射角大,光通量就少。这是物理定律,改不了。
  • 像素角度响应(Pixel Angular Response):传感器上的每个像素其实像个“小桶”,只对垂直入射的光最敏感。斜着来的光,有一部分会被像素间的金属遮光层挡住。这个效应在微透镜(Micro Lens)没对准时更明显。
  • 模组装配公差:这个我踩过坑。镜头和传感器的相对位置哪怕偏了0.1mm,阴影分布就不再是完美的中心对称了。你校准出来的增益矩阵,换一台机器可能就不准。

核心结论:LSC校正的本质,就是给每个像素乘一个增益系数,把边缘的亮度“拉”回中心水平。但这个增益不是随便给的,得精确测量。

4.2 增益矩阵计算:从灰卡到校正表

怎么算这个增益?流程其实不复杂,但细节决定成败。

我记得第一次做LSC校准时,拿着灰卡拍了张均匀光照的图,结果发现中心亮度是200,边缘只有150。那增益就是200/150 ≈ 1.333。就这么简单?嗯,理想情况是这样。

实际计算要考虑几个问题:

  1. 采集均匀光源:用积分球或者均匀背光板。千万别在自然光下拍,天空本身就不均匀。
  2. 分通道计算:R、G、B通道的阴影程度不一样。因为硅对不同波长光的吸收深度不同,B通道通常衰减最厉害。所以你得算三个通道各自的增益矩阵。
  3. 归一化处理:以图像中心区域的平均值为基准。比如中心100x100块的均值是180,那每个像素的增益 = 180 / 该像素原始值。
  4. 平滑与裁剪:原始增益图可能有噪声,得做低通滤波。同时限制最大增益,我一般设到4.0倍,再大噪声就压不住了。

避坑指南:我曾经遇到过增益矩阵算出来边缘有1.8倍,结果校正后暗部噪声被放大了,整个画面像蒙了一层雪花。后来我加了增益上限和空间平滑,才把信噪比稳住。

4.3 高通LSC的Mesh网格实现

好了,理论讲完,咱们看看高通是怎么在硬件里干这活的。

高通ISP里,LSC用的是Mesh网格方式。什么意思?它不存每个像素的增益——那太费内存了。它存一个稀疏的网格点,比如17x13个点,均匀分布在图像上。每个网格点存一个增益值。中间像素的增益,靠双线性插值算出来。

我画个图帮你理解:

高通LSC Mesh网格插值示意图 高通LSC Mesh网格插值示意 红色点为待插值像素,其增益由周围4个蓝色网格节点通过双线性插值计算得出

高通为什么用Mesh?两个原因:

  • 节省存储:一个2000万像素的增益图,存成float32要80MB。Mesh网格只要17x13x4 ≈ 884字节。差距三个数量级。
  • 硬件友好:双线性插值在硬件里就是几个乘加器的事,一个时钟周期就能算完一个像素。

Mesh的配置参数通常在高通QTI的Tuning工具里设置。你需要指定:

参数 说明 典型值
mesh_h_size 水平方向网格点数 17(对应16个区间)
mesh_v_size 垂直方向网格点数 13(对应12个区间)
gain_table 每个网格点的增益值(R/G/B三通道) 1.0 ~ 4.0
interp_mode 插值模式 bilinear(高通默认)

4.4 校准流程:从实验室到产线

校准流程分两步:实验室标定和产线快速校准。

实验室标定(Golden Sample):

  1. 搭建积分球均匀光源,色温选D65(6500K)。
  2. 放上Golden模组,拍一张RAW图。
  3. 提取R、G、B三通道的亮度分布。
  4. 计算每个网格点的增益值,生成LSC表。
  5. 验证:用同一模组拍灰卡,检查四角亮度偏差是否在±2%以内。

产线快速校准:

产线不可能每台都拍积分球。高通的做法是:

  • 用Golden模组生成一组“标准LSC表”。
  • 产线上只拍一张均匀白板,快速验证阴影是否在公差内。
  • 如果偏差大,微调增益表的整体偏移量(不重新计算每个点)。

注意:LSC校准必须和镜头模组绑定。换镜头型号、换传感器、甚至换镜头座,都得重新校准。我曾经见过一个项目,镜头供应商换了镀膜工艺没通知我们,结果LSC表全废了,四角偏红严重。从那以后,我要求每次镜头变更都必须重新送Golden样机。

4.5 高通LSC的硬件加速细节

最后聊点底层的。高通ISP里LSC模块的硬件实现,有几个关键点:

  • 流水线设计:LSC在Bayer域处理,紧跟在BLC(黑电平校正)之后。因为黑电平没校准时,增益会放大黑电平误差。
  • 增益精度:高通用Q8.8格式存增益,即8位整数+8位小数。精度1/256,够用了。我试过用Q4.4,结果出现条带(banding),后来改回Q8.8才解决。
  • 边界处理:图像边缘的像素,可能落在网格之外。高通的做法是“clamp to edge”——用最近的网格点增益。这个处理不好会在边缘出现突变,我建议在Tuning时把网格稍微外扩一点。

嗯,LSC这块内容不少,但核心就三点:理解成因、算对增益、用好Mesh。你把这三点吃透了,镜头阴影就不再是问题。