4. LSC参数解析:Gain Mesh网格结构、R/Gr/Gb/B通道独立校准、Mesh Size与精度权衡

镜头阴影校正(LSC)这东西,说白了就是给CMOS传感器每个像素“喂”一个不同的增益值。为什么?因为镜头的光学特性决定了,画面边缘收到的光就是比中心少。你想想看,一个凸透镜,光线从中心直直穿过,和从边缘斜着穿过去,路径长度都不一样,衰减自然也不同。

我刚开始做ISP调试那会儿,总觉得LSC是个“差不多就行”的活儿。直到有一次,客户拿着我们出的样机拍了一张纯灰卡,结果画面边缘发暗,中心又有点过曝。嗯,从那以后,我再也不敢小看LSC参数了。

4.1 Gain Mesh网格结构

高通平台的LSC,核心是一个叫做Gain Mesh的东西。它不是给每个像素单独存一个增益值——那样数据量太大了,不现实。它是在图像上均匀地取一些点,形成一个网格,每个网格点存一个增益值。其他像素的增益,靠插值算出来。

核心概念:Gain Mesh = 稀疏采样 + 双线性插值。用少量网格点,还原出整幅图像的增益曲面。

这个网格的结构,通常用 mesh_size_x 和 mesh_size_y 来描述。比如 mesh_size_x = 16,意思是在水平方向上,把图像分成16个区间,也就是有17个网格点。垂直方向同理。

我个人习惯,把网格点想象成“图钉”。图钉钉得越密,增益曲面就越贴合真实的镜头阴影曲线。但图钉多了,存储和计算开销也上去了。这就是后面要讲的权衡。

Gain Mesh 网格结构示意图 插值 像素 红色节点:存储增益值 | 黄色区域:通过插值计算增益

4.2 R/Gr/Gb/B通道独立校准

这里有个关键点:四个通道的阴影曲线是不一样的。为什么?因为不同波长的光,在镜头里的折射率不同。红色光偏折小,蓝色光偏折大。所以R通道的阴影可能比较平缓,B通道的阴影可能更陡峭。

高通平台允许我们为R、Gr、Gb、B四个通道分别配置一套Gain Mesh参数。也就是说,每个通道都有自己的网格点增益值。

通道 阴影特性 典型增益范围(中心→边缘)
R 阴影较浅,曲线平缓 1.0 → 1.8
Gr 中等阴影 1.0 → 2.0
Gb 中等阴影 1.0 → 2.0
B 阴影较深,曲线陡峭 1.0 → 2.5

我的经验:Gr和Gb虽然都是绿色通道,但它们的阴影曲线往往有细微差异。不要偷懒只校准一个绿通道然后复制给另一个。我曾经这么干过,结果在纯色场景下出现了明显的“棋盘格”噪声。嗯,教训深刻。

在校准流程中,我们通常先拍一张均匀光照下的灰卡,然后分别提取四个通道的亮度分布。每个通道的亮度分布,就是它的“阴影曲线”。然后,我们根据这个曲线,反算出每个网格点需要的增益值。

举个例子,如果某个网格点对应的R通道亮度只有中心的60%,那这个点的R增益就是 1/0.6 ≈ 1.667。

4.3 Mesh Size与精度权衡

Mesh Size,就是网格的密度。它直接决定了LSC的精度和开销。我整理了一个对比表,方便你理解:

Mesh Size 网格点数(以1080p为例) 精度 存储开销 计算开销
8×8 9×9 = 81 低,边缘可能残留阴影 低 低
16×16 17×17 = 289 中等,适合大多数场景 中等 中等
32×32 33×33 = 1089 高,能拟合复杂阴影 高 高
64×64 65×65 = 4225 极高,几乎无残留 极高 极高

你可能会问:那是不是Mesh Size越大越好?不是的。这里有几个坑:

  • 过拟合风险:网格太密,会把传感器本身的固定噪声(FPN)也当成阴影去校正。结果就是,校正后的图像反而出现了新的纹理噪声。
  • 实时性瓶颈:每个像素都要做双线性插值。网格点越多,插值计算量越大。在4K 60fps的流水线上,这可能成为瓶颈。
  • 校准难度增加:网格点多了,校准时的“平滑约束”更难施加。你可能会得到一张增益值剧烈跳变的网格,导致校正后的图像出现“块状”伪影。

避坑指南:我曾经在一个广角镜头的项目上,为了追求极致的均匀性,把Mesh Size设成了64×64。结果在校准后的图像上,出现了一环一环的“水波纹”。后来发现,是网格太密,把镜头组装时的微小应力变形也当成阴影去校正了。最后退回到32×32,配合一个二阶多项式平滑,才解决问题。

那么,怎么选Mesh Size?我个人的建议是:

  1. 先粗后细:从16×16开始,看校正效果。如果边缘还有明显阴影,再升到32×32。
  2. 看镜头:普通手机镜头,16×16或32×32足够了。广角或超广角镜头,因为阴影更复杂,可能需要32×32甚至48×48。
  3. 看分辨率:传感器分辨率越高,每个网格点覆盖的像素数越多,网格可以适当稀疏一些。比如48M像素的传感器,16×16可能就够用了。
  4. 加平滑约束:无论选多大的Mesh Size,都要在增益网格上施加平滑约束。高通平台通常支持二阶或三阶多项式平滑,这能有效抑制过拟合。

最后,说一个调试时的实用技巧。在校准完成后,一定要用纯色图(比如灰卡、红卡、蓝卡)去验证。把校正后的图像放大到像素级,看看有没有网格痕迹。如果有,说明Mesh Size偏大或者平滑不够。如果没有,但边缘还是暗,说明Mesh Size偏小或者校准数据有问题。

嗯,LSC参数这块,说白了就是“网格密度”和“精度”之间的平衡。没有正确的参数,只有最适合你当前镜头和传感器的参数。