Single Image Haze Removal Using Dark Channel Prior
时间:2009
Intro
本文使用了一个简单高效的去雾算法,他的原理基于一个对无雾图片的统计结果,在大多数非天空局部区域中总有一个像素点的至少一个通道的值很低,由此我们可以进行去雾操作
背景
常用的雾的形成公式为
其中I是观测到的图像,J是原图,t是透射率,A是大气光成分,去雾就是要从I恢复J,A,t
Dark channel prior
在大多数非天空局部区域中,总有一个像素点的至少一个通道的值很低,这称为暗通道先验(dark channel prior),对于一张图片
J
J
J,定义
其中
c
c
c表示某个通道,
Ω
(
x
)
\Omega(x)
Ω(x)是以
x
x
x为中心的local patch,作者观察到,除了天空区域中,
J
d
a
r
k
J^{dark}
Jdark很低,且接近0,称
J
d
a
r
k
J^{dark}
Jdark是图片
J
J
J的暗通道
暗通道的出现主要有以下原因:
- 阴影
- 有些物体在缺少在某个颜色通道的激活值
- 暗的物体
在flickr.com的图片上做统计,根据如图的统计信息,75%的图片dark channel值为0,90%图片的dark channel小于25
因为多余的airlight,一副有雾的图片比它的无雾版本要更亮,所以它的暗通道值在雾越浓的地方越大,视觉上来看,dark channel的值就大约等于雾的浓度,如图所示
Haze Removal Using Dark Channel Prior
Estimating the Transmission
假定大气光A已知,假设transmission
t
t
t在
Ω
\Omega
Ω中的一个patch是固定的,记一个patch的transmission为
t
~
(
x
)
\tilde{t}(x)
t~(x),则有
min操作是在三个通道上分别进行的,这个方程等价于
然后在三个通道上取最小值,有
根据暗通道先验,
且A是正值,则有
所以有
直接可以得到transmission的估计值。
如前所述,暗通道先验只是在非天空区域的,但由于带雾图片的天空区域通常和大气光A很接近:
因为天空在无限远且透射率为0,前一个方程就同时适用于两种情况
即便在看似无雾的场景中,雾也是少量存在的,它构成了人们视觉上的真实感并给人一种远近的感觉,将雾全部去除会导致我们失去这种感觉,所以我们保留一定程度的雾,通过引入常量 w w w
本文中
w
=
0.95
w=0.95
w=0.95,如图所示,(b)是从(a)估计到的transmission map,使用patch size=15*15,估计结果还不错,但是出现了一些block effects,因为patch的t不总是固定的
Soft Matting
注意到雾的形成公式和抠图的公式很相似,因此我们使用soft matting 算法来精炼transmission,记精炼后的transmission map为
t
(
x
)
t(x)
t(x),我们最小化以下函数
其中
L
L
L是Matting Laplacian matrix,
λ
\lambda
λ是正则项,第一项是平滑项,第二项是数据项
L L L的第(i,j)个元素为
其中
I
i
,
I
j
I_i,I_j
Ii,Ij是输入图片在位置
i
,
j
i,j
i,j的颜色,
δ
i
j
\delta_{ij}
δij是Kronecker delta,
μ
k
\mu_k
μk和
Σ
k
\Sigma_k
Σk是窗口
w
k
w_k
wk的平均值和方差矩阵,
U
ε
U\varepsilon
Uε是一个3×3的单位矩阵,
ε
\varepsilon
ε是一个正则化项,
∣
w
k
∣
|w_k|
∣wk∣是窗口
w
k
w_k
wk中的像素个数,最优的
t
t
t可以通过求解线性系统得到
其中
U
U
U是单位矩阵,这里我们设置
λ
=
1
0
−
4
\lambda=10^{-4}
λ=10−4,soft matting的结果如图所示,相比之前的结果它解决了边界不连续的问题
Recovering the Scene Radiance
有了t之后即可重建scene radiance,direct attenuation项J(x)t(x)在t(x)接近0的时候会很小,导致恢复的图像噪声很多,因此我们设定了一个
t
(
x
)
t(x)
t(x)的下界
t
0
t_0
t0,这意味着少量的雾在雾非常深的情况下被保留了,最终的重建公式为
t
0
t_0
t0取0.1,因为scene radiance通常没有大气光亮,因此恢复的图片会很暗,因此我们提高了J(x)的亮度,结果如图所示
Estimating the Atmospheric Light
首先选择前0.1%的亮度的dark channel,这些像素代表了雾最大的区域,在这些像素中,对应原图位置最大intensity的位置就选择为大气光A,注意到这个位置不一定是原图中最大intensity的位置,相比取原图最大的位置,它的鲁棒性更强
实验
实验中对600*400的图像选择patch size=15*15,在soft matting中使用预条件共轭梯度算法,结果如图所示
其中深度图是用下式估计的
结论
本文提出了一个简单有效的去雾算法,核心思想是使用暗通道先验得到transmission,加上soft matting对结果加以精炼,算法在大多数图片上的效果都非常好,但不适用于物体和大气光相似且没有阴影的图片