基于暗原色先验的单一图像去雾.docx
《基于暗原色先验的单一图像去雾.docx》由会员分享,可在线阅读,更多相关《基于暗原色先验的单一图像去雾.docx(15页珍藏版)》请在冰豆网上搜索。
基于暗原色先验的单一图像去雾
`
基于暗原色先验的单一图像去雾
何恺明,孙剑,唐晓鸥
摘要:
在这篇文章中,我们提出一种简单有效的图像先验—暗原色先验来为单一输入图像去雾。
暗原色先验来自户外无雾图像数据。
它基于关键的观测--绝大多数的户外无雾图像的每个局部区域都存在某些至少一个颜色通道的强度值很低的像素。
在有雾图像模型中使用这种先验规律,我们可以直接估算雾的浓度并恢复高质量的无雾图像。
使用先验规律处理大量的有雾图像表明这种规律的有效性。
而且,在去雾过程中我们可以得到高质量的深度图—副产品。
1.引言
户外场景图像经常因为大气中的浑浊的介质(例如:
颗粒和水滴)而降低质量。
雾、霭,烟雾诸如此类导致了大气中的吸收和散射。
照相机接收到景物反射来的光线衰减了很多。
此外,得到的光线还混有大气光—周围光通过大气分子反射进入相机。
降质图像丢失了对比度和颜色保真度。
如图1a。
由于大气散射的程度和景点到照相机的距离有关,图像降质是随着空间变化的。
在消费/计算摄影业和计算机视觉领域,图像去雾有着广泛的需求。
首先,去雾能显著地提高景象的清晰度并且改正因空气而带来的色移。
一般的,去除雾干扰的图片看起来要更加舒服。
其次,大多数的计算机视觉算法,从低级别的图像分析,到高级别的目标识别,一般会假定输入图像即景物的原始光线会聚所成。
视觉算法(例如特征检测、滤波、光度分析等)的实现会不可避免地因为偏光、低对比度图像而不理想。
再次,去雾可产生图像的深度信息,有助于视觉算法和高级的图像编辑。
通常意义下不好的雾也能派上用场,作为深度的线索能加深人们对景像的理解。
然而,去雾是一项有挑战性的课题,因为大气中雾所依赖的深度信息是未知的。
而在只有一幅图像可分析的情况下,解决这一问题又受到了制约。
因此,很多使用多张图像或其他更多辅助信息的去雾方法被提出。
在[3,4]中用多幅图像从不同程度的偏振光的角度来去除雾的干扰。
在[5,6,7]里通过从同一景象在不同天气情况下的照片获得更多的对比度的信息来去雾。
[8,9]中基于深度的方法则需要来自对应图片或者已知的3D模型的大致深度信息。
最近,基于单一图像的去雾取得了很大的进展[10,11]。
这些方法的成功往往得益于一个强有力的先验或假设。
Tan[11]观察到无雾图像比有雾图像具有更高的对比度,他通过扩大复原图像的局部对比度来达到去雾的效果。
这样得到的结果在视觉上是很吸引人的,但实际上在光学原理上达到去雾。
Fattal[10]通过假定透射率和表面投影在局部是不相关的,估算景物的反射率,来推断景物光在空气中传播时的透射率。
Fattal的的做法比较准确,并且能产生很好的去雾结果。
然而他的方法在雾浓度较大的时候便显得无能为力,尤其是当他的假想一旦失效的时候。
在这篇文章,我们提出一种新的先验规律——暗原色先验,来用于单一图像去雾。
暗原色先验是对户外无雾图像库的统计得出的规律。
我们发现,在不包括天空的绝大部分局部区域,总会存在一些我们称之为“darkpixels”的像素,至少有一个颜色通道具备很低的强度值。
在被雾干扰的图像里,这些暗像素的强度值会被大气中的白光成分所充斥而变得较高。
因此,这些暗像素能够直接用来评估雾光的透射信息。
结合一个已有的雾成像模型和插值法抠图修复,我们可以得到高质量的去雾图像和很好的深度图。
我们实现的去雾不仅在物理上有效,而且能够处理包括在雾浓度很大情况下的远距离物体。
我们没有依靠输入图像透射率或表面投影的显著变化,结果基本没有人工的痕迹或者晕影。
和任何其他利用先验规律实现的算法一样,我们的实现也有其限制因素。
当取景对象在较大范围内和天空接近并且没有阴影覆盖的时候,暗原色的猜想将不成立。
尽管我们的去雾处理对大多数户外带雾图像都有较好成果,在一些极限情况下还是会失效。
我们相信,从不同的角度来发展这一先验,并且将其组合能使得这一工作更加完善。
2.背景
在计算机视觉和计算机图形中,下述方程所描述的雾图形成模型被广泛使用[2,5,10,11]:
I(x)=J(x)t(x)+A(1-t(x))
(1)
I是指观测到的图像的强度,J是景物光线的强度,A是全球大气光成分,t用来描述光线通过媒介透射到照相机过程中没有被散射的部分,去雾的目标就是从I中复原J,A,t。
对于一幅N像素的彩图I,存在着3N的约束和4N+3的未知数。
方程右边的第一项J(x)t(x)叫做直接衰减项[11],二项A(1−t(x))则是大气光成分。
直接衰减项描述的是景物光线在透射媒介中经衰减后的部分,而大气光则是由前方散射引起的,会导致景物颜色的偏移。
然而直接衰减是物体光线的多重失真,大气光是附加的。
因为大气层可看成各向同性的,透射率t可表示为:
t(x)=
(2)
β是大气的散射系数,d是场景深度。
该式表明景物光线是随着景物深度d按指数衰减的。
如果我们可以恢复透射,我们也可以恢复未知规模的深度。
雾图形成模型方程
(1)意味着,在RGB色彩空间中,向量A,J(x),I(x)从几何学来看是共面的,它们的端点则是共线的,透射系数t是两条线段长度之比:
t(x)=
=
(3)
c是RGB颜色通道的索引。
在这个模型上,Tan的方法[11]集中在增强图像的能见度上。
在透射率t可近似看作不变的区域内,由于t<1,输入图像的可见度(梯度之和)在雾的干扰之下减少:
.(4)
在一个局部区域内,透射率函数t是通过扩大图像可见度并且使对比度满足J(x)的强度低于A的方法来估测的。
一个MRF模型被用来进一步规范该结果。
这一尝试将进一步揭开雾成像的一些细节和结构上的奥秘。
然而,这一方法会产生更大的饱和值因为它仅仅集中在可见度的增强而并没有从物理上去复原原始景物的光线。
此外,在靠近深度不连续的部位可能会包含一些光环效应。
在[10]当中,Fattal提出了一种基于独立成分分析(ICA)的实现方法。
首先,局部区域的反射率被假定为一个恒定的向量R。
因而,在该区域内所有的J(x)拥有相同的方向向量R,如图2所示。
其次,通过假定在一个局部表面投影J(x)和透射率函数t(x)在统计学上是相互独立的,可以用ICA来估算R。
再次,由输入的彩色图像建立的MRF模型可应用来推断整幅图像的结果。
这一实现手段是基于物理的并能结合一幅优质的深度图来产生自然的无雾图像。
不足的是,该手段因为利用了一个局部区域的统计学独立的假设,需要在相互
的信噪比都会使得统计结果不可靠。
还有,统计规律是根据图像的颜色信息得出的,因此对灰度图像无效。
在雾浓度较大时,该方法也无能为力,因为浓雾一般没有色彩,倾向于成为噪声。
在本文下一部分,我们将展示一种新的先验规律——暗原色先验,并用来直接评估户外带雾的图像的透射率分布。
3.暗原色先验
暗原色先验是通过对户外无雾图像的观察得出的:
在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。
换言之,该区域光强度的最小值是个很小的数。
用公式描述,对于一幅图像J,我们定义暗通道
为:
(5)
代表J的某一个颜色通道,而Ω(x)是以x为中心的一块方形区域。
关于暗通道的两个输出操作,
表现在每个像素上(图3b),
是最小滤波,最小值操作是交替的。
用暗通道的概念,我们观察得出,除了天空方位,
的强度总是很低并且趋近于0。
如果J是户外的无雾图像,我们把
称为J的暗原色。
(6)
并且把以上观察得出的经验性规律称为暗原色先验。
造成暗原色中低通道值主要有三个因素:
a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;b)色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树干和石头。
总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。
为了验证暗原色先验正确与否,我们从和其他一些图片搜索引擎上使用flickr用户标记的150个最热门的标签,收集了一个户外图像的数据库,因为雾主要出现在户外景物或者城市中,我们从下载到的图像中主要选出了这两部分景区的无雾图像。
另外,我们只研究了白天的图像。
我们随机选择了5,000张图像并手工去掉了包括天空区域的部分。
它们均被剪裁成500x500的大小,计算的步长是15x15。
图4显示了几幅图像以及相应的暗原色。
图5(a)是超过5,000幅图像的暗原色强度直方图,图5(b)是相应的累计直方图。
我们可以看到暗原色当中约有75%的像素强度值为0,大概90%的像素强度值低于25。
该统计结果强有力地支持了暗原色先验的合理性。
我们同时还计算了每幅图像暗原色像素的平均强度值,其直方图如图5(c)所示。
同样,大多的暗原色都具有比较低的平均强度值。
这就意味着只有极少数的户外无雾图像不符合我们的先验规律。
由于附加的大气光,图像被雾干扰之后往往要比其本身亮度更大,透射率t一般较小。
所以被浓雾覆盖的图像的暗原色具有较高的强度值。
视觉上看来,暗原色强度值是雾浓度的粗略近似(见图4的右边)。
在下一部分,我们将利用这一性质来估算透射和大气光线的影响。
可以看到,我们忽视了天空区域因为该处无雾图像的暗原色具有较高的强度值。
幸好,可以利用雾图形成模型方程
(1)结合我们所提出的先验谨慎地处理天空区域的问题。
没有必要明确地在图像中去除。
天空区域,我们将在4.1讨论这个方面。
我们的暗原色先验的提出部分得益于众所周知的广泛用于多光谱传感系统的“黑物质去除”技术。
在[12]中,通过减去场景中最暗的点所对应的一个常数来去除空间各向同性的雾。
我们从这个想法中归纳得到了我们的新的去雾途径。
4.基于暗原色先验去雾
4.1估测透射率分布
我们首先假设大气光因子A是给定的,在4.3中我们会展示一种自动评估大气光的途径。
我们首先通过A正常化公式
(1):
=t(x)
+1-t(x)(7)
注意到我们正常化每个独立的颜色通道。
我们进一步假设透射率在局部块状Ω(x)上是连续的。
我们将这个透射率记为~t(x)。
然后我们在公式(7)的两边计算黑通道。
同样的,我们将两边进行最小值操作。
+1-
(8)
由于~t(x)在块状上连续,所以可以用在输出的最小操作上。
因为自然图像J是一幅无雾图像,根据先验规律,暗通道J趋于0
=0.(9)
由于
总是正数,所以有:
=0(10)
将(10)放入(8)中,我们可以消除多项,也可以估计到~t(x)简单的表示为:
=1-
(11)
事实上,
是正常化雾图
的暗原色。
它直接提供了透射率的估计。
如前所述,暗原色先验对天空区域不成立,但幸好在带雾的图像I中天空的颜色总是同大气光A非常接近,所以在天空区域我们有:
1.
(11)中给出~t(x)
0。
又因为天空光来自无穷远处,其透射率趋近于0,所以式子(11)能较好地同时处理包含或者不包含天空的区域。
我们并不需要事先把天空部分单独加以处理。
现实中,即使是很晴朗的天气,空气中总会不可避免地包含一些杂质分子。
所以当我们看远处的物体时雾依然是存在的。
而且,雾的存在是人们感知深度的一个基本线索[13,14]。
这一现象被称为空间透视。
如果我们彻底地移除雾的存在,图像会看起来不真实,并且深度感会丢失。
所以我们可以通过在方程(11)中引进一个常数ω(0<ω≤1),有针对性的保留一部分覆盖遥远景物的雾:
~t(x)=1-ω
(12)
这一修正具有优美的特性,对于远处的物体,它能相应地保留更多的雾。
ω的值根据具体情况而定。
在本文中,我们对所有的处理选取了一个定值:
0.95。
由(11)引出,在有雾图像模型
(1)中,对消除多项(直接透射)来说,暗原色先验是必须的。
只有附加项(大气光)留下了。
这个策略完全不同于以前的严重依赖于多项……单幅图像去雾方法[10,11]。
这些方法受多项……改变图像对比度[11]和颜色变化[10]所驱动。
相反地,我们注意到附加项改变了局部暗像素的强度。
在暗原色先验的帮助下,多项……被丢弃而附加项足够来估计透射率。
我们可以进一步从
(1)中得出:
I(x)=J(x)t1(x)+A(1-t2(x))(13)
和
并不需要一样。
用来自(11)中的方法,我们可以估计
并分离附加项,问题可以简化为多重形式(J(x)
),其他限制或者先验可以用来进一步解决这一项。
在人类视觉调查文献[15]中,附加项称为光幕照明。
(13)可以用来描述通过遮蔽或刺眼亮点看到的场景。
图6b展示了用(12)估计的透射映射图。
图6d展示了联系下的恢复图像。
我们可以看到,暗原色先验对恢复鲜明的颜色和揭示低对比度物体非常有效。
透射映射图是合理的。
主要问题是光晕和块效应。
主要是因为在一块上透射不总是连续的。
在下一节,我们将通过一种软修复的方法完善这一映射。
4.2软修复
我们注意到雾图形成模型方程
(1)和抠图方程在形式上很相似。
I=F
(14)
F和B分别是前景和背景颜色,α是前景不透明度。
透射率的分布其实就是阿尔法的分布。
因此,我们应用了一种软抠图算法[16]来完善透射率分布函数。
记经完善后的透射率函数映射为t(x).把t(x)和˜t(x)的用向量形式重新写成t和˜t,把以下的矢量函数最小化:
E(t)=tTLt+
(15)
矩阵模型L被称为抠图拉普拉斯矩阵[16],λ是一个修正后的参数。
第一项是平滑项,第二项是数据项,元素(i,j)和矩阵L定义如下:
1+
(16)
和
是输入图像I在i、j像素处的色彩,
是克洛内克函数,
和
分别是窗口
颜色矩阵的均值和方差。
是3x3的单位矩阵,
是一个修正参数,|
|是窗口
中的像素数量。
最优的t可以通过解下面的稀疏线性系统得到:
(L+
)t=
(17)
U是一个和L大小相等的单位矩阵。
我们给λ设置一个很小的值(在我们的实验中为10^-4),因此t与˜t相关。
抠图拉普拉斯矩阵[16]的来历是基于颜色线性假说:
在RGB颜色空间内,在一个小型局部块上,前景/背景颜色排列在一条单线上。
颜色线性假说也适用于图像去雾。
首先,J是自然无雾图像。
根据[16,17],颜色线性模型适用于自然图像。
然后,大气光A是连续的,满足假说因素。
因此,在去雾问题中,使用抠图拉普拉斯矩阵作为平滑项是有效的。
软抠图算法也被Hsuetal应用[18]来解决空间变量白平衡问题。
[16,18]的工作中,˜t只在稀疏区域是已知的。
Softmatting用来传输项推断未知区域的值。
在本文中,我们使用粗略地完善填充了整幅图像的˜t。
我们考虑软修图的限制条件,并用这个框架来改善映射。
在解决线性系统[17]后,我们对t用双边滤波器[19]来平滑小规模纹理。
图6(c)是对6(b)的数据项进行软抠图的结果。
我们可以看到,抑制了光晕和块效应。
修复后的透射率分布能抓住尖锐边缘的不连续性,并且勾勒出物体的轮廓。
4.3估测大气光
我们假设大气光是已知的。
在这个部分,我们提出一个方法来估计A。
在以前的工作中,多数不透明雾地区的颜色被用作A[11]或者A的初始估计值[10]。
然而,对于不透明雾地区的侦测却很少被注意到。
在Tan的工作中[11]中,在雾图中,最亮的像素被认为存在于大量浓雾中。
但是只有当天气多云并且阳光可以忽略的时候这才是正确的。
在这种情况下,大气光是景象中唯一的光源。
所以物体光线的每一个颜色通道可以由下给出:
J(x)=R(x)A(18)
R
1是环境点的反射。
去雾图像公式
(1)也可以表示为:
I(x)+R(x)At(x)+(1-t(x))A
(19)
当图像中的像素无限远(t
)的时候,最大的I就是大量浓雾并且接近于A。
不幸的是,我们很少可以忽略阳光。
考虑到阳光S,我们将(18)变为:
J(x)=R(x)(S+A)(20)
(19)变为
I(X)=R(x)St(x)+R(x)At(x)+(1-t(x))A(21)
在这种情况下,全图中最大的像素会比大气光更大。
他们可以存在于白色车或白色建筑物中(图7d和图7e)。
就像第3部分讨论的那样,雾图中的暗原色近似认为是浓雾(图7b)。
所以我们可以用暗原色去侦测大量浓雾的地方并可以提高大气光的估计值。
我们首先在暗原色中选取了最大的百分之0.1的像素。
这些像素大多存在于浓雾中。
(图7b中黄线分开的部分)。
在这些像素中,输入图像I中强度最高的像素被挑选为大气光。
这些像素在图7a中方块内。
注意这些像素在整幅输入图中可能并不是最亮的。
这个方法很实用即使像素在无限远而不存在这幅图中。
在图8b中,我们的方法试图侦测雾最浓的地方。
然而,t并不趋近于0,所以这些地区的颜色不同于A。
幸好,t在这些浓雾地方是较小的,所以阳光的影响是非常小的(看(21))。
因此,这些区域可以提供A的较好近似值。
这幅图的去雾结果展示在图8c中。
这个基于暗原色先验的方法比“最大像素”方法更稳定。
我们用这种方法自动的估计这篇文章中所有图片的大气光。
4.4复原物体光线
复原物体光线有了透射分布,我们可以通过方程
(1)复原物体的原始图像。
但当t(x)接近0的时候,直接衰减项J(x)t(x)也会接近0。
直接复原得到的原始图像倾向于包含噪音。
因此,我们把透射因子t(x)设定了一个下限
。
这意味着某些雾稠密的区域仍然保留着一定数量的雾。
最终的复原J(x)通过下式实现:
J(x)=
+A(22)
的一个典型值是0.1。
由于物体光线的亮度通常不及大气光线,经去雾处理后的图像看起来要黯淡一些。
因此我们在显示时增加了J(x)的曝光。
图6(d)是我们最终的复原图像。
4.5块尺寸
在(11)中我们算法的主要参数是块尺寸。
一方面,因为一块包含一个暗像素的可能性增加,所以对更大的块尺寸来说暗原色先验会变得更好。
我们可以看看图9:
块尺寸越大,暗原色越暗。
对一小块来说,恢复的物体光线过饱和(图10b)。
另一方面,一块的连续透射率的假设值变得更不合适。
如果块尺寸过大,深色边界的光晕会变得更强(图10c)。
图11显示了用不同块尺寸的去雾结果。
在图11b中,块尺寸是3x3。
某些灰色表面的颜色看起来过饱和。
11c和11d的块尺寸分别是15x15和30x30。
比11b看起来更加自然。
这表明我们的方法适合充分大的块尺寸。
用大块的软抠图技术能够减少人工干扰。
我们注意到11d比11c看起来有些轻微模糊(特别是远处),但是这种差异比较小。
在这篇文章的剩下部分,我们采用的块尺寸为15x15。
5实验结果
在我们的实验当中,我们使用了vanHerk快速算法[20]来实现求出局部区域最小值的操作,该算法的时间复杂度为图像面积的线性阶。
对一幅600x400的图像我们使用了15x15的卷积核。
在软抠图中,我们使用了预处理共轭梯度(PCG)算法求解。
在一台处理器为3.0GHz的IntelPentium4Processor的PC机上处理一幅600x400的图像,用了10~20秒钟。
图1和图12显示了我们的去雾结果以及复原得到的深度图。
该深度图是由方程
(2)计算得出,其结果依赖于一个未知比例的参数β。
这些图像的大气光均是通过4.3中所提到的方法自动测得的。
可以看到,即使实在雾浓度较大的地方,我们的算法也能较好地得到一些细节的信息并且还原出生动的彩色图像。
同时得到的深度图也和输入图像保持一致性。
当图像里有足够的阴影区域时,我们的算法甚至能对灰度图处理。
城市图像经常满足这个条件,在这种情况下,我们省略在全部来源下的操作
。
图13展示了这个方法。
在图14中,我们对我们的方法与Tan的工作进行了比较,他的处理结果的一些色彩经常会出现过度饱和,因为Tan的算法没有基于实际理论并且忽视了透射率,最大化对比度导致了过度估计了雾层。
我们的方法在结构上复原的同时没有牺牲色彩的真实度(e.g.,swan)。
我们的结果里也很少有明显的晕影。
然后,我们又与Fattal的工作进行了比较。
在图8中,我们的结果可以和Fattal的结果相比。
图15中显示了在浓雾情况下我们的方法优于Fattal的。
Fattal的方法是基于统计学的,需要充足的颜色信息以及差异性。
当雾很浓时,颜色很微弱,差异也不够明显,他的评估透射率的方法就不可靠了。
图15(b)和(c)显示了MRF模型建立前后他的结果的不同。
由于只有部分的透射能被可靠地复原,即使在模型建立之后,一些区域还是太灰暗(比如山峰),还有一些雾没有被移除(城市景观的较远处)。
与之相反,我们的实现在这两个方面都有理想的结果。
(图15(d))。
我们还和Kopfetal[8]最近的工作进行了比较,如图16所示。
为了去雾他们利用了3D模型和景物的纹理贴图。
这些附加的信息可能来自GoogleEarth和一些卫星图片。
然而,我们的技术可以从单一图像中产生与之媲美的去雾结果,而不需要借助任何几何学的信息。
在图17中,我们的方法与更多以前的方法进行了比较。
图17e显示了PS自动弯曲函数的结果。
这个方法等同于对每个颜色通道独立地进行暗目标相减。
因为这个方法设计去除空间不变的雾,所以当图片深度不连续时它仅能去除对应最近目标上薄薄的雾层。
图17f和g展示的是两种广泛用于提高对比度的技术,PS的非锐化滤镜和经典的直方图均衡化。
然而,如果深度不统一,这种增强应该是空间不变的。
这些技术不能确定对比度增强的程度,所以远处的目标不能很好地被去除。
另外,因为他们不是基于雾成像模型,所以他们不能给出深度映射图。
6结论探讨
在本文中我们提出了一种简单但很强大的先验,即暗原色先验来为单一图像去雾。
暗原色先验是从对户外无雾图像数据库的统计得出的规律。
在雾成像模型里引入暗原色先验,单一图像的去雾变得更为简单和有效。
由于暗原色先验是一种统计规律,对某些极为特殊的图像可能会效果不佳。
当景物在本质上同空气层接近并且没有阴影覆盖其上时,暗原色的理论就是无效的(如图18中的白色大理石)。
这些目标附近的暗通道会呈现高亮度。
就结果而言,对那些物体我们的方法会忽略透射的影响,重视雾层的处理。
而且,因为我们的方法基于雾成像模型
(1),当模型物理型无效时,它可能失败。
首先,当阳光影响非常大时,连续的大气光假设值并不适合这种情况。
在图19a中,大气光在左边亮而在右边暗。
自动估计的A(图19c)并不是其他区域真正的A,所以右边恢复的天空区域比它应该的样子要暗。
更多先进的模型[14]可以描述这种复杂的案例。
然后,透射率t是否是波动的取决于大气中的微粒是否较小(如:
薄雾),目标是否够远。
在这种情况下,透射率因颜色通道不同而不同。
这就是为什么地平线附近的目标是浅蓝的(19a)。
由于雾成像模型
(1)假定对所有颜色通道进行普通透射,所以我们恢复远处目标真实环境光失败了,它们仍然是浅蓝的。
这个问题留待下一步研究。
场景辐射