ISP-黑电平校正(BLC)

本文介绍了黑电平校正的基本概念及其在CMOS传感器中的作用。解释了为什么需要进行黑电平校正,并讨论了不同校正方法的选择依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

介绍

黑电平(Black Level Correction)也就是黑色的最低点,以8bit数据来说,指在经过一定校准的显示装置上,没有一行光亮输出的视频信号电平。定义图像数据为0时对应的信号电平。

原因

那么为什么要进行黑电平校正呢?原因如下:

  1. CMOS传感器采集的信息经过一系列转换生成原始RAW格式数据。以8bit数据为例,单个pixel的有效值是0~255,但是实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的pixel value在5(非固定)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。
  2. sensor的电路本身会存在暗电流,导致在没有光线照射的时候,像素单位也有一定的输出电压,暗电流这个东西跟曝光时间和gain都有关系,不同的位置也是不一样的。因此在gain增大的时候,电路的增益增大,暗电流也会增强,因此很多ISP会选择在不同gain下减去不同的bl的值。

Optical Black

每个sensor都有OB区域,CCD sensor初期成像效果较差,它会把top OB 和 side OB暴露给isp使用,这样isp可以自己估算不同区域不同的black level值,再分别处理。然而ob并不能真实的反映黑电平的值,因此目前很少有ISP或sensor去使用ob区域进行计算。

校正

现在的主流cmos sensor都是自己把black level已经处理完了。在isp部分减掉的其实不是black level,而是sensor统一做出来的pedestal。sensor端不会将bl减完,因为sensor输出不能为负数,若将bl减完,就等于小于0的部分直接就丢掉了,这样做会改变noise的分布。

算法

一般BLC模块会放在ISP比较靠前的位置,因为我们希望图像在进入其他模块之前能够还原最为真实的图像。有些sensor会在sensor内部集成BLC的模块,那么此时ISP里的BLC模块只做微调即可。

由于硬件设计人员在设计BLC模块时需要考虑效果和成本,因此目前市场上使用的ISP一般采用的方法是在sensor输出的图像上减去一个数值。

BLC各个通道均需要校正,目前比较常用的方法有:

  • 中值
  • 全局均值
  • 局部均值
  • 自定义

计算较为简单,这里不附代码了。

tuning

由于电源、PCB等各个原因,我们遇到的黑平衡并不是那么理想,如下两种情况,当然还有更糟的,这里不一一列举。
这里写图片描述
这里写图片描述

校正前需要根据图像的具体情况进行分析,若图像平面趋于平整,则推荐使用全帧均值;若图像出现一些峰值,有明显突出山峰等,推荐使用中值的方法;若出现某个角的值比较高,可能由于电源或者其他的原因引起的,则推荐使用局部计算的方法;此外,还有自定义、最大值等方法,需要根据不同图像的情况去选择方法,终其目的都是一样的。

以单通道为例,以下是黑电平校正的示意图:
黑电平校正

### ISP BLC电平校正)算法原理 #### 电平校正的目的 在图像信号处理(ISP)管道中,电平校正的主要目标是消除由暗电流噪声和感光元件非均匀性所造成的色彩偏差[^2]。这有助于提高最终成像质量。 #### 工作机制概述 为了达到上述目的,BLC通过调整传感器输出电压来补偿这些不理想因素的影响。具体来说: - **测量偏移量**:当相机处于完全遮蔽状态时获取数据作为参考点;此时像素应只记录环境温度下的电子活动即所谓的“暗帧”。此过程可以揭示每个像素位置上的固有偏置水平。 - **计算平均值或最小值**:对于整个画面或者特定区域内的所有有效像素求取其均值或是寻找最低亮度等级以代表全局性的暗基线。 - **应用修正因子**:基于之前得到的信息创建一个映射表用于后续正常拍摄期间实时减去相应的偏移从而使得实际场景反射光线强度能够被更准确地反映出来。 #### 实现方法举例 下面给出了一种简单的Python伪代码表示如何执行基本形式的电平校正操作: ```python import numpy as np def apply_black_level_correction(image, dark_frame): """ 对输入image应用电平校正 参数: image (numpy.ndarray): 输入待校正的原始图像数组. dark_frame (numpy.ndarray): 预先采集好的全条件下参考帧. 返回: corrected_image (numpy.ndarray): 经过电平校正后的图像. """ # 计算并应用偏移差分 offset = np.mean(dark_frame) corrected_image = image.astype(float) - offset # 确保不会出现负数像素值 corrected_image[corrected_image < 0] = 0 return corrected_image.clip(0, 255).astype(np.uint8) ``` 该函数接收两个参数一个是需要处理的目标图片另一个则是事先准备完毕的标准暗场样本(`dark_frame`)。它会首先估计整体偏移然后逐个元素相减最后再做一次裁剪确保结果落在合理范围内。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值