这篇基于暗通道先验的去雾算法,是何恺明大神 2011 年左右的一篇论文。
在计算机视觉和图形学中,会用如下公式来描述模糊图片(hazy image):
I
表示为获得的图片或者强度,或者说是待去雾的图片;J
表示场景光辉,或者说是要恢复的无雾的图片;A
表示地球大气中光的成分;t
表示非散射光到达相机部分的介质传输。而去雾的目的就是从 I
中恢复 J
,A
和 t
。
在大多数非天空的图像块中,至少有一个颜色通道具有一些这样的像素:像素的亮度非常低,接近于零。也就是说,在这样的一个块(patch)中,最小的强度接近于零。
下面是数学方面关于暗通道(dark channel)的定义,对于任意的图像 J,其暗通道 Jdark 的公式如下所示:
Jc 表示 J 的其中一个颜色通道;Ω(x) 表示是 x 中的一个局部图像块。暗通道的结果就是两个最小操作:首先求出每个像素 r,g,b 分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定。
利用暗通道的概念,观察表明,如果 J 是室外无雾图像,除了天空区域,J 的暗通道强度较低,趋于零:
所以称这个观察发现为暗通道先验。
暗通道中的低强度主要来源于三个因素:
为了证明暗通道先验。作者随机收集了 5000 张室外和城市景观的图片(考虑到雾霾大部分发生在室外),并裁掉了包含天空的部分,然后调整成 500x500 大小,并使用 patch size = 15 来计算其暗通道。
上图是验证的结果,可以说明暗通道先验具有普遍性。
有了暗通道先验的理论知识,下面就是利用该理论来进行去雾处理。
此时,假设 A
是给定的,具体的 A
的取值会在后面说明。接下来对公式 (1) 进行整理转换可以得到:
需要注意的是,该公式是针对每个颜色通道的,所以用 Ic 表示。
然后再假设 Ω(x) 是一个常数,并将 t(x) 用 t̄(x) 来表示。然后在公式 (7) 两边计算计算暗通道,最后两边进行最小值操作:
因为 t̄(x) 是常数,所以可以将其提取出来。
因为 J 为无灰度图像,即待求的图像,根据之前的暗通道理论,J 的暗通道接近于零:
又因为 Ac 总是为正,所以有:
将公式 (10) 代入到 公式 (8),可以得到:
这样就可以根据已知的 I
和给定的 A
来求得 t(x)
,继而就可以求得 J
了。
In practice, even on clear days the atmosphere is not absolutely free of any particle. So the haze still exists when we look at distant objects. Moreover, the presence of haze is a fundamental cue for human to perceive depth [13], [14]. This phenomenon is called aerial perspective. If we remove the haze thoroughly, the image may seem unnatural and we may lose the feeling of depth.
实际上,即使在晴朗的日子,大气中也并非完全没有任何粒子。所以当我们看远处的物体时,雾气仍然存在。此外,雾气的存在是人类感知深度的基本线索。这种现象被称为空中透视。如果彻底去除雾气,图像反而可能会看起来不自然,而且也会有失去深度的感觉。
所以在公式 (11) 中加入一个范围在 [0, 1] 的因子 ω: