本文主要讲解,何恺明暗通道先验去雾以及加权最小二乘算法的原理部分,对应代码可在资源处下载。
1暗通道先验去雾模型
公式(1)是常用的雾霭形成模型:
(1)
其中,I(x)为实际拍摄到的有雾视频帧,J(x)为去雾后的原视频帧,A表示全球大气光成分,先对暗原色的亮度进行排序,从中选出暗原色亮度最大的像素的0.1%的值,它们对应原图中所有强度值的最大值即为A;t(x)用来描述太阳光通过媒介投射到摄像机过程中没有被散射的部分,简称透射率图或介质传输率,可表示为(0≤t(x)≤1)。而去雾就是通过I(x)得到J(x)的过程。方程右边的J(x)t(x)叫做直接衰减项,A(1-t(x))则是大气光成分,它反映了大气散射光对成像光强的影响,造成了视频帧的不同程度模糊和色调的偏移。
何恺明等通过大量统计,发现在自然场景视频帧中非天空部分的局部区域里的某些像素点,至少有一个颜色通道的值很低以至趋于0。因此进而他提出了暗通道先验去雾模型,即对任意的自然场景无雾图像J(x),其暗通道满足:
(2)
其中J(x)是无雾图像在RGB三个颜色通道中的暗原色,相对应的I(x)是某一RGB的单色通道的实际有雾帧,在以为中心的局部邻域内,将(2)式带入(1)式后得
(3)
参数w是调整因子,且满足0<w<1,其值越小,去雾效果越不明显。添加w是为了针对性的保留视频帧遥远景物的雾,A被定义为某一单色通道的大气光成分。因为户外自然场景中总是会存在一些杂质,彻底去雾会造成视觉上失真,之后将(3)式求得的透射率图带入到(1)式中,即可求得去雾后图像J(x)
(4)
暗通道先验模型通常建立在户外自然场景基础上,当取景对象在较大范围内和天空接近并且没有阴影覆盖的时候,视频帧中的灰白色和空气颜色接近,暗通道先验模型会错误处理该区域的透射率,造成去雾后的对应区域上亮度降低,从而使得暗通道先验假设不成立。另外由于含雾图像在某一邻域内的RGB通道最小值和暗通道先验求解的结果不匹配,而使暗通道先验模型去雾造成去雾图像边缘不平滑。综上所述,对基于暗通道先验的去雾算法而言,获取合适的透射率图t(x)和正确的大气光成分A,是得到无雾视频的两个关键因素。
2导向滤波和加权最小二乘滤波原理
2.1导向滤波原理
导向滤波由局部线性模型发展而来,它作为一种高效且能够提取方向信息的滤波器组,任意方向的滤波器可以由一组基滤波器线性累加而成。何恺明首次将之用于图像去雾,针对计算透射率初估计值的过程中出现一定程度的块效应,提出用导向滤波来细化之前得到的粗略透射率图。
导向滤波输出图中的任意一个像素点i可以表示为一个加权平均:
(5)
上式中i和j是处理像素的像平面的横坐标和纵坐标,wij(I)是可以作为目标效果的导向图像I和原始图像P。
在利用导向滤波时,定义核函数为:
(6)
根据上式可以看出,qi和Ii之间是局部线性关系,其中i为像素坐标,I代表引导图像,q为结果影像,可以认为qi是在大小为wk、以像素k为中心的窗口内所有像素的线性变换。此处对应的就是经过优化后的透射率分布图,定义价值函数如下:
(7)
公式(7)中的E为正则化参数,主要是为了避免系数ak过大。之后采用最小二乘法求解得到系数如下:
(8)
(9)
其中uk是含雾图像I在窗口wk中的平均值,是I在窗口wk中的方差,|w|是窗口wk中像素的数量,pk是待滤波图像p在窗口wk中的平均值。
在导向滤波器中,滤波半径的选取对去雾后的效果有一定影响。当滤波半径较大时,导向滤波图会更大范围内进行平行线输出,使得透射率图与有雾视频帧的边缘特征更加相似且内容丰富,降低了边缘不平滑现象。但是滤波半径过大,会使无雾视频帧在对应区域出现颜色过饱和或者去雾不足现象。
2.2加权最小二乘滤波原理
加权最小二乘法滤波能有效的保留视频帧中的部分边缘信息。该算法无法保留较多的对比度较小的边缘,也不能一次性完整提取对比度较大的细节,所以需要渐进式提取边缘。异方差性是相对于同方差而言的,随机误差项具有不同的方差,则称线性回归模型存在异方差性,加权最小二乘法在很大程度上解决了异方差性问题,首先用某一权数对样本观测值或残差加权,再使用普通最小二乘法估计参数模型。对于输入视频帧g,寻求结果视频帧u,一方面希望u尽可能接近g,与此同时,u除了在g一些边缘梯度变化比较大的地方外应该越平滑越好,形式上即寻求式(10)的值最小
(10)
其中下标p为像素位置。数据项的目的是尽可能缩小u和g的差距,第二项则是用偏导数实现平滑,这和输入的视频帧g有很大关系。当g边缘梯度变换很大时,我们希望其约束小一些,而当g边缘梯度变换很小时,这些细节信息可认为不重要,对其约束可以大一些。而ax和ay为平滑权重,一般取值在1.2至2.0之间,主要目的是控制其对梯度的敏感度。负责两项的值平衡,从而使平滑效果有所不同。在视频帧中,一维梯度中的算子
在任何位置都是不变的,在此可定义为常量,然后对求二阶导数,在使式(10)取得最小值的情况下,可求得结果视频帧u的最优值。
附上一些去雾效果: