镜头阴影校正原理:增益补偿模型与LSC算法概述
镜头阴影,说白了就是拍出来的照片四角发暗、中间亮。你想想看,用手机拍一张纯白墙壁,放大看四角是不是有点灰蒙蒙的?这就是镜头阴影在作怪。我刚开始接触ISP时,总觉得这问题不大,直到有一次做车载摄像头项目,客户拿测光表对着四角一量,差了好几个灰度级……嗯,从那以后我再也不敢小看LSC了。
为什么会有镜头阴影?
镜头阴影的成因主要有两个:
- 光衰减(Cos⁴ Law):光线从镜头中心到边缘,入射角度越来越大,到达传感器的光强按cos⁴θ衰减。说白了,边缘收到的光比中心少得多。
- 机械遮挡:镜头镜筒、滤光片支架等结构,会挡住一部分边缘光线。尤其是小光圈时,这种遮挡更明显。
这两种效应叠加,就形成了我们看到的亮度从中心到边缘逐渐下降的“阴影”。
增益补偿模型:最直观的思路
既然边缘暗,那就把边缘的信号放大呗。这就是增益补偿模型的核心思想——给每个像素乘一个系数,让四角亮起来。
数学上很简单:
I_out(x, y) = I_in(x, y) × Gain(x, y)
其中Gain(x, y)就是补偿增益,中心区域接近1.0,边缘区域可能到2.0甚至更高。我在一个安防项目中遇到过极端情况,边缘增益需要调到3.5倍才能和中心亮度一致——结果噪声也被放大了3.5倍,画面边缘全是噪点。所以LSC不是简单的乘法,还要考虑信噪比平衡。
LSC算法的两种主流实现
实际工程中,LSC算法主要分两大类:
| 类型 | 原理 | 存储开销 | 适用场景 |
|---|---|---|---|
| 网格式LSC | 将图像分成M×N网格,每个网格顶点存一个增益值,中间像素插值 | 低(几十到几百字节) | 手机、安防、车载等量产产品 |
| 多项式拟合LSC | 用多项式曲面拟合增益分布,计算时直接代入坐标 | 极低(几个系数) | 资源受限的嵌入式设备 |
我个人习惯用网格式LSC,因为它能更精细地适配不同镜头的阴影特性。多项式拟合虽然省资源,但遇到非对称阴影(比如镜头装歪了)就抓瞎了。
网格式LSC的工作流程
这里我画了一张流程图,帮你理清整个校正链路:
双线性插值:让增益平滑过渡
网格顶点之间的像素怎么算?用双线性插值。我举个例子:
// 假设像素位于网格 (i, j) 到 (i+1, j+1) 之间
// dx, dy 是归一化偏移量(0~1)
G00 = gain_grid[i][j]
G10 = gain_grid[i+1][j]
G01 = gain_grid[i][j+1]
G11 = gain_grid[i+1][j+1]
// 先插值两行
G_top = G00 * (1 - dx) + G10 * dx
G_bot = G01 * (1 - dx) + G11 * dx
// 再插值列方向
G_pixel = G_top * (1 - dy) + G_bot * dy
这样算出来的增益是连续平滑的,不会出现块状痕迹。我曾经见过一个方案,直接用最近邻取整,结果校正后的照片上全是马赛克一样的网格线——嗯,这种坑踩过一次就不会再犯了。
增益上限与噪声控制
⚠️ 注意:增益不是越大越好!
边缘增益过高会放大暗部噪声。我建议设置一个增益上限(比如3.0倍),超过上限的区域用更保守的校正策略,或者配合后续的降噪模块一起处理。
实际项目中,我一般这样配置增益上限:
- 手机摄像头:增益上限 2.0~2.5 倍(传感器信噪比好)
- 安防监控:增益上限 2.5~3.0 倍(暗光场景多)
- 车载摄像头:增益上限 1.8~2.2 倍(安全优先,避免噪声误判)
校准流程:如何生成增益表
增益表不是拍脑袋定的,得靠实际标定。标准流程如下:
- 拍摄均匀光源:用积分球或均匀白板,拍一张RAW图
- 计算参考值:取图像中心区域的平均亮度作为参考
- 逐网格计算增益:每个网格顶点的增益 = 参考亮度 / 该顶点亮度
- 平滑处理:对增益表做低通滤波,去除噪声和异常点
- 量化存储:将浮点增益转为定点数(比如Q8.8格式),写入设备
💡 我的经验:标定时一定要保证光源均匀性在99%以上。有一次我用普通灯箱标定,结果灯箱本身就有中心亮边缘暗的问题,LSC反而把均匀画面校正成了中心暗边缘亮——这笑话闹得可不小。
多项式拟合LSC:轻量级方案
如果存储空间实在紧张,可以用多项式拟合。常见的是二阶或三阶多项式:
Gain(x, y) = a0 + a1·r² + a2·r⁴ + a3·r⁶
其中 r = sqrt((x - cx)² + (y - cy)²) / R_max
只需要存4~6个系数,计算时直接代入坐标。但缺点也很明显——遇到非对称阴影就无能为力了。我建议只在低端MCU或FPGA资源紧张时用这种方案。
两种方案的对比总结
| 对比维度 | 网格式LSC | 多项式拟合LSC |
|---|---|---|
| 校正精度 | 高(可适配任意阴影形状) | 中(仅适配对称阴影) |
| 存储开销 | 中等(几百字节~几KB) | 极低(几十字节) |
| 计算复杂度 | 低(查表+插值) | 中(多项式求值) |
| 调试难度 | 低(可视化增益表) | 高(系数调优靠经验) |
| 量产适配 | 每颗镜头单独标定 | 同一型号共用系数 |
我个人更推荐网格式LSC,尤其是现在存储成本越来越低,多花几百字节换来的校正精度提升,值。
核心要点回顾:
- 镜头阴影的本质是光衰减+机械遮挡,导致边缘亮度下降
- 增益补偿模型通过给每个像素乘一个系数来校正亮度
- 网格式LSC用双线性插值实现平滑校正,精度高、易调试
- 多项式拟合LSC省存储,但只适合对称阴影场景
- 增益上限和标定光源均匀性是工程落地的关键坑点