第1章:黑电平校正(BLC)实战

大家好,我是你们的老朋友。今天咱们来聊聊黑电平校正,也就是BLC。

说实话,BLC在ISP pipeline里看着不起眼,但它的影响特别大。尤其是暗光场景,调不好BLC,后面做啥都是白费力气。我刚开始做ISP的时候,就吃过这个亏——有一次暗光下拍出来的照片偏紫,我折腾了三天,最后发现是BLC参数没设对。

1.1 BLC原理:到底在校正什么?

先说说BLC是干嘛的。说白了,就是让传感器在完全没光的时候,输出值应该是0。但现实是,传感器即使在全黑环境下,也会输出一个非零值。这个值,就是黑电平。

为什么会这样?因为传感器本身有暗电流。暗电流是啥?你可以理解为传感器像素在“偷懒”的时候也会产生电荷。温度越高,暗电流越大。我做过测试,温度每升高10度,暗电流差不多翻一倍。

BLC的核心公式其实很简单:

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

嗯,就这么简单。但实际做起来,难点在于——黑电平值不是固定的。

关键点:黑电平值会随温度、增益、曝光时间变化。暗光下,增益高、曝光时间长,黑电平偏移会更明显。

1.2 暗电流的影响:你不得不防的“隐形杀手”

暗电流这东西,我把它叫做“隐形杀手”。为什么?因为它在亮光下几乎看不出来,但在暗光下,它会毁掉你的图像。

我举个例子。有一次我在调试一款手机摄像头,暗光下拍出来的照片,暗部区域有明显的绿色条纹。一开始我以为是CFA出了问题,后来排查发现,是暗电流导致的BLC不准。

暗电流的影响主要有三点:

  • 偏色:不同通道的暗电流不一样,导致暗部偏色。最常见的是偏紫或偏绿。
  • 噪声放大:暗电流本身有噪声,BLC校正后,噪声会被放大。
  • 动态范围损失:黑电平偏移会吃掉一部分动态范围,暗部细节丢失。

注意:暗电流和温度强相关。如果你在实验室25度下调好的BLC参数,拿到户外35度下用,效果会大打折扣。我曾经就因为这个被客户投诉过。

1.3 BLC参数调试方法:实战经验分享

好了,理论说完了,咱们来点实际的。BLC参数怎么调?我分享一套我自己常用的方法。

1.3.1 准备工作

你需要一个完全黑暗的环境。我习惯用暗箱,或者直接用镜头盖盖住。注意,要确保没有任何漏光。

然后,拍摄一组全黑图像。建议拍10-20帧,取平均值,这样可以减少随机噪声的影响。

1.3.2 计算黑电平值

对于每个通道(R、Gr、Gb、B),分别计算平均值。我一般用下面的方法:

// 伪代码示例
for each channel:
    sum = 0
    for each pixel in channel:
        sum += pixel_value
    black_level = sum / pixel_count

注意,要避开OB(光学黑)区域。OB区域是传感器专门用来测黑电平的,但它的值和有效像素区不完全一样。我见过有人直接用OB值代替全图黑电平,结果偏色了。

1.3.3 设置BLC参数

得到每个通道的黑电平后,设置到ISP寄存器里。不同平台设置方式不同,但原理一样。

通道 黑电平值(10-bit) 说明
R 64 红色通道
Gr 66 绿色通道(R行)
Gb 65 绿色通道(B行)
B 63 蓝色通道

上面这组数据是我从某款传感器上实测的。你看,不同通道的黑电平不一样,Gr和Gb也有差异。这就是为什么BLC要分通道做。

1.3.4 验证效果

设置完参数后,再拍一张全黑图。理想情况下,所有像素值应该接近0。但实际上,会有一些波动。我一般要求平均值在±2以内。

小技巧:验证的时候,可以用直方图工具看。如果直方图峰值在0附近,且分布对称,说明BLC调好了。如果峰值偏左或偏右,说明黑电平没扣干净。

1.4 暗光下的BLC特殊处理

暗光场景是BLC的“大考”。为什么?因为暗光下,信号本身很弱,黑电平的偏移会被放大。

我总结了几条暗光下BLC的特殊处理原则:

  • 动态BLC:不要用固定值。根据增益和曝光时间,动态调整黑电平。我习惯做一个查找表(LUT),把不同增益下的黑电平值存起来。
  • 温度补偿:如果传感器有温度传感器,可以加入温度补偿。温度每升高10度,黑电平增加约5-10个DN(取决于传感器)。
  • 局部BLC:有些传感器,暗电流在画面不同区域不一样。这时候可以用局部BLC,把画面分成多个区域,分别计算黑电平。
  • 软阈值处理:校正后,有些像素值会变成负数。这时候要做软阈值处理,把负值截断到0。但注意,直接截断会丢失信息。我一般用一个小偏移量,比如把黑电平设得比实际值低1-2个DN,避免负值。

避坑指南:我曾经在暗光下把BLC设得太狠,结果暗部细节全没了。后来发现,黑电平扣多了,会把有效信号也扣掉。记住,BLC的目的是校正,不是消除。留一点余量,反而更好。

知识体系:BLC核心逻辑

下面这张图,是我自己画的BLC核心逻辑。你看一眼,就能明白整个流程。

BLC核心逻辑流程图 原始像素值 计算黑电平值(分通道) 校正:原始值 - 黑电平值 校正后像素值 影响因素 温度 增益 曝光时间 暗光特殊处理 动态BLC 温度补偿 局部BLC

这张图把BLC的流程和影响因素都串起来了。你仔细看,核心就是“计算黑电平”和“校正”两步。但影响因素和特殊处理,才是实战中的关键。

好了,这一章的内容就到这里。BLC看似简单,但暗光下要做好,需要下功夫。下一章咱们聊AWB,白平衡校正。到时候见。


专注资料整理