首页 > 其他分享 >ISP——AWB(Auto White Balance)

ISP——AWB(Auto White Balance)

时间:2023-07-14 16:44:22浏览次数:49  
标签:通过 Auto ISP 白点 算法 gain 图像 White 色温

几个概念

人眼具有颜色恒常性,可以避免光源变化带来的颜色变化,但是图像传感器不具备这种特性,从而造成色偏,白平衡就是需要校正这个颜色的偏差;

  • 颜色恒常性:颜色恒常是指在照度发生变化的条件下人们对物体表面颜色的知觉趋于稳定的心理倾向;
  • 色温的定义:色温描述的是具有一定表面温度的“黑体”(blackbody)的辐射光的光谱特性。简单的理解就是颜色随温度的变化规律,比如生铁就是黑色,加热会变成橘红色,继续加热到液态会呈现偏白的颜色,这种随温度而产生的颜色变化就光谱特性。

白平衡校正

  • 手动白平衡:在拍照前通过拍摄一个18度灰的卡片,然后计算出当时环境的白平衡的gain值对后面的图片进行校正;
  • 自动白平衡:camera通过自己本身的算法,通过获取的图像自动计算出gain值对图像进行校正的方式。

自动白平衡算法讲解

灰度世界法

灰度世界算法基于一个假说:任一幅图像,当它有足够的色彩变化,则它的RGB分量的均值会趋于相等。这是一个在自动白平衡方面应用极为广泛的理论。如上图一个颜色足够充足的画面里,假说RGB三个通道的均值是相同的。

对此算法的流程如下:

  • 计算各个颜色通道的平均值;
  • 寻找一个参考值K,一般情况选取Gmean;
  • 计算Rgain = Gmean/Rmean, Bgain = Gmean/Bmean;
  • 对图像中的每个像素都乘以对应的gain值进行校正;

完全反射法

完全反射也是基于一个假说:基于这样一种假设,一幅图像中最亮的像素相当于物体有光泽或镜面上的点,它传达了很多关于场景照明条件的信息。如果景物中有纯白的部分,那么就可以直接从这些像素中提取出光源信息。因为镜面或有光泽的平面本身不吸收光线,所以其反射的颜色即为光源的真实颜色,这是因为镜面或有光泽的平面的反射比函数在很长的一段波长范围内是保持不变的。完美反射法就是利用用这种特性来对图像进行调整。算法执行时,检测图像中亮度最高的像素并且将它作为参考白点。基于这种思想的方法都被称为是完美反射法,也称镜面法。通俗的意思就是整个图像中最亮的点就是白色或者镜面反射出来的,那么最亮的点就是光源的属性,但是该点本身应该是白点,以此为基础就可计算出gain值从而进行校正。

具体步骤如下,以红色通道为例:

灰度世界和完美反射结合法

就是将灰度世界和完美反射算法进行融合,具体公式如下:

通过上面的方程组就可以解出 u r u^{r} ur和 v r v^{r} vr 然后对原像素进行校正:
\(R_{new​}=u^rR_{org}^2​+v^rR_{org}​\)

基于模糊逻辑的算法


如图圆圈表示该颜色本身应该在坐标系中所处的位置,箭头分别表示随色温的变化发生的偏移,这个是通过先验知识得到的,后面再通过这个进行校正。

通过以上两种方式将图像分成8块,然后通过模糊逻辑的方式计算出每个快的一个权重,这个权重和亮度和色度相关,然后通过模糊逻辑方式进行确定。求得权重后就可以计算出整个图像的加权均值,如下图10a,黑点表示八个块的分布,X表示加权后整个图像的位置。然后目的是要让加权的这个值往白点上靠,就通过调整增益的方式调试,调整完增益后,每个块儿的均值又会发生变化,然后又重新计算出每个块的权重,再通过权重计算出整个图像的均值,如图10b,整个图像的均值已经靠近原点了。然后如果X和白点的差距在一个设定的范围内则认为完成白平衡,否则继续调整增益重复上述步骤进行校正。

基于白点的算法

  1. 将RGB颜色空间转换到YUV空间,转换公式如下:
  2. 通过限定YUV的区域来判断是否为白点,如下论文通过四个限制条件俩限制白点,满足条件的点就是白点,参与后续的计算,否则不是点直接舍弃
  3. 通过以上四个限制条件找到白点集合后,就可以对白点集合运用GW算法或者其他算法计算gain值从而进行后续的校正;

基于色温的方法

  1. 通过在不同色温的环境下拍摄灰卡可以得到上面的两个曲线,一个是gain值的关系曲线,另一个是R/G与色温T的关系,那么如果获取了一张图像知道了拍摄的色温,就可以通过第二张图获取R/G的值,然后将这个值代回图一就能计算出B/G从而获得R和B的gain值;

  2. 通过一定的技术手段获取色温即可,一种方法就是通过加一个色温传感器获取环境色温,这个努比亚和oppo都有相关的专利提到,这个不是常规的方式不讲解。另一种就是通过计算求出T,下面的论文就提供了一种方式

    该算法通过以下步骤迭代获取色温:

  • 定义Tmin=2000K,Tmax=15000K;
  • 判断Tmax-Tmin是否大于10,如果小如或等于10,那么久可以直接返回T,此时T可以去min,man或者二者的均值,如果满足大于10的条件,则T=(Tmin+Tmax)/2;
  • 通过图中一些列的公式,通过T就可以计算出一个R’G’B’。这些公式都是通过实验拟合总结的;
  • 对于原始图像可以求出各个通道的均值RGB,如果B’/R’>B/R那么Tmax=T,否则Tmin=T;重复上述步骤即可迭代求出色温T。

