暗通道去雾

暗通道先验

  暗通道先验是基于如下观察,在户外的无雾图像中,在大部分非天空区域,至少有一个通道值是很小一个数或趋近于零。因此,对任意一幅图 J J J,给出暗通道 J d a r k J^{dark} Jdark的表示:
(1) J d a r k ( X ) = min ⁡ y ∈ Ω ( x ) ( min ⁡ c ∈ { r , g , b } J c ( Y ) ) , J^{dark}(X)=\min _{y\in \Omega(x)}(\min _{c\in \{r, g, b\}}J^c(Y)),\tag 1 Jdark(X)=yΩ(x)min(c{r,g,b}minJc(Y)),(1)
其中两个最小是各通道最小,局部窗口最小。即首先对图像每个像素取三通道中最小值,得到一个单通道图,然后对这个单通道图作最小值滤波就可以得到暗通道图 J d a r k J^{dark} Jdark
  作者将造成这个现象的原因归结为以下三点:

  • 各类物体的阴影,玻璃
  • 彩色物体表面,如花草树木,蓝色的水面
  • 黑色物体表面,如树干,石头等

  正因为自然界总是充满了彩色和阴影,就导致了图像暗通道总是很暗。为了验证这个先验知识,作者统计了大量图片,发现基本都符合这个先验。以下是几幅680*1024的风景图在不同大小滤波窗口下的暗通道图:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上图像基本都符合暗通道先验,由此可见暗通道的普遍性。在暗通道先验的基础上,就可以进行去雾算法的推导。


雾模型分析

在计算机视觉和计算机图形领域,一个常用来描述有雾图像的公式表达为:
(2) I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) , I(x)=J(x)t(x)+A(1-t(x)),\tag2 I(x)=J(x)t(x)+A(1t(x)),(2)其中, I I I表示有雾图像, J J J是要恢复的无雾的图像, A A A是全球大气光成分, t ( x ) t(x) t(x)为透射率。
  在这里主要剖析一下这个式子。对这个式子,本身的理解,大气光成分和图像中的景物本身就是真实存在的。晴天和雾天的区别只是大气光成分的多少,表达在这个式子里就是透射率。晴天的时候大气光成分少,物体反射光的透射率很高,几乎让人感受不到大气光成分的存在。雾天则相反。
  放在PS中理解,该模型几乎就是两个图层在不同透明度下的叠加。可以设透明度为 α \alpha α。叠加后的图像为 I = α I 1 + ( 1 − α ) I 2 I=\alpha I_1+(1-\alpha)I_2 I=αI1+(1α)I2因此,我们假设最大大气光成分为255,可以通过设置不同的透射率来产生不同的有雾图像,同样用上述的图片作实验。
在这里插入图片描述
不过,由于人为选定的 t ( x ) t(x) t(x)在每个像素上都是一致的,所以会丢失景深的感觉。但是已经足以说明雾的生成,和去雾的思路。我们已知雾图,由式(2)去求解无雾的图像。同时,我们用无雾图的暗通道和人为生成 t ( x ) = 0.5 t(x)=0.5 t(x)=0.5的雾图暗通道进行对比。
在这里插入图片描述


基于暗通道的去雾算法

