暗原色先验单一输入图像去雾

前端之家收集整理的这篇文章主要介绍了暗原色先验单一输入图像去雾前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

何恺明,孙剑,汤晓鸥
香港中文大学 微软亚洲研究院
摘要:在这篇论文当中,我们提出了一种简单但是有效的图像先验规律——暗原色先验(dark channel prior)来为单一输入图像去雾。暗原色先验来自对户外无雾图像数据库统计规律,它基于经观察得到的这么一个关键事实——绝大多数的户外无雾图像的每个局部区域都存在某些至少一个颜色通道的强度值很低的像素。利用这个先验建立的去雾模型,我们可直接估算雾的浓度并且复原得到高质量的去除雾干扰的图像。对户外各种不同的带雾图像的处理结果表明了 dark channel prior的巨大作用。同时,作为去雾过程中的副产品,我们还可获得该图像高质量的深度图。
1、引言
户外景物的图像通常会因为大气中的混浊的媒介(比如分子,水滴等)而降质,雾、霭、蒸气都因大气吸收或散射造成此类现象。照相机接收到景物反射过来的光线经过了衰减。此外,得到的光线还混合有大气光(经大气分子反射的周围环境的光线)。降质的图像的对比度和颜色的保真度有所下降,如图1所示。由于大气散射的程度和景点到照相机的距离有关,图像降质是随着空间变化的。
在消费/计算摄影业和计算机视觉领域,图像去雾有着广泛的需求。首先,去雾能显著地提高景象的清晰度并且改正因空气而带来的色移。一般的,去除雾干扰的图片看起来要更加舒服。其次,大多数的计算机视觉算法,从低级别的图像分析,到高级别的目标识别,一般会假定输入图像即景物的原始光线会聚所成。视觉算法(例如特征检测、滤波、光度分析等)的实现会不可避免地因为偏光、低对比度图像而不理想。再次,去雾可产生图像的深度信息,有助于视觉算法和高级的图像编辑。通常意义下不好的雾也能派上用场,作为深度的线索能加深人们对景像的理解。
然而,去雾是一项有挑战性的课题,因为大气中雾所依赖的深度信息是未知的。而在只有一幅图像可分析的情况下,解决这一问题又受到了制约。因此,很多使用多张图像或其他更多辅助信息的去雾方法被提出。在[14,15] 中用多幅图像从不同程度的偏振光的角度来去除雾的干扰。在[8,10,12]里通过从同一景象在不同天气情况下的照片获得更多的对比度的信息来去雾。[5,11]中基于深度的方法则需要来自对应图片或者已知的3D模型的大致深度信息。
最近,基于单一图像的去雾取得了很大的进展。这些方法的成功往往得益于一个强有力的先验或假设。Tan[16]观察到无雾图像比有雾图像具有更高的对比度,他通过扩大复原图像的局部对比度来达到去雾的效果。这样得到的结果在视觉上是很吸引人的,但实际上在光学原理上达到去雾。Fattal[2]通过假定透射率和表面投影在局部是不相关的,估算景物的反射率,来推断景物光在空气中传播时的透射率。Fattal的的做法比较准确,并且能产生很好的去雾结果。然而他的方法在雾浓度较大的时候便显得无能为力,尤其是当他的假想一旦失效的时候。
在这篇文章,我们提出一种新的先验规律——暗原色先验,来用于单一图像去雾。暗原色先验是对户外无雾图像库的统计得出的规律。我们发现,在不包括天空的绝大部分局部区域,总会存在一些我们称之为“dark pixels”的像素,至少有一个颜色通道具备很低的强度值。在被雾干扰的图像里,这些暗像素的强度值会被大气中的白光成分所充斥而变得较高。
因此,这些暗像素能够直接用来评估雾光的透射信息。结合一个已有的雾成像模型和插值法抠图修复,我们可以得到高质量的去雾图像和很好的深度图。
我们实现的去雾不仅在物理上有效,而且能够处理包括在雾浓度很大情况下的远距离物体。我们没有依靠输入图像透射率或表面投影的显著变化,结果基本没有人工的痕迹或者晕影。
和任何其他利用先验规律实现的算法一样,我们的实现也有其限制因素。当取景对象在较大范围内和天空接近并且没有阴影覆盖的时候,暗原色的猜想将不成立。尽管我们的去雾处理对大多数户外带雾图像都有较好成果,在一些极限情况下还是会失效。我们相信,从不同的角度来发展这一先验,并且将其组合能使得这一工作更加完善。
2、背景
在计算机视觉和计算机图形中,下述方程所描述的雾图形成模型被广泛使用[16,2,8,9]:
I(x)= J(x)t(x) + A(1 - t(x)) (1)
I是指观测到的图像的强度,J是景物光线的强度,A是全球大气光成分,t用来描述光线通过媒介透射到照相机过程中没有被散射的部分,去雾的目标就是从I中复原J,A,t。
方程右边的第一项J(x)t(x) 叫做直接衰减项[16],第二项A(1 - t(x)) 则是大气光成分。直接衰减项描述的是景物光线在透射媒介中经衰减后的部分,而大气光则是由前方散射引起的,会导致景物颜色的偏移。因为大气层可看成各向同性的,透射率t可表示为:t(x)=exp(-p*d(x))(2)
贝塔 p大气的散射系数,该式表明景物光线是随着景物深度d按指数衰减的。

