论文阅读——《Exposure Control using Bayesian Optimization based on Entropy Weighted Image Gradient》
《Exposure Control using Bayesian Optimization based on Entropy Weighted Image Gradient》
最近这是一篇在2018年ICRA上发表的会议论文,主要内容是提出一种新的曝光评价标准,以及一种新的自动曝光控制策略,关于自动曝光的其他文章可以参考我之前的这篇博客:
图像传感器与信号处理——自动曝光算法
我之前这篇博客分享了两篇2017年发表的利用梯度进行自动曝光的文章,这篇文章中在相关工作中也提到了,说之前的那两篇只考虑了梯度信息,对于过曝光和欠曝光的处理效果不佳,这篇文章对于这个问题则有更好的解决方案。
1. 曝光评价标准——熵权梯度
所谓“熵权梯度”就是用图像熵来作为梯度的权值。
2.1 什么是图像熵?
这个熵是以像素为单位来定义的(参考《A mathematical theory of communication》),其计算公式是:Hi=−k∑P(ik)log2(P(ik))其中P(⋅)是和像素梯度级数k相关的概率,因此在计算这个概率之前需要先计算像素i的梯度∥∇I(i)∥2。图像熵可以描述这个像素周围纹理复杂程度,图像熵大则说明这个像素周围纹理复杂。
2.2 为什么用图像熵?
文中说利用图像熵一方面可以最小化图像梯度噪声,另一方面可以建立一个饱和区域蒙版,减小过曝光或欠曝光区域来提升图片整体效果。
2.3 怎么使用图像熵?
这就是最重要的,首先曝光评价标准的计算公式为:Gewg =∑gi其中,gi就是熵权梯度,这里先给出熵权梯度的定义公式:gi=Wi∥∇I(i)∥2+π(Hi)Mi(Hi)WiN1j=0∑N−1∥∇I(j)∥2可以看出,这个图像熵公式由两部分构成,第一部分Wi∥∇I(i)∥2是主要部分,第二部分π(Hi)Mi(Hi)WiN1∑j=0N−1∥∇I(j)∥2就是通过建立蒙版来减小过曝光或欠曝光区域的,下面分别解析:
(1)第一部分Wi∥∇I(i)∥2:
权重Wi的定义公式如下:Wi=∑i=0N−1wiwi其中wi=σ1exp{2σ2(Hi−mean(Hi))2}其中σ是方差,i是像素位置。根据公式,大的图像熵将获得较大的权值,反之则权值较小。
(2)第二部分π(Hi)Mi(Hi)WiN1∑j=0N−1∥∇I(j)∥2:
激活函数π(Hi)的定义公式如下:π(Hi)=1+exp(−αHi+τ)2−1,0≤Hi≤1其中参数α控制像素i的图像熵和梯度的之间的关系,如果α较大时则考虑更多图像熵的因素,饱和区域会更快被控制,如果α较小时则考虑更多梯度的因素。参数τ控制可以被视作饱和区域像素的最小图像熵水平,激活函数随这两个参数变化的图像如下图所示:
这里指的注意的是,激活函数输入的是像素的图像熵,从图像上可以很直观的看到,小的图像熵激活函数输出负值,大的则输出正值。
蒙版函数Mi(Hi)的定义公式如下:Mi(Hi)={0,1,Hthres≤Hi≤10≤Hi<Hthres通过公式可以看出,当图像熵较大时,蒙版输出为0,当图像熵较小时,蒙版输出为1。也就说蒙版只对图像熵小的像素进行限制。
结合激活函数和蒙版函数的特性知道,过曝光或者欠曝光区域像素图像熵通常较小,第二部分因此在这些像素上输出小值或者负值,使得过曝光或者欠曝光的图像按照曝光评价标准计算出来更小。
2.4 评价效果怎么样?
文中给了这样一幅图:其中红色标记和红色曲线为本文的评价标准,可以看出来最优的曝光图片其过曝光区域确实相对较小。
2. 自动曝光控制——贝叶斯优化
有了曝光评价函数后就需要考虑如果通过曝光评价函数来进行自动曝光控制,以获取最优曝光,目前我看过好几种算法了,例如在《Active Exposure Control for Robust Visual Odometry in HDR Environments,2017》中,文中采用的是通过就曝光评价函数对曝光时间的偏导,然后通过高斯牛顿法获取最优曝光。在《Gradient-based Camera Exposure Control for Outdoor Mobile Platforms,2018》中是通过最优γ矫正来获取最优曝光。本文提出一种基于贝叶斯优化的自动曝光控制算法,挺有意思。
2.1 什么是贝叶斯优化?
贝叶斯优化算法通常用在机器学习中寻找最优超参数的问题中,具体问题可以这么描述,如下:X∗=argx∈Smaxf(x)其实就是在集合S中选择参数x使得函数f(x)最大,最核心的问题就是函数f是未知且不一定是凸函数,对应到我们自动曝光过程中,参数x就是曝光程度,而函数f就是曝光评价随曝光程度的变化趋势
2.2 贝叶斯优化是如何进行?
文中这幅图就很形象地说明了贝叶斯优化的过程:
贝叶斯优化算法最核心的内容主要有两部分构成,分别是Prior Function和Acquisition Function,下面分别进行说明:
(1)Prior Function
前面提到,我们要求的函数f是完全未知的,因此我们就要通过模型建立Prior Function,在上图中,蓝色曲线就是我们要求的函数f,而"紫色栅格"就是基于高斯模型建立的Prior Function,基于高斯模型建立的Prior Fuction这个函数的自变量对应的不是一个标量,而是一个高斯分布。从上图中可以看到,贝叶斯优化的过程实际上就是不断采样使得Prior Fuction不断逼近函数f(如何采样就和Acquisition Function有关),其具体公式如下:μ(x∗)σ2(x∗)=k∗T(K+σn2I)−1y=k(x∗,x∗)−k∗T(K+σn2I)−1k∗其中,内核矩阵K=[k(xi),k(xj)]xi,xj∈x,k∗=[k(xi,x∗)]xi∈x,其中x是已有的采样点集合,k(⋅,⋅)是内核函数,本文采用的是平方指数函数。那么μ(x∗)和σ2(x∗)分别是函数在自变量x∗处的均值方差。
(2)Acquisition Function
前文提到要如何进行采样,Acquisition Funtion就是根据当前的Prior Function获取下一阶段采样的算法,文中分为MAXVAR算法和MAXMI算法.
那么论文中整个控制算法的伪代码如下图所示,我觉得有了前面的理解,对伪代码的阅读就没那么困难了,只是可能复现出来还有一定难度:
其中x=(x0,⋯,xm),y=(y0,⋯,ym),我按照对算法的理解绘制了如下流程图,便于理解:
最后实验结果部分就不介绍了,反正很牛逼就对了,这里是实验结果视频,好啦,那么这篇paper就总结到这儿,不知道2019和2020有没得更新的成果,花时间去找找,有问题欢迎交流~