这是图像去雾方向的一个里程碑式方法【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)) \tag{1} I(x)=J(x)t(x)+A(1−t(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(1−t(x))被称为 airlight,描述因为空气颗粒导致的光的散射(会造成场景颜色的偏移)
去雾算法的目标就是根据已有的 I I I和一些先验知识估计 A A A和 t t t,最终恢复 J J J
而暗通道方法最核心的一块就是找到了一个具有普遍性质的先验知识:对非天空区域,至少有一个颜色通道的值会非常低
接下来分析如何利用这个先验得到理想图像 J J J:
对图像上一个小窗口,可以认为大气透射率 t t t是一个常量,不妨记为 t ~ ( x ) \widetilde{t}(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) = \widetilde{t}(x)\min_{y\in\Omega(x)}(J^c(y)+(1+\widetilde{t}(x)))A^c \tag{2} 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)}(\frac{I^c(y)}{A^c}))=\widetilde{t}(x)\min_{c}(\min_{y\in\Omega(x)}(\frac{J^c(y)}{A^c}))+(1-\widetilde{t}(x)) \tag{3} cmin(y∈Ω(x)min(AcIc(y)))=t
(x)cmin(y∈Ω(x)min(AcJc(y)))+(1−t