3、镜头阴影校正(LSC):成因分析、增益矩阵计算、参数调优策略

镜头阴影校正,圈里人常叫它LSC。这玩意儿说白了,就是解决照片四周发暗、发偏色的问题。你想想看,一张好好的照片,中间亮堂堂,四个角却黑乎乎的,多难看。我刚开始做ISP的时候,就吃过这个亏——客户拿着一张纯灰卡的照片,指着四个角问我:“这是你们家传感器的暗角,还是镜头的问题?”嗯,从那以后,我就把LSC当成了ISP流水线上必须认真对待的一环。

3.1 成因分析:为什么四周会变暗?

镜头阴影的成因,其实就两个核心因素。一个是物理光学层面的,另一个是传感器层面的。

先说物理光学层面。镜头本身是个凸透镜,光线从中心通过和从边缘通过,路径长度不一样。边缘的光线要走更远的路,而且入射角度更斜。根据余弦四次方定律,像面照度与入射角余弦的四次方成正比。说白了,边缘的光能量天然就比中心少。这个衰减,我们叫它“亮度阴影”。

再说传感器层面。现在的CMOS传感器,每个像素上面都有微透镜,用来把光线汇聚到感光区域。但边缘的光线角度太斜了,微透镜的聚光效率就会下降。更麻烦的是,不同颜色的像素(R、G、B)对入射角度的敏感度不一样。这就导致了——不光是亮度变暗,颜色也跟着偏了。这个叫“色度阴影”。

核心结论:亮度阴影是亮度整体衰减,色度阴影是颜色比例失衡。LSC要同时解决这两个问题。

我在项目中遇到过一种极端情况:某款手机镜头,边缘的红色通道衰减比蓝色通道多了将近15%。拍出来的照片,四周明显偏青。这就是典型的色度阴影问题,光靠调增益矩阵是搞不定的,还得配合镜头选型。

3.2 增益矩阵计算:怎么把暗角拉回来?

LSC的原理其实很简单——给每个像素乘上一个增益系数,把衰减掉的光信号补回来。但这个系数怎么算,就有讲究了。

标准的做法是:拍一张均匀光照下的灰卡照片,然后分析每个像素位置的亮度值。理想情况下,整张图应该是一个均匀的平面。但实际上,中心亮、四周暗。我们把中心区域的亮度值作为参考值,四周的像素值除以这个参考值,就得到了一个衰减系数矩阵。增益系数就是衰减系数的倒数。

用公式表示就是:

Gain(x, y) = L_center / L(x, y)

其中L_center是中心区域的亮度均值,L(x,y)是某个像素的实际亮度值。

但这里有个坑——直接逐像素计算增益,数据量太大了。一个2000万像素的传感器,就要存2000万个增益系数,这显然不现实。所以实际工程中,我们用的是“网格化”的方法。

具体做法是:

  • 把图像分成M×N个网格(比如16×16或32×32)
  • 在每个网格内,计算一个平均增益系数
  • 存储这些网格点的增益值
  • 运行时,通过双线性插值计算出每个像素的增益

我个人的习惯是,网格密度选16×16。太密了浪费存储,太疏了校正精度不够。当然,如果你用的是高端芯片,网格可以密一些。

小技巧:增益矩阵的存储格式,我建议用Q8.8定点数。一个增益值占2个字节,16×16的网格只需要512字节。既节省空间,又方便硬件做乘法运算。

3.3 参数调优策略:别让校正变成破坏

LSC的参数调优,说白了就是找一组增益系数,让校正后的图像既均匀又自然。但这里有个矛盾——增益系数太大,会放大噪声;增益系数太小,暗角又去不掉。

我总结了一套调优流程,分三步走:

  1. 粗调:用灰卡拍一张图,自动计算增益矩阵。这一步得到的是一个数学上的最优解。
  2. 细调:用实景图验证。因为灰卡是理想场景,实景图才能暴露问题。比如天空、白墙这些大面积均匀区域,最容易看出校正效果。
  3. 限幅:设置增益上限。我一般把最大增益限制在2.0倍以内。超过这个值,噪声会变得不可接受。

我曾经犯过一个错误:为了追求极致的均匀性,把边缘增益调到了2.5倍。结果暗角是没了,但边缘的噪声像雪花一样。后来我学乖了,在增益和噪声之间找平衡点。

警告:千万不要在低光照条件下做LSC标定!低光照下噪声大,计算出的增益矩阵会包含大量噪声信息。标定一定要在充足光照下进行,最好用D65光源。

另外,色度阴影的校正要单独处理。我的做法是:对R、G、B三个通道分别计算增益矩阵。但要注意,G通道的增益通常最小,因为G像素对光的敏感度最高。如果发现某个通道的增益异常大(比如超过3.0),那多半是镜头本身的问题,光靠LSC是救不回来的。

3.4 实战中的避坑指南

做LSC调优,有几个坑是新人最容易踩的。我一个个说:

  • 坑一:用错标定图。灰卡必须是无光泽的,而且表面要均匀。我曾经用了一张有细微纹理的灰卡,结果校正出来的照片,纹理被放大了,看起来像水波纹。
  • 坑二:忽略温度影响。传感器在不同温度下,暗电流不一样,会影响LSC的精度。我建议在常温(25°C)和高温(60°C)下各做一次标定,然后取平均。
  • 坑三:网格边界不连续。如果网格之间的增益跳变太大,校正后的图像会出现网格状的条纹。解决办法是:在计算增益时,对相邻网格做平滑处理。

嗯,这里还要提一句——LSC不是万能的。如果镜头的阴影太严重(比如边缘亮度只有中心的30%),那就算把增益调到最大,也救不回来。这时候,你得回头去找镜头供应商,让他们优化镜头设计。

3.5 知识体系总览

下面这张图,是我自己总结的LSC知识体系。你可以把它当成一个思维导图来看:

镜头阴影校正(LSC) 成因分析 物理光学:余弦四次方定律 传感器:微透镜聚光效率 亮度阴影 vs 色度阴影 增益矩阵计算 公式:Gain = L_center / L(x,y) 网格化:16×16 或 32×32 双线性插值计算逐像素增益 调优策略 粗调:灰卡自动计算 细调:实景图验证 限幅:增益 ≤ 2.0 避坑指南 用无光泽均匀灰卡 注意事项 多温度下标定取平均

这张图把LSC的四个核心模块串起来了。你从成因分析入手,理解问题本质;然后学会增益矩阵的计算方法;接着掌握调优策略,知道怎么在实际项目中落地;最后记住那些避坑指南,少走弯路。

我个人觉得,LSC是ISP里最“物理”的一个模块。它不像3A那样需要复杂的控制逻辑,也不像去噪那样依赖算法。它就是老老实实地补偿光路损失。但正因为简单,才更容易出问题——你想想看,一个增益系数没算对,整张照片的颜色就全偏了。

好了,关于LSC的内容就讲到这里。下一节我们会聊另一个有趣的话题——坏点校正。那个模块,说白了就是跟传感器上的“坏像素”做斗争。到时候我再分享一些实战经验。

课后思考:如果你手头有一张用广角镜头拍的风景照,四周暗角很明显。你会怎么设计LSC的增益矩阵?网格密度选多少?增益上限设多少?试试看,能不能在保证均匀性的同时,把噪声控制在可接受范围内。