图像去雾:基于暗通道的去雾算法
摘要:本文主要介绍,经典的基于暗通道的去雾算法。
1.雾天图像退化模型
在图像处理和计算机视觉领域经常使用的雾天图像退化模型,图像退化模型主要由两部分构成:场景反射(发射)光衰减模型和大气光成像模型。用于描述以上过程的数学模型为:
I
(
x
)
=
J
(
x
)
t
(
x
)
+
A
(
1
−
t
(
x
)
)
(1)
I(x) = J(x)t(x)+A(1-t(x))\tag{1}
I(x)=J(x)t(x)+A(1−t(x))(1)
其中:
I
(
x
)
I(x)
I(x)为观测点接收到的光强,
J
(
x
)
J(x)
J(x)为场景点辐射出的光强,也就是待恢复的无雾图像,
t
(
x
)
t(x)
t(x)为光线传播图,
t
(
x
)
=
e
−
β
d
(
x
)
t(x) = e^{-\beta d(x)}
t(x)=e−βd(x),
d
(
x
)
d(x)
d(x)为观测点距场景点的距离,
β
\beta
β为大气光散射系数,
β
\beta
β在可见光范围内视为常数,
J
(
x
)
t
(
x
)
J(x)t(x)
J(x)t(x)项即为场景反射(发射)光衰 减 模 型;
A
A
A为 大 气 光 值,
A
(
1
−
t
(
x
)
)
A(1-t(x))
A(1−t(x))项即为大气光成像模型。
2.基于暗通道先验的图像去雾原理
暗通道的定义:在一幅拥有RGB三个通道的彩色图像
J
(
x
)
J(x)
J(x)中,对RGB三个通道和以
n
∗
n
n*n
n∗n大小的滤波器模板
Ω
(
x
)
\Omega (x)
Ω(x)(一般n为15 )进行两次最小值滤波,即:
J
d
a
r
k
(
x
)
=
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
∈
r
,
g
,
b
J
c
(
y
)
)
(2)
J^{dark}(x)=min_{y\in \Omega(x)}(min_{c\in {r,g,b}}J^c(y)) \tag{2}
Jdark(x)=miny∈Ω(x)(minc∈r,g,bJc(y))(2)
经过对大量的室外无雾图像进行统计得出,室外无雾图像的暗通道具有性质,暗通值接近0.
以下为基于暗通道先验的去雾算法:
(1). 对
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))等式两边的RGB三个通道同时除以大气光值 A ,得:
I
c
(
x
)
A
c
=
t
(
x
)
J
c
(
x
)
A
c
+
1
−
t
(
x
)
(3)
\frac{I^c(x)}{A^c}=t(x)\frac{J^c(x)}{A^c}+1-t(x)\tag{3}
AcIc(x)=t(x)AcJc(x)+1−t(x)(3)
(2) 大气光值A的求取:在 I ( x ) I(x) I(x)的暗通道图中选取最亮的0.1%的像素点,这些点是雾最浓的地方,再将这些点对应到原图像 I ( x ) I(x) I(x)的相同位置像素点,在原图像 I ( x ) I(x) I(x)的这些点中分别选取3个通道中最大的值作为大气光值;
(3) )光线传播图
t
(
x
)
t(x)
t(x)的求取:同时计算等式两边的暗通道:
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
(
I
c
(
y
)
A
c
)
)
+
1
−
t
′
(
x
)
(5)
min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) = t'(x)min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) + 1 - t'(x)\tag{5}
miny∈Ω(x)(minc(AcIc(y)))=t′(x)miny∈Ω(x)(minc(AcIc(y)))+1−t′(x)(5)
根据暗通道先验理论
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
(
I
c
(
y
)
A
c
)
)
min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c}))
miny∈Ω(x)(minc(AcIc(y)))接近于0.可以得出:
t
′
(
x
)
=
1
−
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
(
I
c
(
y
)
A
c
)
)
(6)
t'(x) = 1 - min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) \tag{6}
t′(x)=1−miny∈Ω(x)(minc(AcIc(y)))(6)
为了使图像看起来真实在求取光线传播图t‘(x)时要乘以一个系数
w
w
w,即
t
′
(
x
)
=
1
−
w
∗
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
(
I
c
(
y
)
A
c
)
)
(6)
t'(x) = 1 - w*min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) \tag{6}
t′(x)=1−w∗miny∈Ω(x)(minc(AcIc(y)))(6)
其中
w
w
w是控制去雾的参数,一般为0.95。
w
w
w越小,去雾能力越低。
(4) 为了去除光晕现象需要对光线传播图 t ( x ) t(x) t(x)进行软抠图(soft matting),一般情况下使用引导滤波。
(5) 还 原 出 无 雾 图 像:利 用 公 式:
J
(
x
)
=
I
(
x
)
−
A
m
a
x
(
t
(
x
)
,
t
0
)
(7)
J(x) = \frac{I(x)-A}{max(t(x),t_0)}\tag{7}
J(x)=max(t(x),t0)I(x)−A(7)
分别在3个通道还原出无雾图像。当投射图
t
t
t很小时,会导致
J
J
J的值偏大,会导致图片某些地方过爆,所以一般可以设置一个阈值
t
0
t_0
t0来限制,我们设置一个阈值:一般设置较小,0.1即可。
3.算法结果
4.参考文献
[1]He Kaiming,Sun Jian,Tang Xiaoou. Single Image Haze Removal Using Dark Channel Prior.[J]. IEEE transactions on pattern analysis and machine intelligence,2011,33(12).
5.Matlab代码
基于暗通道的去雾算法
文献复现:
[1]王凯,王延杰,樊博.基于暗通道先验的图像去雾算法改进[J].液晶与显示,2016,31(08):840-845.
个人资料介绍