1.背景介绍

基于暗通道先验的单幅图像去雾算法来自于何凯明博士2009年的CVPR论文:《Single Image Haze Removal Using Dark Channel Prior》,2009年的CVPR共收到约1450篇投稿,其中393篇文章被接收,接收率为26%。只有一篇文章被选为那年的最佳论文。这是CVPR创立25年以来首次由中国人获得这个奖项。他根据Dark Object Subtraction原理通过大量实验发现局部找最暗点进行均匀去雾有很好的效果。由此得到对于一个无雾图像,每个局部区域都很有可能有一些暗的地方,换言之,至少一个颜色通道会有很低的值、或黑色东西。

这篇论文研究的问题是图像的去雾技术,它可以还原图像的颜色和能见度,同时也能利用雾的浓度来估计物体的距离,这些在计算机视觉上都有重要应用(例如三维重建,物体识别)。但是之前人们还没找到简单有效的方法来达到这个目的。在这篇论文里,他们找到了一个非常简单的,甚至说令人惊讶统计规律,并提出了有效的去雾方法。

2.去雾算法详述

2.1 有雾图片表达公式

有雾图像散射模型:

暗通道去雾算法 OpenCV 暗通道去雾算法优点_去雾

暗通道去雾算法 OpenCV 暗通道去雾算法优点_去雾_02

2.2暗通道定义

作者根据对5000多幅无雾图像的暗通道图数据观察发现:约75%的像素值为0,且90%的像素点具有非常低的值,且集中在[0,16]。由此提出暗通道先验理论,即对于一副无雾图像,其暗通道可以表示为:

暗通道去雾算法 OpenCV 暗通道去雾算法优点_去雾_03

2.3 透射率公式

暗通道去雾算法 OpenCV 暗通道去雾算法优点_计算机视觉_04

暗通道去雾算法 OpenCV 暗通道去雾算法优点_去雾_05

2.4 求解全球大气光值

上述推论中都是假设全球达气光A值时已知的,在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:

1) 求出有雾图像的暗通道图,从暗通道图中按照亮度的大小取前0.1%最亮的的像素。

2) 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。

2.5获得更精确的透射率图

要获得更为精细的透射率图,何博士在文章中提出了了soft matting方法,能得到非常细腻的结果。但是这一方法弱点就是速度特慢,不使用于实际使用。在2011年,何博士又发表了一片论文,其中提到了导向滤波的方式来获得较好的透射率图。该方法的主要过程集中于简单的方框模糊,而方框模糊有多重和半径无关的快速算法。这个导向滤波算法除了在去雾方面外,还有着其他多方面的应用。

后续会更新softmatting和引导滤波

2.6 最终结果输出

全局大气光值和透射率都已经求出,就可以进行去雾了,当投射图t 的值很小时,会导致J的值偏大,从而使图像整体向白场过度,因此一般可设置一阈值t0,当t值小于t0时,令t=t0,即:

暗通道去雾算法 OpenCV 暗通道去雾算法优点_计算机视觉_06