2. 镜头阴影原理:光学渐晕与色彩阴影的成因、Lens Shading数学模型、高通平台LSC硬件模块
镜头阴影,说白了就是拍出来的照片四角发暗、中间亮。你拿手机对着白墙拍一张,如果四角明显比中心暗,那就是镜头阴影。我入行那会儿第一次调模组,看到raw图四角发紫,还以为是sensor坏了,折腾了两天才发现是镜头阴影没校正。
这一节我们就把镜头阴影的底裤扒干净。从物理成因到数学建模,再到高通硬件怎么处理,一条线讲透。
2.1 光学渐晕与色彩阴影的成因
镜头阴影分两种:亮度上的渐晕(Vignetting)和颜色上的色彩阴影(Color Shading)。它们经常同时出现,但根因不同。
2.1.1 光学渐晕(Luma Shading)
光学渐晕就是画面从中心到边缘亮度逐渐下降。原因有三个:
- 几何衰减(cos⁴定律):镜头中心的光线垂直入射,边缘的光线斜着进来。斜入射的光通量按cos⁴θ衰减。θ是入射角,角度越大,衰减越狠。这是物理定律,改不了。
- 镜头遮挡(机械渐晕):镜头筒、滤镜支架、光圈叶片在边缘处会物理遮挡一部分光线。这个跟镜头结构设计有关,换镜头或改结构可以缓解。
- 像面照度不均匀:即使不考虑遮挡,镜头本身的透光率从中心到边缘也不是均匀的。镀膜工艺、镜片曲率都会影响。
2.1.2 色彩阴影(Color Shading)
色彩阴影比亮度渐晕更烦人。它表现为四角偏色——通常是偏绿或偏紫。为什么会这样?
- 微透镜偏移:sensor每个像素上面有个微透镜,用来聚光。边缘像素的微透镜需要向中心偏移(Chief Ray Angle匹配)。如果偏移量不准,不同颜色通道的感光效率就不一样。Bayer阵列里G通道通常受影响最大。
- 红外截止滤光片(IRCF)角度依赖:IRCF的透过率曲线随入射角变化。边缘光线斜着穿过IRCF,近红外波段被截止得更厉害,导致R通道衰减比B通道多,画面就偏蓝绿。
- 镜头色差:不同波长的光在镜头里折射率不同。R和B光线在像面上的落点有微小偏移,造成边缘颜色分离。
2.2 Lens Shading数学模型
校正镜头阴影,本质上就是给每个像素乘一个增益系数。这个增益系数随像素位置变化,也随颜色通道变化。
2.2.1 增益模型
最常用的模型是多项式曲面拟合。假设图像中心为(0,0),像素坐标为(x,y),归一化半径为r:
r = sqrt(x² + y²) / R_max
Gain(r) = 1 + a₁·r² + a₂·r⁴ + a₃·r⁶
这里R_max是图像对角线的一半。a₁、a₂、a₃是拟合系数。为什么只用偶次项?因为镜头阴影是旋转对称的,奇次项会引入不对称。
对于色彩阴影,每个通道独立拟合:
Gain_R(r) = 1 + a_R1·r² + a_R2·r⁴ + a_R3·r⁶
Gain_Gr(r) = 1 + a_Gr1·r² + a_Gr2·r⁴ + a_Gr3·r⁶
Gain_Gb(r) = 1 + a_Gb1·r² + a_Gb2·r⁴ + a_Gb3·r⁶
Gain_B(r) = 1 + a_B1·r² + a_B2·r⁴ + a_B3·r⁶
2.2.2 网格模型
多项式模型在极端广角下拟合精度不够。这时候用网格模型更靠谱:把图像分成M×N个网格,每个网格顶点存一个增益值,中间像素双线性插值。
| 模型类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 多项式(2阶/4阶/6阶) | 参数少,存储小,硬件实现简单 | 广角镜头拟合误差大 | FOV < 70° 的普通镜头 |
| 网格(9×9 / 17×17) | 精度高,能处理不对称阴影 | 参数多,标定工作量翻倍 | FOV > 70° 或双摄/多摄模组 |
| 混合模型 | 兼顾精度和存储 | 实现复杂,调试周期长 | 旗舰机主摄 |
我个人习惯:量产项目优先用网格模型。虽然标定麻烦一点,但鲁棒性好。多项式模型在实验室里拟合得很漂亮,一上产线,镜头批次波动就露馅了。
2.3 高通平台LSC硬件模块
高通的ISP里有一个专门的硬件模块叫LSC(Lens Shading Correction)。它在Bayer域处理,位置在BPC(坏点校正)之后、Demosaic之前。
2.3.1 硬件架构
LSC模块的核心是一个二维增益查找表(LUT)和双线性插值器。大致流程如下:
2.3.2 关键寄存器与配置
高通LSC模块的配置项不少,我挑几个最关键的:
- LSC_ENABLE:模块使能位。调试阶段建议先关掉,看原始阴影有多严重。
- LSC_GAIN_TABLE:增益表基地址。网格模式下,这个表存的是每个网格顶点的增益值,按R/Gr/Gb/B顺序排列。
- LSC_GAIN_MODE:0=多项式模式,1=网格模式。我建议量产一律用网格模式。
- LSC_GAIN_CLIP:增益上限。默认4.0x,但广角镜头可能需要放宽到6.0x。注意:增益太大噪声也会被放大,四角噪点会炸。
- LSC_GRID_SIZE:网格尺寸,常见配置9×9或17×17。网格越密,精度越高,但标定数据量也越大。
2.3.3 高通平台的特殊处理
高通LSC模块有几个特色功能,值得单独说一下:
- Gr/Gb独立校正:Bayer阵列里Gr和Gb的感光效率有差异,高通允许分别配置增益。这个在低照度下特别有用。
- 双摄LSC同步:主摄和副摄的LSC参数可以独立加载,但高通提供了一个同步寄存器,保证双帧曝光时两路LSC同时生效,避免帧间闪烁。
- 在线更新:LSC增益表可以在逐帧之间更新。变焦镜头或者多光圈场景下,可以动态切换LSC参数。
2.4 本章小结
镜头阴影校正,说难不难,说简单也不简单。物理成因就那几条,数学模型也就多项式或网格两种选择。但真正落地的时候,你会遇到各种奇葩问题:镜头批次波动、模组组装公差、IRCF镀膜一致性……
高通LSC硬件模块给了你足够的自由度——4通道独立增益、网格模式、在线更新。用好这些工具,再配合扎实的标定流程,镜头阴影就不是什么大问题。