首页 > 其他分享 >ISP--Black Level Correction(黑电平矫正)

ISP--Black Level Correction(黑电平矫正)

时间:2023-11-17 21:22:07浏览次数:24  
标签:Level -- Correction OB 电平 扣除 RAW black sensor

图像的每一个像素点都是由一个光电二极管控制的,由二极管将电信号,转换为数字信号。

那么,我们知道了,图像的像素值是与电信号强度相关的。但是,我们得知道,每一个光电二极管要想工作,都得有一定的电压。这就是的,即使在外部没有光线照射的时候,Sensor也会有一定的电压。

那这不就会在成像时叠加到电信号中,影响成像了吗?

这就是Optical Black Correct(OBC)存在的意义。

OBC 指的是光学暗区矫正,是在成像时,将一部分暗电流减去,这部分电流也称之为黑电平。

那么,要如何获取黑电平的数值呢?

image

如上图所示,Sensor上预留了一些完全没有曝光的像素,通过读取这些像素值的大小,可以实时得到optical black level,此时sensor的输出RAW = Sensor input - optical black level 。

尽管这些black lines已经充分考虑到了不同column的OB不同,但因为在sensor边缘的black lines会受到PCB layout、电源纹波、模组结构设计等等因素的影响,故此时OB扣除的还是可能不准确,导致部分相机厂商不使用这个功能,但是在安防类或车载类摄像头上,部分厂商还是使能了OBC功能的。

然后考虑到sensor输出的信噪比,所以一般Sensor在输出数据时又会垫上一个基底(pedestal),此时sensor的RAW = sensor input - optical black level + pedestal。对于芯片处理来说,一般拿到的就是这个数据,此时需要在ISP处理流程的起始部分减去这个基底。在芯片内部一般叫做BLC,即Black Level Correct(黑电平校正)。

Again与OB分布

image

单纯的从Again上,OB的分布满足如下规律:
随着增益的增加,OB的均值可能不变,但是方差会变大。主要是因为sensor内OB扣除是在Again之后做的,所以随着Again的增加,噪声的影响增大,导致了OB的方差增加。

这个时候如果还是按照OB的均值扣除,画面暗处就有可能出现偏色的问题。例如下图所示:
image

可以看到右图在强行提亮后,暗处出现了很严重的偏紫问题。主要是因为OB方差的变大,如果ISP再按照OB平均值扣除,那么就可能会有较多的黑电平残留,受白平衡(Rgain、Bgain)的影响,故画面暗处会偏紫。

此时的解决方法为:

 1.多扣一点OB,缺点为破坏了噪声形态会引入较多噪点。

 2.分通道扣除OB,缺点为偏色的情况会受环境色温影响。

而且OB还会随着温度的变化而发生变化,如果OB的扣除没有跟随温度变化的话,也会出现偏色问题。

而且OB扣除可以在成RAW域前或后两个时间节点进行,而这也各有优缺点:

 1、OB在成RAW域图像之前扣除清晰度更优

 2、OB在成RAW域图像之后扣除则噪声更优

在ISP处理中,OB一般为第一个模块,当然也可以放在RAW域去噪之后。

最简单扣除OB的方法是减去均值,然后再对G通道做线性拉伸,举例来说就是

Goutput = Ginput*255/(255-Black Level)

做线性拉伸的原因是扣除OB后RGB通道均不饱和,而R、B通道因为白平衡增益(Rgain、Bgain)的存在可以达到饱和,Ggain的增益一般为1,这样在画面接近过曝的地方就会偏紫。

除了减去均值,还可以使用最大值、中值、局部均值等等方法扣除OB。此外,因为OB跟增益相关,故可以根据不同的增益扣除不同的OB。
————————————————
转自:https://blog.csdn.net/weixin_38419133/article/details/115840015

标签:Level,--,Correction,OB,电平,扣除,RAW,black,sensor
From: https://www.cnblogs.com/chuqianyu/p/17839705.html

相关文章

  • C++ STL 容器底层实现
    一、关键词I:容器1、顺序容器:底层是链表和数组array(数组)、vector(可变数组)、deque(双端队列)forward_list(单向链表)、list(双向链表)2、关联容器:底层是红黑树set(集合)、mulitset(可重复元素的集合)map(字典)、multimap(可重复键值的字典)3、无序关联......
  • 垂直化管理和扁平化管理
    什么是企业管理的模式企业管理模式是在一家企业在较长的实践过程中,逐步形成并在一定时期内基本固定下来的一系列管理制度、规章、程序、结构和方法。为适应经济和社会及企业的发展,企业的管理模式也会不断调整和改变。在不同国家间,同一国家的不同地域、行业间,企业管理模式均存在着......
  • 秋招拿offer的你,手持什么秘密武器
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!在如今竞争激烈的就业市场中,秋招成为了许多大学生争夺心仪工作岗位的关键时期。拿到秋招Offer并非偶然,那些能够脱颖而出并成功拿到offer的求职者,往往拥有一些独特的优势。......
  • C语言【运算符】
    C语言【运算符、分支控制语句】1、运算符分类按照操作个数分类:一元运算符(一目运算符):只有一个操作数。如负号-1。二元运算符(二目运算符):有两个操作数。如加号1+2。三元运算符(三目运算符):有三个操作数。如?:a>b?1:2。按功能分类:算数运算符:正(+)、负......
  • C++线程
    进程以CPU为运行单位,多个CPU可以实现进程并行,单个CPU可以实现进程并发(进程调度)线程以CPU的核心为运行单位,多个CPU内核可以实现线程并行,单个内核可以实现线程并发(线程调度)1、创建和结束一个线程 #include<iostream>#include<pthread.h>///@brief创建一个线程///@param......
  • 答题卡片
     1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;4usingUnityEngine.UI;56//选项列表7[System.Serializable]8classOptionxTxt9{10//选项11publicList<string>optionxTxt;12}13///<sum......
  • NOIP2023 游记
    一个private但是public但是private的游记day0也不知道上学去干嘛,也不知道回家干嘛。睡觉。向某大佬询问复习什么,dalao告诉我OIwiki数学联通性网络流模拟退火2-SAT容斥。让我们来看看到时候会考多少。但是我的数学水平是exgcd都不会,所以我不复习数学了。哦好像得看看逆......
  • Flask四
    session源码1、app.session_interface默认是某个类的对象,以后全局对象session,就是SecureCookieSessionInterface()的对象2、请求来了,会执行这个对象的open_session方法3、请求走了,会执行这个对象的save_session方法4、读源码:app.run()---->run_simple(地址,端口,self可调用......
  • 数学
    ???注意:以下讨论的数若未特殊注明均为自然数。1.1欧几里得算法引理:\(\gcd(a,b)=\gcd(b,a\bmodb)\)。特别地:当\(b=0\)时,\(\gcd(a,b)=a\)。递归求解代码:intgcd(inta,intb){return!b?a:gcd(b,a%b);}对于最小公倍数,有\(\operatorname{lcm}(a,b)=\dfrac{a\timesb}......
  • C++类与继承
    C++类有三种访问修饰符:public(共有的)、private(私有的)、protected(受保护的)类内各区域成员的访问:1、public类内成员函数、类外、友元函数都可以访问。2、private类内成员函数、友元函数可以访问,private区域成员不能在派生类中访问。3、protected与private不同之......