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个网格点。垂直方向同理。
我个人习惯,把网格点想象成“图钉”。图钉钉得越密,增益曲面就越贴合真实的镜头阴影曲线。但图钉多了,存储和计算开销也上去了。这就是后面要讲的权衡。
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?我个人的建议是:
- 先粗后细:从16×16开始,看校正效果。如果边缘还有明显阴影,再升到32×32。
- 看镜头:普通手机镜头,16×16或32×32足够了。广角或超广角镜头,因为阴影更复杂,可能需要32×32甚至48×48。
- 看分辨率:传感器分辨率越高,每个网格点覆盖的像素数越多,网格可以适当稀疏一些。比如48M像素的传感器,16×16可能就够用了。
- 加平滑约束:无论选多大的Mesh Size,都要在增益网格上施加平滑约束。高通平台通常支持二阶或三阶多项式平滑,这能有效抑制过拟合。
最后,说一个调试时的实用技巧。在校准完成后,一定要用纯色图(比如灰卡、红卡、蓝卡)去验证。把校正后的图像放大到像素级,看看有没有网格痕迹。如果有,说明Mesh Size偏大或者平滑不够。如果没有,但边缘还是暗,说明Mesh Size偏小或者校准数据有问题。
嗯,LSC参数这块,说白了就是“网格密度”和“精度”之间的平衡。没有正确的参数,只有最适合你当前镜头和传感器的参数。