图像增强-- 暗通道去雾

Posted zizi7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像增强-- 暗通道去雾相关的知识,希望对你有一定的参考价值。

这是图像去雾方向的一个里程碑式方法【1】,简单有效,是何凯明成名作(CVPR09 best paper)
                                                           
                                                                                     图1. 左:原图;右:暗通道去雾结果


算法原理

一般用式(1)对有雾图像建模
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) (1) I(x)=J(x)t(x)+A(1-t(x)) \\tag1 I(x)=J(x)t(x)+A(1t(x))(1)
其中 I I I是观察到的有雾的图像
       J J J是理想图像
       t t t是大气透射率
      A A A是环境光的估计
式(1)的 J ( x ) t ( x ) J(x)t(x) J(x)t(x)被称为 direct attenuation,描述场景辐射的衰减
                 A ( 1 − t ( x ) ) A(1-t(x)) A(1t(x))被称为 airlight,描述因为空气颗粒导致的光的散射(会造成场景颜色的偏移)

去雾算法的目标就是根据已有的 I I I和一些先验知识估计 A A A t t t,最终恢复 J J J

而暗通道方法最核心的一块就是找到了一个具有普遍性质的先验知识:对非天空区域,至少有一个颜色通道的值会非常低


接下来分析如何利用这个先验得到理想图像 J J J:

对图像上一个小窗口,可以认为大气透射率 t t t是一个常量,不妨记为 t ~ ( x ) \\widetildet(x) t (x),于是(1)式可写为
min ⁡ y ∈ Ω ( x ) I c ( y ) = t ~ ( x ) min ⁡ y ∈ Ω ( x ) ( J c ( y ) + ( 1 + t ~ ( x ) ) ) A c (2) \\min_y\\in \\Omega(x)I^c(y) = \\widetildet(x)\\min_y\\in\\Omega(x)(J^c(y)+(1+\\widetildet(x)))A^c \\tag2 yΩ(x)minIc(y)=t (x)yΩ(x)min(Jc(y)+(1+t (x)))Ac(2)
其中 min ⁡ y ∈ Ω ( x ) \\min_y\\in\\Omega(x) minyΩ(x)表示在 x x x的邻域 Ω ( x ) \\Omega(x) Ω(x)中取最小值
       上标 c c c表示分别对 r g b rgb rgb三个通道应用该式

对式(2)稍做变形并对等号两边同取颜色通道最小值,有
min ⁡ c ( min ⁡ y ∈ Ω ( x ) ( I c ( y ) A c ) ) = t ~ ( x ) min ⁡ c ( min ⁡ y ∈ Ω ( x ) ( J c ( y ) A c ) ) + ( 1 − t ~ ( x ) ) (3) \\min_c(\\min_y\\in\\Omega(x)(\\fracI^c(y)A^c))=\\widetildet(x)\\min_c(\\min_y\\in\\Omega(x)(\\fracJ^c(y)A^c))+(1-\\widetildet(x)) \\tag3 cmin(yΩ(x)min(AcIc(y)))=t (x)cmin(yΩ(x)min(AcJc(y)))+(1t (x))(3)

根据 暗通道先验,有
J d a r k ( x ) = min ⁡ c ( min ⁡ y ∈ Ω ( x ) ( J c ( y ) ) ) = 0 (4) J^dark(x)=\\min_c(\\min_y\\in\\Omega(x)(J^c(y)))=0 \\tag4 Jdark(x)=cmin(yΩ(x)min(Jc(y)))=0(4)

A c > 0 A^c>0 Ac>0,因此可以推得
t ~ ( x ) = 1 − min ⁡ c ( min ⁡ y ∈ Ω ( x ) ( I c ( y ) A c ) ) (5) \\widetildet(x)=1-\\min_c(\\min_y\\in\\Omega(x)(\\fracI^c(y)A^c)) \\tag5 t (x)=1cmin(yΩ(x)min(AcIc(y)))(5)

注意到暗通道先验针对的是**“非天空区域”**。对于天空区域, I c ( y ) I^c(y) Ic(y)与环境光 A c A^c Ac非常接近,也就是说
min ⁡ c ( min ⁡ y ∈ Ω ( x ) ( I c ( y ) A c ) ) → 0 ⇒ t ~ ( x ) → 0                  (6) \\min_c(\\min_y\\in\\Omega(x)(\\fracI^c(y)A^c))\\to0\\\\ \\Rightarrow \\widetildet(x)\\to 0\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\tag6 cmin(yΩ(x)min(AcIc(y)))0t (x)0                (6)
将式(6)代入式(3),同样可以推得式(5)

因此式(5)对大气投射率的估计无论对于天空区域还是非天空区域,均成立

在实际场景中其实并不存在完全无雾( I ( x ) I(x) I(x))的情况,事实上人眼已经学会根据雾的分布来估计目标的景深。
因此在式(5)加权重保留一定的雾更贴合人眼的观察
t ~ ( x ) = 1 − ω min

以上是关于图像增强-- 暗通道去雾的主要内容,如果未能解决你的问题,请参考以下文章

图像增强基于matlab暗通道先验图像去雾含Matlab源码 1367期

图像增强基于matlab暗通道图像去雾含Matlab源码 1226期

图像增强基于暗通道实现图像去雾matlab源码含GUI

用于图像去雾的优化对比度增强算法

Retinex图像增强和暗通道去雾的关系及其在hdr色调恢复上的应用

图像去雾