首先假设大气光成分A已知。去雾模型(2)可以化为以下方程: (3) 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).\tag3 AcIc(x)=t(x)AcJc(x)+1t(x).(3)上标 c c c即表示r,g,b三通道。
进一步假设每个滤波窗口内的透射率 t ( x ) t(x) t(x)是常数,记为 t ˉ ( x ) . \bar t(x). tˉ(x).然后对方程两边同时计算暗通道,即作两次最小值运算,可得下式: (4) min ⁡ y ∈ Ω ( x ) ( min ⁡ c I c ( y ) A c ) = t ˉ ( x ) min ⁡ y ∈ Ω ( x ) ( min ⁡ c J c ( y ) A c ) + 1 − t ˉ ( x ) . \min_{y\in \Omega(x)}(\min_c\frac{I^c(y)}{A^c})=\bar t(x)\min_{y\in \Omega (x)}(\min_c\frac{J^c(y)}{A^c})+1-\bar t(x).\tag4 yΩ(x)min(cminAcIc(y))=tˉ(x)yΩ(x)min(cminAcJc(y))+1tˉ(x).(4)因为 t ˉ ( x ) \bar t(x) tˉ(x)是常量,因此放在最小运算外面。
根据暗通道先验, J J J趋近于零: (5) J d a r k ( x ) = min ⁡ y ∈ Ω ( x ) ( min ⁡ c J c ( y ) ) = 0 J^{dark}(x)=\min_{y\in\Omega (x)}(\min_cJ^c(y))=0\tag5 Jdark(x)=yΩ(x)min(cminJc(y))=0(5)因为 A c A^c Ac总是正值,可得: (6) min ⁡ y ∈ Ω ( x ) ( min ⁡ c J c ( y ) A c ) = 0. \min_{y\in \Omega (x)}(\min_c\frac{J^c(y)}{A^c})=0.\tag6 yΩ(x)min(cminAcJc(y))=0.(6)将式(6)代回式(4),即可简单地得到透射率估计值: (7) t ˉ ( x ) = 1 − min ⁡ y ∈ Ω ( x ) ( min ⁡ c I c ( y ) A c ) . \bar t(x)=1-\min_{y\in \Omega(x)}(\min_c\frac{I^c(y)}{A^c}).\tag7 tˉ(x)=1yΩ(x)min(cminAcIc(y)).(7)同时,即使是晴天,大气光成分还是存在的,尤其是在看远处的物体时给人的感觉更强。这种大气光成分会给人一种景深的层次感,去雾要有所保留。因此,引入一个常量参数 ω ( 0 &lt; ω &lt; 1 ) \omega (0&lt;\omega&lt;1) ω(0<ω<1)用来控制去雾的程度: (8) t ˉ ( x ) = 1 − ω min ⁡ y ∈ Ω ( x ) ( min ⁡ c I c ( y ) A c ) . \bar t(x)=1-\omega\min_{y\in \Omega(x)}(\min_c\frac{I^c(y)}{A^c}).\tag8 tˉ(x)=1ωyΩ(x)min(cminAcIc(y)).(8)作者在文中建议的 ω \omega ω为0.95。
  在算法开始的地方就假设 A A A是已知,那么具体如何得到A的值。作者在文中给出的方法是,在暗通道中找出前0.1%最亮的点,即透射率最小的点。对于这些点,去雾图中找到对于的点,并取它们中的所有通道最大的值作为 A A A的近似。至此,透射率 t ( x ) t(x) t(x),大气光成分 A A A,雾图 I I I,都是已知了,就可以求解无雾图: (9) J ( x ) = I ( x ) − A max ⁡ ( t ( x ) , t 0 ) + A J(x)=\frac{I(x)-A}{\max(t(x),t_0)}+A\tag9 J(x)=max(t(x),t0)I(x)A+A(9)其中, t 0 t_0 t0为一个透射率下界。由于直接恢复时,当透射率 t ( x ) t(x) t(x)接近零的时候,由式(2)可知, J ( x ) t ( x ) J(x)t(x) J(x)t(x)也为零,这就会失去原图信息,容易引入噪声,因此设置一个下界,在雾密度很大的地方,保留一定数量的雾。 t 0 t_0 t0的值一般取0.1。作者还提到,去雾后的图像一般会显得比较暗淡,可以适当增加曝光以得到更好的效果。


导向滤波

  以原图灰度图作为导向图,对透射率图进行导向滤波,可以得到非常精细的透射率图,从而得到高质量的去雾图。这里再以之前人为生成的“雾图”说明导向滤波的效果。
在这里插入图片描述

  • 21
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
暗通道先验去雾算法是一种基于图像的先验知识的去方法。该算法的核心思想是使用图像中的暗通道来估计场景中的全局大气光照和深度信息,进而实现去除霾的效果。 在使用该算法时,首先需要计算图像的暗通道暗通道是将彩色图像转换为灰度图像后得到的一张图像,具有表示场景中像素点的最小值的特性。通过计算暗通道,可以获取图像中大气光照分布的估计值。 然后,需要估计全局大气光照。全局大气光照是指在整个场景中所包含的霾气溶胶和散射分子的光照强度。通过暗通道图像中最亮的像素点,可以估计得到全局大气光照的强度。 接下来,需要估计场景深度。在暗通道先验去雾算法中,假设场景中的像素点在同一条直线上,则可以通过计算暗通道中最亮像素点的亮度值与全局大气光照之比得到深度的估计值。 最后,根据估计得到的全局大气光照和深度信息,可以对图像进行去处理。通过对图像进行去操作,可以降低霾的影响,提高图像的清晰度和对比度。 Opencv是一种开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。利用Opencv可以方便地实现暗通道先验去雾算法,并对图像进行去处理。 总之,暗通道先验去雾算法是一种基于图像的先验知识,通过计算暗通道、估计全局大气光照和深度信息来实现去除霾的方法。而Opencv是一种图像处理库,可以用来实现该算法并对图像进行去处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值