本文创新点: 作者提出暗通道先验算法,即:在户外无雾图像中(非天空区域)的大部分局部区域,存在一些像素点(暗像素)在至少一个颜色通道中具有非常低的值,趋近于0。(暗通道图可以估计雾浓度信息)
大气散射模型
在计算机视觉中,描述有雾图像的模型可以表示为
I
(
x
)
=
J
(
x
)
t
(
x
)
+
A
(
1
−
t
(
x
)
)
I(x)=J(x)t(x)+A(1-t(x))
I(x)=J(x)t(x)+A(1−t(x)) (1)
I
(
x
)
I(x)
I(x)为观察到的有雾图像,
J
(
x
)
J(x)
J(x)为无雾图像,
A
A
A是大气光值,
t
(
x
)
t(x)
t(x)为透射率,表示能够到达计算机系统的没有被散射掉的一部分光。
去雾的目的是从无雾图像
I
(
x
)
I(x)
I(x)中恢复
J
(
x
)
J(x)
J(x),
A
A
A和
t
(
x
)
t(x)
t(x)。
暗通道先验
作者根据对5000多幅无雾图像的暗通道图数据观察发现:约75%的像素值为0,且90%的像素点具有非常低的值,且集中在[0,16]。由此提出暗通道先验理论,即对于一副无雾图像,其暗通道可以表示为:
J
d
a
r
k
=
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
∈
(
r
,
g
,
b
)
J
c
(
y
)
)
J^{dark}=min_{y\in \Omega(x)} (min_{c\in (r,g,b)} J^c(y))
Jdark=miny∈Ω(x)(minc∈(r,g,b)Jc(y)) (2)
J
c
(
y
)
J^c(y)
Jc(y)表示
J
J
J的任意一个颜色通道,
Ω
(
x
)
\Omega(x)
Ω(x) 表示在像素点
x
x
x的窗口。
根据暗通道先验理论得出:
J
d
a
r
k
→
0
J^{dark}\rightarrow 0
Jdark→0 (3)
本文思路:
1 透射率估计
假设大气光已知,利用大气光对大气散射模型(1)作归一化处理:
I
c
(
x
)
A
c
=
t
(
x
)
J
c
(
x
)
A
c
+
1
−
t
(
x
)
\frac{I^c(x)}{A^c} \ =t(x) \frac{J^c(x)}{A^c}\ +1-t(x)
AcIc(x) =t(x)AcJc(x) +1−t(x) (4)
假设透射率局部区域
Ω
(
x
)
\Omega(x)
Ω(x) 是恒定不变的,计算式(4)的暗通道,即求最小通道和作最小值滤波:
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
=
t
~
(
x
)
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
J
c
(
y
)
A
c
)
min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c})=\widetilde{t}(x) min_{y\in\Omega(x)}(min_c \frac{J^c(y)}{A^c})
miny∈Ω(x)(mincAcIc(y))=t
(x)miny∈Ω(x)(mincAcJc(y)) (5)
在无雾图像中, 由于
A
c
A^c
Ac是确定的,根据暗通道先验可得
J
J
J的暗通道为0,即:
J
d
a
r
k
=
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
J
c
(
y
)
A
c
)
=
0
J^{dark}=min_{y\in\Omega(x)}(min_c\frac{J^c(y)}{A^c})=0
Jdark=miny∈Ω(x)(mincAcJc(y))=0 (6)
将式(6)带入(5),可得透射率的表达式:
t
~
(
x
)
=
1
−
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
\widetilde{t}(x)=1-min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c})
t
(x)=1−miny∈Ω(x)(mincAcIc(y)) (7)
为了在景深处保持一定的雾感,使图像看起来更真实自然,本文对式(7)引进一个恒定参数
ω
(
0
<
ω
≤
1
)
\omega(0<\omega \le1)
ω(0<ω≤1):
t
~
(
x
)
=
1
−
ω
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
\widetilde{t}(x)=1-\omega min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c})
t
(x)=1−ωminy∈Ω(x)(mincAcIc(y)) (8)
本文中,
ω
\omega
ω=0.95。
透射率优化
由于暗通道中使用了最小滤波,因此式(8)得到的透射率含有halo效应和块状效应,为了解决这一问题,作者先后提出了soft-matting和导向滤波的优化算法来优化透射率,值得注意的是,soft-matting算法可以很好地消除halo现象和块状现象,但其时间复杂度大大增加;导向滤波算法时间复杂度较小,但其复原后的图像去雾不彻底,在边缘突变区域仍存在一定程度的雾。
2大气光估计
在前人的研究中,把大气光取值定在图像中雾最不透明区域。
在图像中,雾浓度越低,其暗通道图越暗,像素点值越小;雾浓度越高,其暗通道图越亮,像素点值越大,因此,暗通道图可以较好的反映雾浓度信息。
本文对于大气光值的选取方法为:先在暗通道图中选出图中前0.1%的像素值最大的像素点(这些像素点通常表示的是雾最不透明的点),这些像素点对应到有雾图像中,选取像素值最高的像素点作为大气光A。
3图像复原
根据大气散射模型,将大气光A和t透射率
t
~
(
x
)
\widetilde{t}(x)
t
(x)代入式(1),可得出最终的复原场景:
J
(
x
)
=
I
(
x
)
−
A
m
a
x
(
t
(
x
)
,
t
0
)
+
A
J(x)= \frac{I(x)-A}{max(t(x),t_0)}+A
J(x)=max(t(x),t0)I(x)−A+A (9)
其中,
t
0
t_0
t0值为0.1。由于场景点通常不如大气光亮,因此复原后的图像整体较暗,因此我们需要对复原图像
J
(
x
)
J(x)
J(x)进行增强。
本文算法不足
1 暗通道中使用了最小滤波器,容易产生块状现象和halo效应。
2 本文对一些特定图像失效,比如图像中含有场景点与大气光接近的情况(大理石,白雪等无阴影的景物),由于这类图像暗通道估计的像素点较亮,导致此区域雾浓度过高估计以及透射率估计过小。
3 当大气散射模型失效时,本文算法会失败。物理模型对于透射率的估计是基于假设透射率在rgb三个通道中值是相同的,但当大气中粒子较小时,每个通道的透射率是不同的,此时复原出的图像景深处偏蓝。(天空区域失效)
伪代码
1 对有雾图像作两次最小滤波min(min(I(x))),求暗通道; 2 求大气光:range=ceil(img_size*0.001);%取暗原色中最亮的0.1%的点数 radi_pro=zeros(range,1); %用于记录最亮点内对应图片点象素的三个通道的颜色强度 A=max(radi_pro)/3;%大气光的值(3个颜色通道的平均值) 3 求透射率: t = 1 - w*(I^dark./A) 4 根据大气散射模型复原图像
复原效果