3. LSC 阴影校正原理
镜头阴影(Lens Shading)是 CMOS 图像传感器普遍存在的亮度与色彩不均匀现象。LSC(Lens Shading Correction)通过为每个像素点施加独立的增益系数来补偿这种不均匀性。本章深入解析增益矩阵原理、网格与插值算法、以及 R/G/B 三通道独立校正机制,为后续参数调试奠定理论基础。
3.1 增益矩阵原理
增益矩阵是 LSC 校正的核心数据结构。ISP 硬件将图像传感器靶面划分为 M×N 个网格(Grid),每个网格顶点存储一个 16-bit 或 20-bit 的增益值。校正时,每个像素的最终增益由相邻四个网格点的增益值通过插值计算得到。
- 网格尺寸(Grid Size): 常见配置为 17×13、33×25、65×49。网格越密,校正精度越高,但存储开销和计算量也越大。
- 增益精度: 通常为 16-bit 定点数,整数部分 4-bit,小数部分 12-bit,表示范围 1.0x ~ 16.0x。
- 对称性: 多数传感器阴影呈中心对称,可利用四分之一或八分之一对称性减少存储量。
3.2 网格(Grid)与插值算法
ISP 硬件在接收到图像数据后,逐像素计算其所在的网格单元,然后通过插值算法从相邻四个网格顶点获取该像素的校正增益。瑞芯微 RK 平台支持两种插值模式:双线性插值(Bilinear)和双三次插值(Bicubic)。
3.2.1 双线性插值(Bilinear)
双线性插值是最常用的 LSC 插值算法。对于像素点 P(x,y),其所在的网格单元由四个顶点 G₀₀、G₀₁、G₁₀、G₁₁ 围成。首先在水平方向进行两次线性插值,再在垂直方向进行一次线性插值。
// 双线性插值伪代码
// 输入:四个网格顶点增益 G00, G01, G10, G11
// 归一化坐标 dx, dy (0.0 ~ 1.0)
// 输出:像素点增益 G
// 水平插值
G_top = G00 * (1 - dx) + G01 * dx
G_bottom = G10 * (1 - dx) + G11 * dx
// 垂直插值
G = G_top * (1 - dy) + G_bottom * dy
3.2.2 双三次插值(Bicubic)
双三次插值使用 4×4 邻域共 16 个网格顶点进行加权计算,插值曲面在边界处一阶导数连续,图像更平滑。RK 平台在高端 ISP 模块中支持此模式。
// 双三次插值核心公式(简化)
// 使用 4×4 网格顶点 G[i][j] (i,j = 0..3)
// 权重函数 W(t) 基于三次多项式
W(t) = {
(a+2)|t|³ - (a+3)|t|² + 1, 0 ≤ |t| < 1
a|t|³ - 5a|t|² + 8a|t| - 4a, 1 ≤ |t| < 2
0, |t| ≥ 2
}
// 常用 a = -0.5 或 a = -0.75
// 最终增益 = ΣᵢΣⱼ G[i][j] * W(x - xᵢ) * W(y - yⱼ)
| 对比项 | 双线性插值(Bilinear) | 双三次插值(Bicubic) |
|---|---|---|
| 参与顶点数 | 2×2 = 4 个 | 4×4 = 16 个 |
| 计算复杂度 | 低(3 次乘法) | 高(16 次乘法 + 权重计算) |
| 平滑度 | C⁰ 连续(边界有折角) | C¹ 连续(边界平滑) |
| 硬件资源 | 约 2000 LUT | 约 8000 LUT |
| 适用场景 | 网格较密(≥33×25) | 网格较疏(≤17×13) |
| RK 平台支持 | 全系列 ISP 支持 | RK3588/RK3568 高端 ISP |
3.3 R/G/B 通道独立校正
由于不同波长光线在镜头中的折射率不同,R、G、B 三个通道的阴影分布存在显著差异。红色通道通常衰减最快,蓝色通道次之,绿色通道相对均匀。因此,LSC 必须为每个颜色通道维护独立的增益矩阵。
3.3.1 通道独立增益矩阵结构
在 RK 平台 ISP 驱动中,LSC 参数通常以如下结构体组织:
// RK LSC 通道独立增益矩阵结构(简化)
struct rkisp_lsc_config {
uint16_t grid_width; // 网格宽度(像素)
uint16_t grid_height; // 网格高度(像素)
uint8_t grid_x_num; // 水平网格点数
uint8_t grid_y_num; // 垂直网格点数
// 三通道独立增益表
uint16_t *r_gain_table; // R 通道增益表,长度 grid_x_num × grid_y_num
uint16_t *gr_gain_table; // Gr 通道增益表
uint16_t *gb_gain_table; // Gb 通道增益表
uint16_t *b_gain_table; // B 通道增益表
uint8_t interpolation; // 插值模式:0=Bilinear, 1=Bicubic
uint8_t gain_shift; // 增益移位量(用于定点数转浮点)
};
| 通道 | 中心亮度(归一化) | 四角亮度(归一化) | 所需增益 | 阴影衰减率 |
|---|---|---|---|---|
| R(红) | 1.00 | 0.45 | 2.22x | 55% |
| Gr(绿红) | 1.00 | 0.58 | 1.72x | 42% |
| Gb(绿蓝) | 1.00 | 0.56 | 1.79x | 44% |
| B(蓝) | 1.00 | 0.50 | 2.00x | 50% |
3.3.2 通道独立校正流程
在 ISP 流水线中,LSC 校正位于黑电平校正(BLC)之后、去马赛克(Demosaic)之前。此时图像数据仍为 Bayer 格式,每个像素只包含一个颜色通道的信息。ISP 硬件根据像素的 Bayer 位置选择对应的增益表进行校正。
3.3.3 通道间增益差异处理
在实际调试中,R/G/B 通道的增益差异会导致两个关键问题:
- 亮度阴影(Luma Shading): 四角亮度下降,所有通道都需要增益提升。
- 色彩阴影(Color Shading): 不同通道增益差异导致四角偏色,例如 R 通道增益不足时四角偏青。
3.4 本章小结
| 知识点 | 核心内容 | RK 平台实现要点 |
|---|---|---|
| 增益矩阵 | M×N 网格顶点存储增益值,逐像素插值计算 | 支持 17×13 ~ 65×49 网格,16-bit 精度 |
| 双线性插值 | 4 顶点参与计算,3 次乘法,C⁰ 连续 | 全系列 ISP 支持,低资源消耗 |
| 双三次插值 | 16 顶点参与计算,C¹ 连续,更平滑 | RK3588/RK3568 高端 ISP 支持 |
| 通道独立校正 | R/Gr/Gb/B 四组独立增益表 | Bayer 域校正,BLC 之后 Demosaic 之前 |
| 色彩阴影抑制 | 三通道增益比值接近 1:1:1 | 灰卡标定 + 通道独立微调 |