图像去雾:基于暗通道的去雾算法 - 附代码

图像去雾:基于暗通道的去雾算法

文章目录

  • 图像去雾:基于暗通道的去雾算法
    • 1.雾天图像退化模型
    • 2.基于暗通道先验的图像去雾原理
    • 3.算法结果
    • 4.参考文献
    • 5.Matlab代码

摘要:本文主要介绍,经典的基于暗通道的去雾算法。

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(1t(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(1t(x))项即为大气光成像模型。

2.基于暗通道先验的图像去雾原理

暗通道的定义:在一幅拥有RGB三个通道的彩色图像 J ( x ) J(x) J(x)中,对RGB三个通道和以 n ∗ n n*n nn大小的滤波器模板 Ω ( 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)(mincr,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(1t(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)+1t(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)))+1t(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)=1minyΩ(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)=1wminyΩ(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.

个人资料介绍

你可能感兴趣的:(图像增强,算法,计算机视觉,人工智能,opencv,机器学习)