参考: 19_基于暗通道先验的图像去雾算法(原理)_大磊FPGA图像处理_哔哩哔哩_bilibili
参考:走出寂静岭!何恺明经典去雾论文分析 - 古月居 (guyuehome.com)
在本文中,我们提出了一种简单但有效的图像先验-暗通道先验,用它可以从单个输入图像中去除雾。暗通道先验从无雾室外图像进行的统计所得。这是基于一个关键的观察:没有雾的室外图像中,大多数局部块包含一些像素,它们至少有一个颜色通道值非常低。使用此先验和雾成像模型,我们可以直接估计雾的厚度,并恢复成高质量的无雾的图像。对各种室外雾霾图像的结果证明了,我们提出的这个先验的威力。此外,去雾的同时还可以获得高质量深度图。
室外场景的图像通常会因大气中的混浊介质(例如颗粒、水滴)而退化。雾、雾和烟雾是由于大气吸收和散射而产生的现象。摄像机从场景点接收的辐射沿视线衰减。此外,入射光会与空气光混合[6](大气颗粒反射到视线中的环境光)。退化图像会失去对比度和色彩,如图1(a)所示。由于散射量取决于场景点与摄像机的距离,因此退化的程度是随空间而变化的。有雾图像不好
消费者/计算摄影学和计算机视觉应用中都特别想要去雾。首先,去除雾霾可以显著提高场景的可见性,并纠正空气光引起的颜色偏移。通常,无雾的图像在视觉上更令人愉悦。其次,从低层次的图像分析到高层次的目标识别,大多数计算机视觉算法通常假设输入图像(在辐射标定后)是场景辐射亮度。视觉算法(如特征检测、滤波和光度分析)的性能在有偏、低对比度场景辐射的图像上降低。最后,去雾后可以产生深度信息,并有助于许多视觉算法和高级图像编辑。雾可以包含深度信息线索,会有助于场景理解的。不好的有雾图也可以有大用处。去雾对很多研究都有用,大家都想去雾
然而,去雾是一个具有挑战性的问题,因为雾依赖于未知的深度信息。如果输入仅为单个有雾图像,则该问题是欠约束的。因此,已经有许多方法通过使用多个图像或附加信息来解决。基于偏振的方法[14,15]通过以不同偏振度拍摄的两个或多个图像来消除雾效应。在[8、10、12]中,从不同天气条件下同一场景的多幅图像中获得了更多约束。基于深度的方法[5,11]需要来自用户输入或已知3D模型的粗略深度信息。 有些人利用多张图像输入来去雾
最近,单图像去雾[2,16]取得了重大进展。这些方法的成功在于使用更强的先验或假设。Tan[16]观察到,无雾图像与有雾图像相比,必须具有更高的对比度,他通过最大化恢复图像的局部对比度来消除雾,结果的视觉效果不错,但在物理上可能无效。Fattal[2]估计场景的反照率,然后在假设透射和表面阴影局部不相关的情况下推断介质透射。Fattal的方法是合理的,可以产生不错的结果。然而,这种方法不能很好地处理重雾图像,并且在假设被打破的情况下可能失败。 单图像去雾也有人研究,但方法都有些问题
在本文中,我们提出了一种新颖的先验——暗通道先验,用于单图像去雾。暗通道先验基于无雾的室外图像的统计。我们发现,在大多数局部区域(不包括天空)中,某些像素(称为“暗像素”)在至少一个颜色(rgb)通道中的强度值非常低。在雾霾图像中,该通道中这些暗像素的强度主要由大气光贡献。因此,这些暗像素可以直接提供雾度透射的精确估计。结合雾度成像模型和soft matting方法,我们可以恢复高质量的无雾图像,并生成良好的深度图。
我们的方法在物理上是有效的,即使在浓雾图像中也能处理远处的物体。我们不依赖输入图像中透射或表面着色的显著差异。我们的结果会包含少量光晕伪影。
与任何使用强假设的方法一样,我们的方法也有其自身的局限性。当场景对象本质上在大局部区域上与空气光类似并且没有阴影投射在对象上时,暗通道先验可能无效。虽然我们的方法适用于大多数有雾的室外图像,但在某些极端情况下可能会失败。我们相信,从不同的方向开发新的先验知识非常重要,将它们结合在一起将进一步提高技术水平。 作者提出了基于单幅图像的暗通道先验方法,去雾效果很好,也十分合理。
此章节介绍了雾模型,有助于理解本文提出的暗通道先验
这一节主要还是对去雾这个问题做了一个定义。从算法实现的角度,我把三个最重要的点列一下:1. 定义了雾的模型,公式1将是算法实现的核心。2. 去雾,就是要估计出大气光,进而估算出透射率,最后复原出没有雾的图像。3. 透射率一定是小于1的
为了验证暗通道的性能,我们从flickr.com(由FLICKR用户注释的150个最流行的label)和几个图像搜索引擎中收集了一组室外图像。由于雾霾通常发生在室外景观和城市景观中,我们从下载的图像中手动选择无雾霾的景观和城市风景。其中,我们随机选择5000幅图像,并手动切出天空区域。调整其大小,使其最大宽度和高度为500像素,并使用15×15的补丁大小计算其暗通道。图3显示了几个室外图像和相应的暗通道。
图4(a)是所有5000个暗通道的强度直方图(横坐标为像素值,纵坐标为该像素值图像个数占总个数的百分比),图4(b)是相应的累积直方图(这样看比例更清楚)。我们可以看到,暗通道中约75%的像素具有零值,90%的像素的强度低于25。这一统计数据为我们的暗通道先验提供了非常有力的支持。我们还计算每个暗通道的平均强度,并在图4(c)中绘制相应的直方图。同样,大多数暗通道的平均强度非常低,这意味着只有一小部分无雾室外图像偏离了我们之前的图像。用事实来证明,无雾的图像确实有暗通道先验这一特性,暗通道的提出是合理的。下文的暗通道指的就是每个原始图像的暗通道图像
由于附加空气光,在透射t较低的情况下,雾图像比其无雾版本更亮。因此,霾图像的暗通道在具有更密集霾的区域中将具有更高的强度。从视觉上看,暗通道的强度是雾度厚度的粗略近似值(见图3右侧)。在下一节中,我们将使用此属性来估计透射和大气光。观察图3有雾图片的暗通道,挺有意思的,你会发现它真的和雾很近似
注意,我们忽略了天空区域,因为无雾图像的暗通道在这里可能具有高强度。幸运的是,我们可以通过使用霾成像方程(1)和先验知识来优雅地处理天空区域。没有必要明确地切出天空区域。我们将在第4.1节中讨论这个问题。暗通道这个特性对天空是不适用的。这一点很重要,我们在后期的代码实现中会有所体现。
我们的暗通道先验部分受到广泛应用于多光谱遥感系统的众所周知的暗物体减法技术的启发。在文献[1]中,作者通过减去与场景中最暗的对象相对应的恒定值来去除空间均匀的雾。在这里,我们推广了这一思想,并提出了一种新的自然图像去模糊先验。参考文献1使用了减去最暗像素值的方法来去雾,对我们有一定的启发
根据之前的统计结果,我们神奇的将公式中的一项置成了0,就得出了透射图的表达公式。
这种修改的好处在于,我们自适应地为远处的物体保留更多的雾。ω的值基于应用。本文采用的值为0.95。物理世界有雾是很正常的,作者加了一个0.95的参数。这个参数在天空部分会起到作用,保证了算出的透射值不为0。
图5(b)是根据输入有雾图像(图5(a))估计的透射图,使用的patch大小为15×15。它相当不错,但包含一些光斑效应,是因为同一patch中的透射值一致,这个设定并不总是正确的。在下一小节中,我们使用Soft matting方法重新定义该地图。
Soft matting是作者的另一个贡献,有助于提升去雾效果。下一篇文章的代码实现,我们会看出soft matting对去雾结果的提升,有效解决了边缘出现的光斑。
利用Soft Matting,优化原有的透射图。参考文献为2006年CVPR《A closed form solution to natural image matting.》后期何恺明在2010年ECCV上《Guided image filtering》提出了导向滤波的方法,可以用于替换Soft Matting,我后期再分析。
Levin的Soft Matting 方法也已被Hsu等人[4]应用于处理空间变化的白平衡问题。在Levin和Hsu的作品中,t̃仅在稀疏区域中已知,而matting主要用于将值外推到未知区域。在本文中,我们使用Soft Matting来重新定义已填充整个图像的较粗t̃。
图5(c)是使用图5(b)作为数据项的软垫结果。正如我们所见,重新定义的透射图能够捕捉到尖锐边缘的不连续性,并勾勒出物体的轮廓。
根据这一节的公式,我们将上一节的透射图t̃,利用Soft Matting得到了新的更优的透射图t
之前几节一直假定大气光的值A我们已知,这节就要介绍大气光的值是如何得到的
在以前的大多数单图像方法中,大气光A是从雾度最大的不透明像素估计的。例如,具有最高强度的像素在[16]中用作大气光,并在[2]中进一步定义。但在真实图像中,最亮的像素可能在白色汽车或白色建筑上。
正如我们在第3节中所讨论的,雾度图像的暗通道非常接近雾度密度(见图6(b))。我们可以使用暗
通道来改进大气光估计。我们首先选择暗通道中最亮的0.1%像素。这些像素是最危险的(图6(b)中以黄线为界)。在这些像素中,选择输入图像I中具有最高强度的像素作为大气光。这些像素位于图6(a)中的红色矩形中。注意,这些像素在整个图像中可能不是最亮的。这种基于暗通道先验的简单方法比“最亮像素”方法更鲁棒。我们使用它来自动估计本文中显示的所有图像的大气光。
有些人使用原图中最白的像素作为大气,你就有可能选到图中的蓝框,就错了。而何恺明使用的是暗通道图像,找到暗通道图像中最亮的0.1%像素点,再从这些点中挑出在原图中最亮的点,效果会更好。