雾图形成模型方程(1)意味着,在RGB色彩空间中,向量A,J(x),I(x)从几何学来看是共面的,它们的端点则是共线的,透射系数t是两条线段长度之比
c ∈ {r,g,b},是颜色通道的index

在这个模型上,Tan的方法[16]集中在增强图像的清晰度/能见度上。在透射率t可近似看作不变的区域内,由于t<1,输入图像的可见度(梯度之和)在雾的干扰之下减少:

在一个局部区域内,透射率函数t是通过扩大图像可见度并且使对比度满足J(x)的强度低于A的方法来估测的。一个MRF模型被用来进一步规范该结果。这一尝试将进一步揭开雾成像的一些细节和结构上的奥秘。然而,这一方法会产生更大的饱和值因为它仅仅集中在可见度的增强而并没有从物理上去复原原始景物的光线。此外,在靠近深度不连续的部位可能会包含一些光环效应。
在[2]当中,Fttal提出了一种基于独立成分分析(ICA)的实现方法。首先,局部区域的反射率被假定为一个恒定的向量R。因而,在该区域内所有的J(x)拥有相同的方向向量R,如图2所示。其次,通过假定在一个局部表面投影J(x)和透射率函数t(x)在统计学上是相互独立的,可以用ICA来估算R。再次,由输入的彩色图像建立的MRF模型可应用来推断整幅图像的结果。这一实现手段是基于物理的并能结合一幅优质的深度图来产生自然的无雾图像。不足的是,该手段因为利用了一个局部区域的统计学独立的假设,需要在相互独立的成分之间差异很大的时候才能有显著效果。任意差异性的匮乏或者过低的信噪比都会使得统计结果不可靠。还有,统计规律是根据图像的颜色信息得出的,因此对灰度图像无效。在雾浓度较大时,该方法也无能为力,因为浓雾一般没有色彩,倾向于成为噪声。
在本文下一部分,我们将展示一种新的先验规律——暗原色先验,并用来直接评估户外带雾的图像的透射率分布。
3、暗原色先验
暗原色先验是通过对户外无雾图像的观察得出的:在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。用公式描述,对于一幅图像J,我们定义
Jdark(x) = min
c∈{r,b}
( min
y∈Ω(x)
(Jc(y))),(5)

