3. LSC校正模型:多项式模型 vs 网格模型
镜头阴影校正,说白了就是解决照片四周发暗的问题。但怎么校?用什么数学模型去描述这个亮度衰减?这就引出了我们今天要聊的核心——LSC校正模型。
瑞芯微平台支持两种主流模型:多项式模型和网格模型。这两种模型各有各的脾气,选对了事半功倍,选错了……嗯,我见过有人在项目里硬套多项式去拟合一个极其不规则的镜头,结果调了两个月都没搞定。
3.1 多项式模型:数学之美,但有边界
多项式模型的核心思想很简单——用一个多项式函数去近似镜头中心的亮度衰减曲线。通常用的是二阶或四阶多项式:
gain(r) = 1 + a1 * r² + a2 * r⁴ + a3 * r⁶
其中 r 是像素到图像中心的归一化距离,a1、a2、a3 是系数。
优点:参数少(通常3-5个系数),存储开销小,适合嵌入式场景。
缺点:对复杂镜头(比如广角、鱼眼)拟合能力有限,边缘容易过校或欠校。
我个人习惯在项目初期先用多项式模型快速验证。为什么?因为参数少,调试周期短。我记得有一次做一款手机摄像头模组,镜头素质还不错,用四阶多项式跑一遍,均匀性就从原来的70%拉到了90%以上。但如果你遇到的是那种边缘衰减特别陡的镜头,多项式就有点力不从心了。
3.2 网格模型:暴力美学,精准但吃资源
网格模型就不跟你讲什么数学公式了。它直接把图像分成一个个网格(比如 16x16 或 32x32),每个网格顶点存一个增益值。像素点落在网格内部时,用双线性插值算出它的增益。
你想想看,这相当于给每个区域都配了一个独立的“亮度补偿器”。对于那种镜头边缘衰减极不规则的情况,网格模型几乎是唯一的选择。
| 对比项 | 多项式模型 | 网格模型 |
|---|---|---|
| 参数数量 | 3-7个系数 | 网格点数 × 通道数(如 16x16x3) |
| 拟合精度 | 中等,适合规则衰减 | 高,可拟合任意形状 |
| 存储开销 | 极小(几十字节) | 较大(几KB到几十KB) |
| 调试难度 | 低,调几个系数即可 | 高,需要采集大量数据 |
| 适用场景 | 普通手机、监控摄像头 | 广角、鱼眼、多摄融合 |
我曾经踩过一个坑:在某款广角相机上用了多项式模型,中心区域校得挺好,但边缘出现了明显的“彩虹纹”。后来换成网格模型,把网格密度从 8x8 提高到 16x16,问题才解决。所以,别迷信多项式,该上网格时就上网格。
3.3 瑞芯微平台支持的LSC模型:R/G/B通道独立
瑞芯微的ISP硬件在设计上有一个很贴心的特性——R、G、B三个通道的LSC校正参数是独立配置的。为什么这么做?
因为不同波长的光在镜头中的折射率不一样。说白了,红色光和蓝色光经过同一片镜头,衰减曲线是有差异的。如果三个通道共用一套参数,就会出现“中心白平衡准了,边缘偏色”的问题。
在瑞芯微的RK3588、RV1126等平台上,LSC模块的寄存器配置大致如下:
// 伪代码示例:配置R通道网格增益表
lsc_r_gain_table[16][16] = {
// 16x16 网格,每个点存一个12bit增益值
{1024, 1020, 1015, ...},
...
};
// G通道和B通道同理
lsc_g_gain_table[16][16] = {...};
lsc_b_gain_table[16][16] = {...};
// 使能独立通道校正
lsc_config.channel_independent = 1;
lsc_config.model_type = LSC_MODEL_GRID; // 选择网格模型
我建议你在调试时,先分别采集R、G、B三个通道的raw图,然后各自计算增益表。不要偷懒用同一个表去套三个通道,否则你会被边缘偏色折磨到怀疑人生。
3.4 增益表的概念:LSC的核心数据载体
增益表(Gain Table)是LSC校正的“弹药”。不管是多项式模型还是网格模型,最终都要落到一张增益表上。这张表告诉ISP:每个像素位置,应该乘上多大的增益值才能把亮度拉回来。
增益表有几个关键属性:
- 精度:瑞芯微平台通常用12bit或14bit定点数表示增益,范围一般在0.5x到4x之间。
- 分辨率:网格越密,校正越精细,但存储和计算开销也越大。
- 平滑性:增益值不能突变,否则图像会出现“网格状”的明暗条纹。
一个小技巧:生成增益表后,可以用工具把它可视化成一个3D曲面图。如果曲面有尖刺或凹陷,说明数据采集有问题,需要重新标定。我每次都会做这一步,能省下不少调试时间。
3.5 知识结构图:LSC校正模型全景
下面这张图帮你理清今天讲的核心内容:
3.6 选型建议:什么时候用哪个?
说了这么多,到底怎么选?我根据实际项目经验,给你一个参考:
- 镜头素质好、衰减规则:优先用多项式模型。省存储、调试快,效果也够用。
- 广角、鱼眼、多摄:直接上网格模型。别犹豫,多项式搞不定的。
- 项目初期快速验证:先用多项式跑通流程,后期再切网格做精细化调优。
- 存储空间紧张:多项式模型是唯一选择。但要做好边缘偏色的心理准备。
核心要点:瑞芯微平台的R/G/B独立通道配置,给了我们很大的灵活性。你可以R通道用网格模型,G和B通道用多项式模型——只要你能解释清楚为什么这么干。我个人建议,除非有特殊原因,否则三个通道保持一致的模型类型,调试起来更省心。