2. RAW域处理:黑电平校正、镜头阴影校正、坏点校正

RAW域处理,说白了就是Sensor把光信号转成电信号后,我们做的第一道“清洗”工作。这时候数据还是最原始的状态,没经过任何美化。我经常跟团队说:RAW域处理做不好,后面调得再花哨也是白搭。

这一章我们重点聊三个基础操作:黑电平校正(BLC)、镜头阴影校正(LSC)、坏点校正(DPC)。它们各自解决什么问题?参数怎么配?踩过哪些坑?咱们一个一个说。

2.1 黑电平校正(BLC)

2.1.1 什么是黑电平?

你想想看,Sensor在完全无光的环境下,输出值应该是0对吧?但实际上不是。因为电路本身有暗电流,ADC也有偏置,所以输出会有一个固定的底数。这个底数,就是黑电平。

我遇到过一款Sensor,标称黑电平是64,结果量产批次测出来有的跑到72。如果不校正,暗部就会发灰,整个画面的黑场都不干净。

核心公式:

校正后像素值 = 原始像素值 - 黑电平值

注意:校正后要做Clamp,防止出现负值。

2.1.2 校正方法

常见的做法有两种:

  • 全局固定值法:从Sensor的OTP或寄存器读一个固定值,全图统一减掉。简单,但精度一般。
  • 动态OB(Optical Black)法:利用Sensor边缘的遮光像素(OB像素)实时计算黑电平。我个人更推荐这种,能适应温度变化。
方法 优点 缺点 适用场景
全局固定值 实现简单,计算量小 无法适应温度漂移 低成本、温度稳定的场景
动态OB法 实时跟踪,精度高 需要OB像素区域,算法稍复杂 高端手机、车载摄像头

2.1.3 参数配置要点

配置BLC时,我建议你关注这几个参数:

  • 黑电平值:10bit Sensor通常在64左右,12bit的在256左右。具体看Datasheet。
  • Clamp下限:一般设为0,防止负值溢出。
  • OB行/列选择:有些Sensor的OB像素在顶部几行,有些在左右两侧。选错了,校正就偏了。

我曾经踩过的坑:

有一次我直接用固定值64做BLC,结果在高温环境下暗部出现紫色条纹。后来换成动态OB法,问题才解决。温度对黑电平的影响比你想象的大,千万别忽视。

2.2 镜头阴影校正(LSC)

2.2.1 阴影从哪来?

镜头本身的光学特性决定了:中心区域进光量多,边缘区域进光量少。再加上Sensor的像素角度响应,边缘会更暗。这就是镜头阴影,也叫Lens Shading。

我调过一款广角镜头,边缘亮度只有中心的40%。如果不做LSC,拍出来的照片中间亮、四周暗,像戴了个墨镜。

2.2.2 校正原理

LSC的核心思路很简单:给每个像素乘一个增益系数。中心区域增益小,边缘区域增益大。

校正公式:

校正后像素值 = 原始像素值 × Gain(x, y)

其中Gain(x, y) 通常用网格查表 + 双线性插值实现。

2.2.3 增益网格与插值

实际工程中,我们不会给每个像素单独算增益。而是把图像分成网格,比如17×13个网格点,每个点存一个增益值。中间的点通过插值得到。

我建议你注意网格密度:网格太疏,校正后会有块状痕迹;网格太密,存储和计算开销大。一般1080P分辨率用17×13就够用。

网格密度 优点 缺点 推荐分辨率
9×7 存储小,速度快 校正精度低,可能有条纹 VGA以下
17×13 精度与性能平衡 中等存储 1080P
33×25 校正精度高 存储大,计算量大 4K以上

2.2.4 参数配置流程

  1. 采集灰卡图像:用均匀光源拍一张灰卡,保证画面亮度均匀。
  2. 计算增益矩阵:以中心区域为参考,计算每个网格点的增益。
  3. 平滑处理:对增益矩阵做低通滤波,防止校正后出现高频噪声。
  4. 写入Sensor或ISP寄存器:把增益表烧录到设备中。

小技巧:

采集灰卡时,光源角度要尽量模拟实际使用场景。我见过有人用点光源拍灰卡,结果校正后边缘反而过亮。用均匀面光源才是正解。

2.3 坏点校正(DPC)

2.3.1 坏点的分类

Sensor在生产过程中,难免会有一些像素点失效。坏点分三种:

  • 亮点(Hot Pixel):输出值一直很高,像个小太阳。
  • 暗点(Dead Pixel):输出值一直很低,像个小黑洞。
  • 闪烁点(Stuck Pixel):输出值固定不变,不随光照变化。

我记得有一次调试,画面左上角总有一个白点,怎么调都去不掉。后来用DPC工具一扫描,发现是个亮点。校正之后,画面就干净了。

2.3.2 校正策略

DPC分两步:检测和校正。

检测方法:

  • 静态检测:出厂前用全黑和全白图像扫描,生成坏点列表。
  • 动态检测:运行时实时判断,比如当前像素与周围8邻域的差值超过阈值,就标记为坏点。

校正方法:

  • 中值滤波:用周围像素的中值替换坏点。简单,但会损失细节。
  • 线性插值:根据相邻像素的梯度方向插值。效果更好,但计算量大。
校正方法 效果 计算量 适用场景
中值滤波 一般,可能模糊 低 低端芯片、实时性要求高
线性插值 较好,保留边缘 中 主流手机、相机
自适应插值 优秀,细节保留好 高 高端影像设备

2.3.3 参数配置建议

配置DPC时,我习惯这样调:

  • 检测阈值:设得太低,会把正常像素误判为坏点;设得太高,会漏检。一般先设30(8bit数据),再根据效果微调。
  • 校正强度:不要一次拉满。先做轻度校正,观察效果,再逐步加强。
  • 坏点列表:静态列表要定期更新,因为坏点会随着使用时间增加。

注意:

动态DPC在低光照环境下容易误检。因为噪声大,正常像素的邻域差异也会很大。我建议在低光照时降低检测灵敏度,或者直接切换到静态列表模式。

2.4 本章知识体系

下面这张图帮你梳理三个模块的关系:

RAW域处理知识体系 Sensor RAW数据 黑电平校正 BLC 镜头阴影校正 LSC 坏点校正 DPC 校正后RAW数据 处理顺序说明: BLC → LSC → DPC 是推荐的流水线顺序。 先做BLC去除底噪,再做LSC补偿亮度,最后DPC修复坏点。

2.5 小结

RAW域处理是ISP流水线的基石。BLC解决黑底问题,LSC解决亮度均匀性问题,DPC解决像素缺陷问题。三个模块配合好了,后面的AWB、Demosaic、Gamma等模块才能发挥正常效果。

我个人习惯在项目初期就把这三个模块的参数调稳,不然后面返工的成本太高。你想想看,如果BLC没调好,暗部偏色,后面AWB怎么调都调不回来。所以,基础打牢,后面才省心。