Jc代表J的某一个颜色通道,而Ω(x)是以x为中心的一块方形区域。我们观察得出,除了天空方位,Jdark的强度总是很低并且趋近于0。如果J是户外的无雾图像,我们把Jdark称为J的暗原色,并且把以上观察得出的经验性规律称为暗原色先验。
造成暗原色中低通道值主要有三个因素:a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;b)色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树干和石头。总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。
为了验证暗原色先验正确与否,我们从 flickr.com 和其他一些图片搜索引擎上使用flickr用户标记的150个最热门的标签,收集了一个户外图像的数据库,因为雾主要出现在户外景物或者城市中,我们从下载到的图像中主要选出了这两部分景区的无雾图像。另外,我们只研究了白天的图像。我们随机选择了5,000张图像并手工去掉了包括天空区域的部分。它们均被剪裁成500*500的大小,计算的步长是15*15。图3显示了几幅图像以及相应的暗原色。
图4(a)是超过5,000幅图像的暗原色强度直方图,图4(b)是相应的累计直方图。我们可以看到暗原色当中约有75%的像素强度值为0,大概90%的像素强度值低于25。该统计结果强有力地支持了暗原色先验的合理性。我们同时还计算了每幅图像暗原色像素的平均强度值,其直方图如图4(c)所示。同样,大多的暗原色都具有比较低的平均强度值。这就意味着只有极少数的户外无雾图像不符合我们的先验规律。
由于附加的大气光,图像被雾干扰之后往往要比其本身亮度更大,透射率t一般较小。所以被浓雾覆盖的图像的暗原色具有较高的强度值。视觉上看来,暗原色强度值是雾浓度的粗略近似(见图3的右边)。在下一部分,我们将利用这一性质来估算透射和大气光线的影响。
可以看到,我们忽视了天空区域因为该处无雾图像的暗原色具有较高的强度值。幸好,可以利用雾图形成模型方程(1)结合我们所提出的先验谨慎地处理天空区域的问题。没有必要明确地在图像中去除天空区域,我们将在4.1讨论这个方面。
我们的暗原色先验的提出部分得益于众所周知的广泛用于多光谱传感系统的dark-object subtraction技术。在[1]中,通过减去场景中最暗的点所对应的一个常数来去除空间各向同性的雾。我们从这个想法中归纳得到了我们的新的去雾途径。

4、通过暗原色先验去雾
4.1 估测透射率分布
我们首先假设大气光因子A是给定的,在4.4中我们会展示一种自动评估大气光的途径。进一步假定在一个局部区域的透射率是恒定不变的在方程(5)中使用取最小运算符得到:
min
y∈Ω(x)
(Ic (y )) = t (x ) min
y∈Ω(x)
(Jc (y ))+(1-t (x ))Ac. (6)

注意到取最小运算是对三个颜色通道单独进行操作的,该方程等价于:

min
y∈Ω(x)
( Ic(y)
Ac ) = t(x) min
y∈Ω(x)
(Jc(y)
Ac ) + (1 -t(x)). (7)
这样,在三个颜色通道中使用最小操作运算,我们得到:
min
c
( min
y∈Ω(x)
( Ic(y)
Ac )) = t(x) min
c
( min
y∈Ω(x)
(Jc(y)
Ac ))
+(1 -t(x)). (8)

根据暗原色先验的规律,无雾自然图像的暗原色项Jdark应该是接近于0的。
Jdark(x) = min
c
( min
y∈Ω(x)
(Jc(y))) = 0. (9)
Ac 总是正的,导致:
min
c
( min
y∈Ω(x)
(Jc(y)
Ac )) = 0 (10)
把方程(10)带入方程(8),我们可以简单地估算出透射率t:
t(x) = 1 -w* min
c
( min
y∈Ω(x)
( Ic(y)
Ac )). (11)
事实上,minc(miny∈Ω(x)( Ic(y)
Ac ))
Ac 是规格化的雾图Ic(y)的暗原色。它直接提供了透射信息。如前所述,暗原色先验对天空区域不成立,但幸好在带雾的图像中天空的颜色总是同大气光A非常接近,所以在天空区域我们有:
min
c
( min
y∈Ω(x)
( Ic(y)
Ac )) → 1,and t(x) → 0,
又因为天空光来自无穷远处,其透射率趋近于0,所以式子(11)能较好地同时处理包含或者不包含天空的区域。我们并不需要事先把天空部分单独加以处理。
现实中,即使是很晴朗的天气,空气中总会不可避免地包含一些杂质分子。所以当我们看远处的物体时雾依然是存在的。而且,雾的存在是人们感知深度的一个基本线索 [3,13 ]。这一现象被称为空间透视。如果我们彻底地移除雾的存在,图像会看起来不真实,并且深度感会丢失。所以我们可以通过在方程(11)中引进一个常数ω (0<ω≤ 1) ,有针对性的保留一部分覆盖遥远景物的雾:
t(x) = 1 - ω min
c
( min
y∈Ω(x)
( Ic(y)
Ac )) . (12)
这一修正具有优美的特性,对于远处的物体,它能相应地保留更多的雾。 ω的值根据具体情况而定。在本文中,我们对所有的处理选取了一个定值:0.95。

