图像传感器与信号处理——自动曝光算法
- 图像传感器与信号处理——自动曝光算法
- 1. 如何实现自动曝光?
- 2. 基于直方图统计的算法
- 2.1 Acquisition of Agronomic Images with Sufficient Quality by Automatic Exposure Time Control and Histogram Matching,2013
- 3. 基于熵的算法
- 3.1 Camera Parameters Auto-Adjusting Technique for Robust Robot Vision,2010
- 4. 基于梯度的算法
- 4.1 Active Exposure Control for Robust Visual Odometry in HDR Environments,2017
- 4.2 Gradient-based Camera Exposure Control for Outdoor Mobile Platforms,2018
图像传感器与信号处理——自动曝光算法
我是搞视觉SLAM的,在很久之前我和一位视觉SLAM大佬交流过,视觉SLAM难以落地原因有很多,其中之一就是环境光照对SLAM系统有较大的影响,而在实际的应用过程中,我们很难去真正控制环境中的光照变化,尤其是在室外。因此如何使得输入SLAM系统的图像具备稳定的光照就是非常值得研究的,而自动曝光就是其中一个非常重要的解决方案。这就是我这几天在家看这几篇论文的出发点。
1. 如何实现自动曝光?
自动曝光的过程是一个经典的反馈控制过程。
首先,既然是控制我们就需要知道控制的是什么,对于一般的相机来说,和曝光相关的参数配置有光圈、曝光时间、增益等,其中光圈的配置必须通过硬件实现,因此在实际操作过程中一般只控制曝光时间和增益来实现自动曝光。
其次,既然是反馈我们就需要建立一个标准来衡量曝光程度的优劣,而这个衡量标准定义的不同则意味着自动曝光算法的不同,下文就是据此对自动曝光算法进行分类,分别是基于直方图统计的算法、基于图像熵的算法、基于梯度的算法。
2. 基于直方图统计的算法
基于直方图统计的算法相关文章较多,而且都比较旧想法也比较简单,下面这些文章都是基于直方图统计的算法:
(1)An Advanced Video Camera System with Robust AF, AE, and AWB Control,2001
(2)Real-time Image Fusion and Adaptive Exposure Control for Smart Surveillance Systems,2007
(3) 2.3 Automatic Camera Exposure Control,2007
(4) 2.4 Autonomous Configuration of Parameters in Robotic Digital Cameras,2009
这里只对下面这篇比较新的一篇论文进行分析:
2.1 Acquisition of Agronomic Images with Sufficient Quality by Automatic Exposure Time Control and Histogram Matching,2013
这篇文章主要描述的是一个在农用机器人上应用的实际场景,最终目的是通过自动曝光实现农用机器人更加准确地识别稻田里面的特征。对于自动曝光算法,其在图像直方图的基础上有了进一步的改进,算法框架如下图所示:
除了通过图像直方图计算曝光时间外,还会通过直方图匹配对曝光后的图像进行进一步优化。这篇文章采用的归一化直方图,首先计算:其中的即直方图的横坐标,其范围是到,是横坐标在直方图中对应的值,是平均值在此基础上可以计算方差、偏度和峰度,这篇文章中用于Decision making的两个参数是平均值和偏度,如下所示:
其中和为图像第个通道的均值和偏度(红绿蓝三个通道,但是由于农用场景的限制,这篇文章只考虑红和绿两个通道),和分别是均值的最大最小边界,和分别是偏度的最大最小边界。和分别为参考图像的直方图平均值,通过上式就可以计算出优化后的曝光时间,即ET modification中的过程。
如果在Decision making中判定不需要进行曝光时间优化后就可以直接进行Image quality Improvement,其流程是分别计算输入图像和参考图像的直方图的累加概率通过累加概率进行匹配,然后搜索最接近的值,然后用改变(这里论文中是这么说的,但是具体如何改变并没有举例说明,具体怎么实现的会有点不清楚)。
3. 基于熵的算法
基于熵的自动曝光算法相关的文章好像并不多,目前就找到这一篇比较有代表性的:
3.1 Camera Parameters Auto-Adjusting Technique for Robust Robot Vision,2010
这篇文章主要是介绍了一种基于图像熵的摄像机参数自动调节技术,根据香农定理信息内容可以通过熵进行描述,并且熵可以随着信息内容增加而增大。在RGB色域中计算图像熵,公式如下:其中,为RGB颜色通道的离散范围,分别是颜色在图像中的概率,由上式可知文章中提到控制的参数为曝光时间和增益,那么通过实验可以测得图像熵随曝光时间和增益这两个参数变化的趋势如下图所示:
其中图中蓝色背脊线上的参数都是可以接受的,但是如上图所示的这种三维图是不方便搜索最佳参数的,因此在实际应用中,将曝光时间和增益设置为相同的数值,这样就可以将三维图转化为如下图所示的二维图:
其中图(a)是室内测得的图像熵随参数变化的曲线,图(b)是室外测得的图像熵随参数变化的曲线,如图所示,图像熵随着参数呈单调递增再单调递减的变化趋势。因此搜索就变得简单,可以从一个较低的曝光时间和增益开始,以一定的步长朝峰值搜索,直到下一步的图像熵小于当前步,那么就寻找到了最优的曝光和增益。
4. 基于梯度的算法
这是最近几年比较热门的一种算法,起码对于SLAM来说,实验证明这些算法是有效的,这里分享两篇方法比较类似的文章:
4.1 Active Exposure Control for Robust Visual Odometry in HDR Environments,2017
题目直抒胸臆呀,就是通过自动曝光控制提高视觉里程计在高动态环境下的鲁棒性。这篇文章中提出了在视觉里程计中应用自动曝光需要解决的问题是,一方面需要最大化图像信息,另一方面需要补偿由于曝光时间调整带来的时间差。
首先解决第一个问题,如何最大化图像信息,首先论文中定义了光度响应函数其中,为图像的光照强度,辐照度描述了单位时间射入像素的能量,为曝光时间,而这个函数本身是很难有具体的表达式的,这也就是为什么在自动曝光系统中采用的多是反馈控制算法,如果有了光度响应函数的具体表达式,我们就可以通过这个表达式直接获得合适的曝光时间。在此基础上定义了逆响应函数这个逆响应函数并不是直接对响应函数求逆,那么光度响应函数的逆响应函数如下:我们通过采集不同的曝光时间的图像,并计算图像的光照强度,这样就可以看做获得了一组离散数据,然后利用这组数据采用十阶的多项式函数进行拟合函数 ,获得函数 后可以进一步函数的微分形式,如下图所示就是这样一条曲线:
有了这个基础后,下面进一步建立曝光程度的评价标准,论文中建立了四种标准,并对标准进行了讨论对比,首先将像素的梯度幅值定义为:其中,那么四种标准分别是:
(1)直接求和:
(2)对数求和:其中这种评价标准在下一篇论文中作更加详细的分析。
(3)百分位数其中,函数是求百分位数,例如当参数 为0.5时,那么就是所有梯度幅值中的中位数。
(4)软百分位数其中为图像中所有像素的数量,为排好序的梯度幅值,而权重定义如下:其中符号为向下取整。
在论文中,通过对比FAST角点在各自标准下最优图像提取数量进行实验对比,发现百分位数标准和软百分位数标准提取数量会更多,然后还通过下面这张图进行图进行直观效果说明,我觉得很有意思:
从上到下分别是四个评价标准计算的值随曝光时间的变化曲线,可以看到,前两者是随着曝光时间单调上升,而在最顶点是已经出现了过曝光的情况,后两者则不会,曲线有极大值,而在极大值时图像曝光对于细节的保留确实较优。
最后说明如何根据评价标准和光度响应函数进行自动曝光控制了,那么要做的就是将评价标准对曝光时间求导,然后通过梯度下降法求得极大值,那么不管采用上面哪种评价标准,中间都包括求,那么有根据二阶导数的对称性,有求就需要用到我们前面提到的光度响应函数其中,最后一个等式是因为前面定义的逆响应函数那么对求导有将上式变形代入即可。因为在一开始就介绍了如何通过采样拟合求得,那么最终就可求得,就可以通过梯度下降法求得极大值。以为例,我们可以求得其关于曝光时间的导数有:那么曝光时间的更新方式为:关于自动曝光的部分这篇文章就介绍到这里,文章后面一部分是进行曝光补偿,这个稍后介绍
4.2 Gradient-based Camera Exposure Control for Outdoor Mobile Platforms,2018
这篇文章中提出要解决的问题一方面是如何进行基于图像梯度的自动曝光控制,另一方面是如果实现多相机联合曝光。
首先解决第一个问题,这篇文章提出,自然场景图像的梯度分布满足重尾分布,也就是场景中大部分梯度的幅值较小,大幅值梯度分布得少而离散。为了平衡梯度幅值与数量之间的关系,本文提出使用一个对数函数梯度进行映射:其中,,是像素 处的梯度幅值,可以看到当梯度小于阈值 时,梯度幅值映射为零。是一个控制映射趋势的参数。就代表梯度信息中和梯度幅值相关的部分,其输出控制在到。那么图像的曝光评价标准就定义为:越大说明曝光效果越好,图像中包含的信息越多。接下来说明如何进行曝光控制,在利用当前曝光时间获得的图像进行矫正,即,并求取最优的矫正值:具体操作是在的范围里选取一些列的值对当前图像进行矫正,并计算矫正后的曝光程度,然后利用五阶的多项式函数对这一系列离散值进行拟合,组中求得最优的矫正值,如下图所示:
获得最优矫正值后通过更新函数就可以直接对曝光时间进行更新,更新函数分为线性更新函数和非线性更新函数:
线性更新函数:非线性更新函数:其中是时刻的曝光水平,更新的最终结果是使得最优矫正值趋近与,这样就完成了整个反馈的控制。在此基础上,这篇文章一个很重要的贡献是实现了多相机的联合自动曝光,这里简单介绍下:其中,优化函数将所需曝光量视为一元项,并将重叠区域中的亮度相似度作为成对项,是两个相机之间的重叠区域,通过以上式为最优化目标进行优化操作就可以获得各个相机在联合自动曝光下最优曝光水平。
目前就看了这十篇左右的论文,看着看着又发现了近几年出的几篇很好的文章,是和SLAM相关的,考虑如何更好地将自动曝光算法和SLAM结合起来以提高系统的性能,很有意思。这篇博客就先写这么多,写得太长了自己都要看吐了,接下来把新的几篇论文看完再重新总结下,