第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看似简单,但暗光下要做好,需要下功夫。下一章咱们聊AWB,白平衡校正。到时候见。