图5(b)是通过用15*15的步长处理输入雾图(图 5(a))得到的透射率估测图。由于透射率在一个局部区域内并不总是恒定的,所以该图虽然大体上过得去,但包含一些块效应。在下一节,我们将通过一种软修复的方法完善这一映射。

4.2软图像抠图
我们注意到雾图形成模型方程(1)和抠图方程在形式上很相似。透射率的分布其实就是阿尔法的分布。因此,我们应用了一种软抠图算法[7 ] 来完善透射率分布函数。记经完善后的透射率函数映射为(x) . 把t(x)和?t(x)的用向量形式重新写成t和?t,把以下的代价函数最小化:
E(t) = tT Lt + λ(t-?t)T (t -?t). (13)
L 是Levin[7 ]提出的抠图拉普拉斯矩阵,λ 是一个修正后的参数。第一项是平滑项,第二项是数据项,元素(i,j)和矩阵L定义如下:
k|(i,j)∈wk
(δij?
1
|wk|
(1+(Ii?μk)T (Σk+ ε
|wk|
U3)?1(Ij?μk))),
(14)
Ii和Ij是输入图像I在i、j像素处的色彩,δij是Kronecker delta,μk 和 Σk分别是窗口wk 中色彩矩阵的平均值和方差。 U3是一个3*3的单位矩阵,ε是一个修正参数,|wk|是 窗口wk中像素的数目。
最优的t可以通过解下面的稀疏线性系统得到:
(L + λU)t = λ?t (15)
U是一个和L大小相等的单位矩阵。我们给λ 设置一个很小的值(在我们的实验中为10?4),因此t与?t相关。
Levin的软抠图修复方法在Hsu et al . [4 ]用来处理空间变量的白平衡问题。在Levin和Hsu两人的工作中,?t只在稀疏区域是已知的。Soft matting用来传输项推断未知区域的值。在本文中,我们使用soft matting粗略地完善填充了整幅图像的?t。图5 (c)是对5 (b)的数据项进行软抠图的结果。我们可以看到,修复后的透射率分布能抓住尖锐边缘的不连续性,并且勾勒出物体的轮廓。

4.3. 复原物体光线
有了透射分布,我们可以通过方程(1)复原物体的原始图像。但当t(x)接近0的时候,直接衰减项J(x)t(x)也会接近0。直接复原得到的原始图像倾向于包含噪音。因此,我们把透射因子t(x)设定了一个下限t0。这意味着某些雾稠密的区域仍然保留着一定数量的雾。
最终的复原J(x)通过下式实现:
J(x) =
(I(x) - A)
/max(t(x),t0)
+ A. (16)
t0的一个典型值是0.1。由于物体光线的亮度通常不及大气光线,经去雾处理后的图像看起来要黯淡一些。因此我们在显示增加了J(x)的曝光。图5(d)是我们最终的复原图像。

