第3章 黑电平校正(BLC):暗部偏色的根源与解法
黑电平校正,圈里人常叫BLC。这玩意儿看着简单,但坑特别多。我见过不少调试新手,花了两周调AWB和CCM,结果暗部偏色怎么都压不住——最后发现是BLC没设对。
说白了,黑电平就是传感器在完全无光环境下输出的“假信号”。你想想看,一个像素理论上全黑时应该输出0,但实际电路总会漏点电荷进来。这个底数不扣干净,暗部就会发绿、发紫,甚至出现奇怪的色斑。
3.1 黑电平产生的物理原因
为什么会有黑电平?三个主要原因:
- 暗电流:硅基半导体在热激发下产生电子-空穴对,温度越高暗电流越大。夏天户外35°C和冬天室内15°C,黑电平能差十几个LSB。
- 像素复位噪声:CMOS传感器每行复位时残留的电荷,不同行之间会有细微差异。
- ADC偏移:模数转换器本身有个固定的底数,通常在16-64 LSB之间。
我在项目中遇到过一款OV的传感器,常温下黑电平只有32 LSB,但放到-10°C低温箱里,直接掉到8 LSB。如果不做温度补偿,暗部直接偏蓝。
核心结论:黑电平不是固定值,它随温度、增益、曝光时间变化。联咏平台支持多组BLC参数,就是为了应对这些变化。
3.2 联咏平台BLC参数体系
联咏的BLC模块,我习惯把它分成三层:
| 层级 | 参数名 | 作用范围 | 典型值 |
|---|---|---|---|
| 全局 | blc_offset | 整帧所有像素 | 16-64 LSB |
| 行级 | blc_line_correct | 每行独立校正 | 0-15 LSB |
| 通道 | blc_r/g/b | R/G/B通道分别设置 | R比G高2-4 LSB |
嗯,这里要注意:通道独立的BLC是解决暗部偏色的关键。因为传感器R/G/B像素的量子效率和暗电流特性不同,如果四个通道用同一个BLC值,暗部一定会偏色。
我的调试习惯:先调全局offset,再调通道差异,最后用行校正修残留条纹。不要一上来就动行校正,容易把画面调花。
3.3 BLC调试流程
我总结了一套“三步走”的方法,联咏平台通用:
- 采集暗帧:盖上镜头盖,用遮光布包严实。曝光时间设成正常场景的1倍、2倍、4倍,各拍10帧。
- 计算均值:对每帧计算R/Gr/Gb/B四个通道的平均值。联咏的ISP Tool可以直接导出RAW数据,省得自己写脚本。
- 写入参数:把均值填入blc_r/blc_gr/blc_gb/blc_b。注意Gr和Gb要分开设,很多传感器这两个通道有差异。
我曾经遇到一个项目,暗部总是偏紫。查了三天,最后发现是Gr和Gb差了3个LSB。分开设之后,偏色立刻消失。你想想看,3个LSB在亮部根本看不出来,但在暗部就是明显的色偏。
避坑指南:千万不要用单帧暗帧来标定BLC。传感器有随机噪声,单帧的波动可能达到5-10 LSB。至少取10帧平均,才能得到稳定的基准值。
3.4 联咏平台代码示例
下面是一段联咏ISP Tool的BLC配置示例,我加了注释:
// 黑电平校正参数结构体
typedef struct {
UINT16 blc_offset; // 全局偏移,范围0-255
UINT16 blc_r; // R通道黑电平
UINT16 blc_gr; // Gr通道黑电平
UINT16 blc_gb; // Gb通道黑电平
UINT16 blc_b; // B通道黑电平
UINT8 blc_line_en; // 行校正使能
UINT8 blc_line_thr; // 行校正阈值
} BLC_Param;
// 典型配置:IMX335传感器,增益1x,曝光30ms
BLC_Param blc_cfg = {
.blc_offset = 32, // 全局底数32 LSB
.blc_r = 34, // R通道略高
.blc_gr = 32, // Gr通道基准
.blc_gb = 31, // Gb通道略低
.blc_b = 33, // B通道
.blc_line_en = 1, // 开启行校正
.blc_line_thr = 8 // 行差异超过8 LSB才校正
};
联咏平台还支持增益自适应BLC。当ISP增益变化时,BLC值会跟着缩放。这个功能默认开启,但要注意:如果传感器本身有非线性,自适应反而会引入误差。我一般会在增益超过4倍时,手动重新标定一组BLC。
3.5 BLC与暗部偏色的关系
为什么BLC不准会导致偏色?我画个图你就明白了:
你看,R通道实际黑电平是34 LSB,但错误配置用了32 LSB。这2 LSB的差值在亮部(比如200 LSB以上)几乎没影响,但在暗部(10-30 LSB)就是10%以上的误差。人眼对暗部色差特别敏感,所以偏色一下子就暴露了。
3.6 实战中的BLC调优技巧
最后分享几个我在联咏平台上积累的经验:
- 温度补偿要开:联咏的BLC模块内置了温度查表,把-20°C到60°C的BLC值填进去,能省很多事。
- 多增益标定:至少标定1x、2x、4x、8x四组BLC。联咏支持增益分段线性插值,中间值会自动算。
- 暗部偏绿:通常是Gb通道BLC偏低,把Gb加2-4 LSB试试。
- 暗部偏紫:R通道BLC偏低,或者B通道BLC偏高,调整对应通道即可。
一个小技巧:调试时把画面亮度压到10-20 LSB,用色温计看灰卡。如果R/G/B三通道的比值偏离1:1:1超过5%,就是BLC没调准。
嗯,BLC这部分就讲到这里。记住一句话:暗部偏色,八成是BLC的锅。把黑电平标准了,后面的AWB和CCM才能发挥正常效果。