AWB基础介绍

目录

背景

基本概念

色温的定义

白平衡概念(WB)

如何将让camera sensor拍摄的图片和人眼看到的一致呢?

如何计算RGB gain

自动白平衡算法(AWB)

灰度世界法

基于白点的算法

基于色温的方法

色温曲线

色温 R/G、B/G 分布


背景

在不同光源下人眼看到的颜色是不变的,不论在阳光、室内、阴影、或荧光下,人们所看到的白色物体仍旧为白色。

原因:人眼具有颜色恒常性,可以避免光源变化带来的颜色变化。

  • 颜色恒常性:在照度发生变化的条件下人们对物体表面颜色的知觉趋于稳定的心理倾向;(也就是说,人根据记忆会对颜色进行一个矫正,光源发生变化时从神经上对其感知还原的)。

白平衡的作用就是在这些场景下恢复图像的正常颜色。

图像传感器不具备颜色恒常性这种特性,从而造成色偏,那么是如何处理颜色白平衡的作用就是在这些场景下恢复图像的正常颜色。的偏差呢?

  • AWB(Auto White Balance)

基本概念

色温的定义

色温描述的是具有一定表面温度的“黑体”(blackbody)的辐射光的光谱特性。绝对黑体从绝对零度(-273℃)开始加温后,黑体的颜色会逐渐由黑变红,转黄,发白,最后发出蓝色光,这种随温度而产生的颜色变化就光谱特性。当加热到一定温度,黑体发出的光所含的光谱成分,就成为这一温度下的色温。

色温用“K”(开尔文)表示。(理解:如果某光源发出的光,与某一温度下黑体发出的光所包含的光谱成分相同,就称为某K色温。如100W灯泡发出的光的颜色,与绝对黑体在2527℃时的颜色相同,那么这个灯泡发出的光的色温就是:(2527+273)K=2800K)

白平衡概念(WB)

人类视觉系统具有颜色恒常性特点,人类对物体观察不受光源影响。 如下图白色在人眼中的表现:

Sensor在不同光线下,感知到的物体呈现的颜色不同,在晴朗天空下会偏冷色调,在烛光下会偏暖色调。camera sensor在不同光源下对颜色的响应,如下图所示:

上图有两个趋势:高色温区B成分越来越高,R越来越低。低色温区R成分越来越高,B成分越来越低。5000K 光源本身是白色的 RGB是接近的

如何将让camera sensor拍摄的图片和人眼看到的一致呢?

把sensor的R,G,B分量各自乘上一个系数,使RGB三个能量保持相同即可。

白平衡就是:不管在任何光源下,都能将拍摄的白色物体的图像还原为白色。把sensor 的R、G、B相应各自乘以一个系数使得R、G、B相等的过程就叫白平衡。所有白平衡的算法就是计算RGB gain

如何计算RGB gain

在实验室中:白平衡的算法就是计算R、G、B的gain值。一般在实验室中用18%灰卡或者色卡取第22个灰色方块,用软件测出R, G, B的均值,人眼一般对G分量比较敏感,所以以G作为目标进行补偿。

比如原始R=15,G=40,B=30,采用如下的方法计算出白平衡的gain值。

看起来很简单,可是,这是因为我们的大脑知道哪是白/灰色,对于相机或者计算机来说,这个问题真的好难。所以需要一些算法计算RGB的gain.


自动白平衡算法(AWB)

需要找到白吗??

自动白平衡算法分为两类,一类是不需要找到白,如灰世界、完美反射等。一类需要找到白,如白点法、白快法、灰边法等。

灰度世界法

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

对此算法的流程如下:

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

基于白点的算法

  1. 将RGB颜色空间转换到YUV空间,转换公式如下:


        2.通过限定YUV的区域来判断是否为白点,如下论文通过四个限制条件俩限制白点,满足条件的点就是白点,参与后续的计算,否则不是点直接舍弃。

        3.通过以上四个限制条件找到白点集合后,就可以对白点集合运用GW算法或者其他算法计算gain值从而进行后续的校正;

基于色温的方法

色温曲线

对于特定光源其色温是确定的,且随着色温变化而变化,如下图:

色温 R/G、B/G 分布

对于某种色温来说,它的 R/G、B/G 的值有着什么样的关系呢?

同一个色温 灰色的色调的 R/G、B/G 基本上都在一个比较确定的范围内。因此,只要可以确定当前图像中的 R/G、B/G 的值,就可以通过查表法来得到当前光源的色温值,并进行相应的白平衡调整。并且从图中还可以看出,6500K 色温和 7500K 色温的 R/G,/B/G 的分布非常靠近,因此在算法过程中将两种色温合并为同一种来进行处理。

可以根据图像中像素点的 R / G 、B / G 的值对像素进行分类统计, 以此判断图像光源的色温,得到采样灰色像素点,计算出相应的增益值,实现图像的白平衡调整。

  1. 通过在不同色温的环境下拍摄灰卡可以得到上面的两个曲线,一个是gain值的关系曲线,另一个是R/G与色温T的关系,那么如果获取了一张图像知道了拍摄的色温,就可以通过第二张图获取R/G的值,然后将这个值代回图一就能计算出B/G从而获得R和B的gain值;
  2. 通过一定的技术手段获取色温即可,一种方法就是通过加一个色温传感器获取环境色温。另一种就是通过计算求出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;重复上述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Camera2 API提供了自动白平衡(AWB)功能,可以根据场景中的光线条件自动调整图像的颜色平衡。在Camera2 API中,AWB由CaptureRequest.CONTROL_AWB_MODE参数控制。常见的AWB模式有以下几种: - CONTROL_AWB_MODE_OFF:关闭AWB功能。 - CONTROL_AWB_MODE_AUTO:启用AWB功能,相机设备会自动调整图像的颜色平衡。 - CONTROL_AWB_MODE_INCANDESCENT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应白炽灯光源。 - CONTROL_AWB_MODE_FLUORESCENT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应荧光灯光源。 - CONTROL_AWB_MODE_DAYLIGHT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应日光灯光源。 - CONTROL_AWB_MODE_CLOUDY_DAYLIGHT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应多云天气下的光线条件。 以下是一个使用AWB自动白平衡的例子: ```java // 设置AWB模式为自动 mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO); // 发送请求 mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler); ``` 手动白平衡(Manual White Balance)是指用户可以手动调整图像的颜色平衡,以适应特定的光线条件。在Camera2 API中,手动白平衡由CaptureRequest.CONTROL_AWB_MODE参数和CaptureRequest.COLOR_CORRECTION_GAINS参数控制。手动白平衡需要先关闭AWB功能,然后设置COLOR_CORRECTION_GAINS参数为手动调整的值。以下是一个使用手动白平衡的例子: ```java // 关闭AWB功能 mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_OFF); // 设置手动调整的颜色平衡值 Rational red = new Rational(3, 2); Rational blue = new Rational(5, 4); mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, new RggbChannelVector(red, blue, red, blue)); // 发送请求 mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

repinkply

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值