4.4.估测大气光
从前的大多数单一图像去雾方法当中,大气光成分A通常是从不透明的含雾的像素中测得。例如,在[16]中,最大强度值的像素被看成是大气光。[2]完善这一做法。但在实际的图像中,最明亮的像素点有可能是一辆白色的汽车或者是白色的建筑物。
如我们在第三部分提到的,雾图的暗原色能够得到还算理想的雾浓度的粗略值(见图6(b))。我们可以通过暗原色来提高大气光的估测。首先选取暗原色中亮度最大的0.1%的像素,这些像素大都是不透明的(图6(b)中以黄线为界)。在以上像素当中,输入图像I中强度最大的像素点被选定为大气光。这些像素都在图6(a)中的红色三角形内。注意到它们并不一定是整幅图像里最亮的点。
这一基于暗原色先验的简单方法与“最明亮像素”方法相比,要更加健壮。我们利用它自动地估测本文中引用的所有图像的大气光成分。

5、实验结果
在我们的实验当中,我们使用了Marcel van Herk的快速算法[17]来实现求出局部区域最小值的操作,该算法的时间复杂度为图像面积的线性阶。对一幅600*400的图像我们使用了15*15的卷积核。在软抠图中,我们使用了预处理共轭梯度(PCG)算法求解。在一台处理器为3.0 GHz的 Intel Pentium 4 Processor的PC机上处理一幅600*400的图像,用了10~20秒钟。
图1和图7显示了我们的去雾结果以及复原得到的深度图。该深度图是由方程(2)计算得出,其结果依赖于一个未知比例的参数β。这些图像的大气光均是通过4.4中所提到的方法自动测得的。可以看到,即使实在雾浓度较大的地方,我们的算法也能较好地得到一些细节的信息并且还原出生动的彩色图像。同时得到的深度图也和输入图像保持一致性。
在图8中,我们对我们的方法与Tan的工作进行了比较,他的处理结果的一些色彩经常会出现过度饱和,因为Tan的算法没有基于实际理论并且忽视了透射率。我们的方法在结构上复原的同时没有牺牲色彩的真实度(e.g .,swan)。我们的结果里也很少有明显的晕影。然后,我们又与Fattal的工作进行了比较。在图9中,我们的结果可以和Fattal的结果2相比。图10中显示了在浓雾情况下我们的方法优于Fattal的。Fattal的方法是基于统计学的,需要充足的颜色信息以及差异性。当雾很浓时,颜色很微弱,差异也不够明显,他的评估透射率的方法就不可靠了。图10(b)和(c)显示了MRF模型建立前后他的结果的不同。由于只有部分的透射能被可靠地复原,即使在模型建立之后,一些区域还是太灰暗(比如山峰),还有一些雾没有被移除(城市景观的较远处)。与之相反,我们的实现在这两个方面都有理想的结果。(图10(d))
我们还和Kopf et al[5]最近的工作进行了比较,如图11所示。为了去雾他们利用了3D模型和景物的纹理贴图。这些附加的信息可能来自 Google Earth和一些卫星图片。然而,我们的技术可以从单一图像中产生与之媲美的去雾结果,而不需要借助任何几何学的信息。
当图像里有足够的阴影区域时,我们的算法甚至能对灰度图处理。我们省略最小值操作,用灰度形式的软消光修复算法[7]。图12显示了一个例子。[更多的结果和比较可在补充材料中找到。]

  1. 结论探讨 在本文中我们提出了一种简单但很强大的先验,即暗原色先验来为单一图像去雾。暗原色先验是从对户外无雾图像数据库统计得出的规律。在雾成像模型里引入暗原色先验,单一图像的去雾变得更为简单和有效。 由于暗原色先验是一种统计规律,对某些极为特殊的图像可能会效果不佳。当景物在本质上同空气层接近并且没有阴影覆盖其上时,暗原色的理论就是无效的。对那些物体我们的方法会忽略掉透射的影响,如图13中的白色大理石。我们的方法同其他许多去雾模型有一些共同的局限性——某些情况无法成功去除雾的干扰。更为先进的模型[13]可用来描述复杂的现象,比如阳光对天空光的影响,和地平线附近的青色带。今后我们将在这些模型的基础上进一步对去雾进行研究。

猜你在找的设计模式相关文章