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硬件能力。

核心计算步骤:
  1. 采集RAW图: 在均匀光源下拍摄至少3帧RAW图,取平均以降低随机噪声。
  2. 提取Bayer通道: 分离R、Gr、Gb、B四个通道的像素值。
  3. 网格划分: 将图像划分为M×N个矩形网格,每个网格包含若干像素。
  4. 计算网格均值: 对每个网格内的同通道像素取算术平均。
  5. 确定参考点: 通常取图像几何中心网格的均值作为参考值(Ref)。
  6. 计算增益: 每个网格的增益 = Ref / 网格均值。
  7. 生成LUT: 将增益值按ISP要求的格式(定点数或浮点数)写入LUT。
LSC增益LUT生成流程 LSC增益LUT生成流程 均匀光源采集 多帧RAW平均 Bayer通道分离 M×N网格划分 网格内均值计算 中心参考值提取 增益 = Ref / 网格均值 LSC LUT 输出 注意:每个Bayer通道 独立计算增益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会分别标定。

四通道独立LUT结构 四通道独立LSC LUT结构 R LUT 17×13 网格 增益范围 1.0~2.5 Gr LUT 17×13 网格 增益范围 1.0~2.2 Gb LUT 17×13 网格 增益范围 1.0~2.3 B LUT 17×13 网格 增益范围 1.0~3.0 Gr与Gb通道增益差异通常在0.05~0.15之间 合并为单绿色LUT会引入固定色偏(绿色网格纹)

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后,必须进行验证:

  1. 回放验证: 将LUT应用到原始RAW图上,检查校正后的图像是否平坦。计算校正后图像四角与中心的亮度差,应小于2%。
  2. 伪彩检查: 在均匀灰卡下,校正后的图像不应出现明显的颜色偏移。如果出现红/蓝角,说明R/B通道的LUT增益比例不匹配。
  3. 网格可视化: 将增益LUT以热力图形式输出,正常应为中心低、四周高且径向平滑过渡。如果出现块状或条纹状异常,需检查网格划分或光源均匀性。
LSC校正前后对比 LSC校正前后对比示意 校正前 中心亮度: 200 四角亮度: 120 衰减: 40% LSC 校正后 中心亮度: 200 四角亮度: 196 均匀性: 98%

完成上述步骤后,LSC LUT即可固化到ISP的标定参数文件中,进入下一阶段的AWB校准流程。