3. LSC校正参数提取:从均匀光源RAW图到增益LUT
LSC(Lens Shading Correction,镜头阴影校正)参数提取是整个ISP调优流程中第一个需要精确标定的环节。其核心目标是通过采集均匀光源下的RAW图像,计算出每个像素或网格区域相对于中心区域的亮度衰减比例,并生成一张增益查找表(LUT),供ISP硬件在运行时实时补偿。
3.1 均匀光源采集规范
参数提取的质量高度依赖采集环境。必须使用标准均匀光源,常见方案包括:
| 光源类型 | 适用场景 | 均匀性要求 | 注意事项 |
|---|---|---|---|
| 积分球 | 实验室标定、高精度调优 | 面均匀性 > 98% | 成本高,需定期校准光源色温 |
| 灰卡(DNP/爱色丽) | 产线快速标定、现场调优 | 面均匀性 > 95% | 需保证灰卡平整、无褶皱,避免环境杂光 |
| LED均匀面板 | 嵌入式开发板调试 | 面均匀性 > 90% | 注意LED阵列的周期性纹波干扰 |
实操建议: 采集RAW图时,务必关闭自动增益(AGC)、自动白平衡(AWB)和任何数字增益模块。曝光时间应调整到使中心区域RAW值落在最大值的40%~60%之间,避免饱和或欠曝引入非线性误差。
3.2 网格划分与增益计算流程
现代ISP通常不逐像素存储增益(数据量过大),而是将图像划分为M×N个网格,每个网格计算一个代表增益值。典型网格配置为17×13或33×25,具体取决于ISP硬件能力。
核心计算步骤:
- 采集RAW图: 在均匀光源下拍摄至少3帧RAW图,取平均以降低随机噪声。
- 提取Bayer通道: 分离R、Gr、Gb、B四个通道的像素值。
- 网格划分: 将图像划分为M×N个矩形网格,每个网格包含若干像素。
- 计算网格均值: 对每个网格内的同通道像素取算术平均。
- 确定参考点: 通常取图像几何中心网格的均值作为参考值(Ref)。
- 计算增益: 每个网格的增益 = Ref / 网格均值。
- 生成LUT: 将增益值按ISP要求的格式(定点数或浮点数)写入LUT。
3.3 增益计算的数学细节
对于Bayer阵列中的每个通道,增益计算遵循以下公式:
// 伪代码:LSC增益计算
// 输入:raw_image (H x W), grid_rows = M, grid_cols = N
// 输出:gain_lut[M][N] (每个网格一个增益值)
// 步骤1:计算每个网格的均值
for (int g_row = 0; g_row < M; g_row++) {
for (int g_col = 0; g_col < N; g_col++) {
float sum = 0.0f;
int count = 0;
// 遍历该网格内的所有像素
for (int y = g_row * block_h; y < (g_row+1) * block_h; y++) {
for (int x = g_col * block_w; x < (g_col+1) * block_w; x++) {
// 只取当前通道的像素(例如R通道)
if ((y % 2 == 0) && (x % 2 == 0)) { // 假设RGGB
sum += raw_image[y][x];
count++;
}
}
}
grid_mean[g_row][g_col] = sum / count;
}
}
// 步骤2:取中心网格均值作为参考
int center_row = M / 2;
int center_col = N / 2;
float ref_value = grid_mean[center_row][center_col];
// 步骤3:计算增益
for (int g_row = 0; g_row < M; g_row++) {
for (int g_col = 0; g_col < N; g_col++) {
gain_lut[g_row][g_col] = ref_value / grid_mean[g_row][g_col];
}
}
关键陷阱: 如果网格内像素数量过少(例如网格尺寸小于4×4),均值受噪声影响较大,会导致增益LUT出现高频抖动。建议每个网格至少包含16个同通道像素。对于1080p图像,17×13网格下每个网格约含120个同通道像素,统计稳定性较好。
3.4 LUT数据格式与存储
不同ISP芯片对LUT的格式要求不同,常见格式包括:
| 格式类型 | 位宽 | 表示范围 | 典型应用 |
|---|---|---|---|
| 定点Q4.8 | 12-bit | 0.0 ~ 15.996 | 高通、联发科平台 |
| 定点Q5.11 | 16-bit | 0.0 ~ 31.999 | 安霸、海思平台 |
| IEEE 754 float | 32-bit | 宽动态范围 | FPGA、PC端标定 |
以Q4.8格式为例,实际增益值 = 存储值 / 256。例如增益1.5存储为384(1.5 × 256 = 384)。
3.5 四通道独立LUT的必要性
由于Bayer阵列中R、Gr、Gb、B四个通道的光学响应曲线不同,必须为每个通道独立生成LUT。Gr和Gb虽然都是绿色通道,但由于像素位置差异(Gr位于R行,Gb位于B行),其微透镜耦合效率存在细微差别,高端ISP会分别标定。
3.6 增益LUT的后处理与平滑
直接从RAW数据计算出的增益LUT可能包含噪声和局部异常值,需要进行后处理:
- 中值滤波: 对增益矩阵进行3×3中值滤波,去除孤立的坏点增益。
- 双线性插值: 如果ISP硬件支持,可以只存储稀疏网格(如9×7),运行时通过双线性插值得到每个像素的增益。
- 边界裁剪: 图像四角的增益通常最大,需检查是否超过ISP允许的最大增益值(通常为4.0或8.0),超限则裁剪并记录警告。
- 对称性检查: 理想镜头阴影呈径向对称,如果左右或上下增益差异超过5%,应检查光源均匀性或镜头装配。
工程经验: 在产线标定中,建议采集5组不同色温(D65、D50、A光源、TL84、H光源)下的LSC LUT。虽然LSC主要校正亮度衰减,但不同波长光的折射率差异会导致阴影轮廓轻微变化。高端ISP方案会存储多色温LUT,运行时根据AWB色温结果动态切换或插值。
3.7 验证LUT正确性的快速方法
生成LUT后,必须进行验证:
- 回放验证: 将LUT应用到原始RAW图上,检查校正后的图像是否平坦。计算校正后图像四角与中心的亮度差,应小于2%。
- 伪彩检查: 在均匀灰卡下,校正后的图像不应出现明显的颜色偏移。如果出现红/蓝角,说明R/B通道的LUT增益比例不匹配。
- 网格可视化: 将增益LUT以热力图形式输出,正常应为中心低、四周高且径向平滑过渡。如果出现块状或条纹状异常,需检查网格划分或光源均匀性。
完成上述步骤后,LSC LUT即可固化到ISP的标定参数文件中,进入下一阶段的AWB校准流程。