基于边缘的方法

  1. 先通过一定的手段,比如梯度的方式求出图像中的边缘,然后在边缘各侧各取两个点参与计算;
  2. 通过上述得到的参考点集合,就可以运行灰度世界或者其他的算法求出gain值;

该算法的有点在于,减少的大色块的干扰,因为一般认为边缘就是色块变化的的分界线,那么提取边缘两侧的样本点就可以满足颜色充分的条件,那么就可以运用灰度世界法求出gain.而且有大色块的时候计算的也是也只是选取边缘的几个点,就可以避免大色块分量太大造成白平衡异常的问题。

多方法融合法


如图是一款ISP主控的白平衡tuning的图片。每个蓝色的框就代表一种色温,比如9代表2000K,8代表2500K,这个是通过实验和经验值确定的。图中绿色的点就是通过白点算法筛选出来的白点候选点。然后调试的时候就是在不同色温下拍摄灰卡,然后挪动蓝色选框,使其包围绿点,然后右上角就是估计色温,调试的时候就是使得这个估计色温和真实色温不要相差太多。然后通过标定若干组色温之后就确定了该方案的一个色温曲线。后续在pipeline中通过白点检测算法筛选出白点,然后根据白点的分布,可以找到大多数白点分布的色温,那么该色温就是当前的色温,然后通过色温再按照前面提到的算法就可以计算出一个gain值,然后再和灰度世界算法进行一个blending就可以得到最终ISP中使用的gain值。
————————————————
版权声明:本文为CSDN博主「wtzhu_13」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wtzhu_13/article/details/119301096

标签:通过,Auto,ISP,白点,算法,gain,图像,White,色温
From: https://www.cnblogs.com/DDQQ/p/17553508.html

相关文章

  • Autocheck之Loki
    SimpleIOCandYARAScanner文件名IOC正则表达式匹配完整的文件路径/名称Yara规则检查Yara签名匹配文件数据和进程内存哈希检查将已知的恶意哈希(MD5,SHA1,SHA256)与扫描的文件进行比较C2连接后检查将进程连接端点与C2IOC进行比较(版本v.10后新增)需要文件下loki最新发布版:ht......
  • MyBatisPlus
    一、MyBatisPlus简介SpringBoot整合MyBatisPlus入门程序①:创建新模块mybatis-plus-01③:添加相关的起步依赖多余的文件和依赖配置都可以删除了pom.xml文件如下:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependen......
  • NET6使用AutoFac依赖注入(仓储模式)
    第一次使用autofac,然后net6最新长期支持的,就想着在net6的基础上使用autofac,我对依赖注入理解很差,一知半解的搞了好久。好在有了一点点的头绪,记录下省的以后忘记(突然发现自己以前用过的东西忘了好多……)首先你要有个仓储模式的项目、这个自己搭建吧在Program.cs文件中:配置程序......
  • ubuntu22.04 autoware安装教程
    PrerequisiteOSUbuntu22.04ROSROS2HumbleGitsudoapt-get-yupdate&sudoapt-get-yinstallgitHowtosetupadevelopmentenvironment1、参考博文https://www.cnblogs.com/tianyonglin/p/17285111.html安装nvidia驱动,注意不要安装最新版的推荐驱动版本,否......
  • 若依微服务使用openfeign ,写了一个接口,但是其他项目引入的时候显示找不到这个Bean:Coul
    启动报错:org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'tokenController':Unsatisfieddependencyexpressedthroughfield'sysLoginService';nestedexceptionisorg.springframework.beans.fa......
  • InteractiveDataDisplay曲线图控件的使用
    官网https://github.com/microsoft/InteractiveDataDisplay.WPF安装Install-PackageInteractiveDataDisplay.WPF前台代码 <Windowx:Class="InteractiveDataDisplayDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presen......
  • display:flex弹性布局
     设置方式:给父元素设置display:flex,子元素可以自动挤压或拉伸flex弹性容器里的弹性盒子可以设置宽高,比如a标签设置宽高生效,不用转块描述属性值创建flex容器(父级)display:flex主轴对齐方式 justify-contentflex-start起点开始排列(默认)flex-e......
  • 自定义筛选AutoFilter
    AutoFilter语法:expression.AutoFilterVBA直接输入这个是在自动筛选和关闭来回切换。AutoFilter.FilterMode属性如果工作表处于自动筛选筛选器模式,则返回 True。只读 Boolean。表达 一个代表 AutoFilter 对象的变量。语法:expression.FilterModee.g:SubClearFilter()......
  • elementUI远程搜索功能遇到的坑(el-autocomplete) 如果是提前加载出全量数据 去掉v-mode
    elementUI远程搜索功能遇到的坑(el-autocomplete)如果是提前加载出全量数据去掉v-model.trim换为v-model=“nameinputvalue”原文链接:https://blog.csdn.net/CuiCui_web/article/details/95939746本文主要是解决下拉框根据返回值隐藏   动态设置建议列表值等问题结构写......
  • elementui文本框_element UI el-autocomplete组件 带输入建议的输入框
    elementui文本框_elementUIel-autocomplete组件带输入建议的输入框原文链接:elementui文本框_elementUIel-autocomplete带输入建议的输入框项目需求:需要用户在输入框中输入公司全名  但是为了避免用户输入不全  需要做一个带输入建议的输入框element组件:class......