图像去雾的算法历史与综述
1. 前言
其实之前对图像去雾也没有什么深入的理解,只是了解,实现过一些传统的图像去雾方法而已。个人感觉,在CNN模型大流行的今天,已经有很多人忽略了传统算法的发展,以至于你今天去搜索10年前的传统去雾算法或许根本找不到相关资料了,或许这就是网络中的围城吧。今天周六有空来整理一下我所了解到的图像去雾技术的发展,并尝试做一个详细点的综述。
2. 概述
图像去雾在计算机视觉中虽然不像目标检测,语义分割这种任务整天会放在台面上说,但实际上也有大量的研究人员在不断的研究新方法攻克这一充满挑战性的问题。具体来说,图像去雾算法大致可以分为下面这几类。
基于图像增强的去雾算法。基于图像增强的去雾算法出发点是尽量去除图像噪声,提高图像对比度,从而恢复出无雾清晰图像。代表性方法有:直方图均衡化(HLE)、自适应直方图均衡化(AHE)、限制对比度自适应直方图均衡化(CLAHE) 、Retinex算法、小波变换、同态滤波 等等。
基于图像复原的去雾算法。这一系列方法基本是基于大气退化模型,进行响应的去雾处理。代表性算法有:、基于导向滤波的暗通道去雾算法、Fattal的单幅图像去雾算法(Single image dehazing) 、Tan的单一图像去雾算法(Visibility in bad weather from a single image) 、Tarel的快速图像恢复算法(Fast visibility restoration from a single color or gray level image) 、贝叶斯去雾算法(Single image defogging by multiscale depth fusion) ,基于大气退化模型的去雾效果普遍好于基于图像增强的去雾算法,后面挑选的传统去雾算法例子也大多是基于图像复原的去雾算法。
基于深度学习的去雾算法。由于CNN近年在一些任务上取得了较大的进展,去雾算法自然也有大量基于CNN的相关工作。这类方法是主要可以分为两类,第一类仍然是于大气退化模型,利用神经网络对模型中的参数进行估计,早期的方法大多数是基于这种思想。第二类则是利用输入的有雾图像,直接输出得到去雾后的图像,也即是深度学习中常说的end2end。
3. 雾天退化模型
我们后面介绍的一些经典算法例子大多基于雾天退化模型,因此有必要在这里将它讲清楚。
在计算机视觉领域,通常使用雾天图像退化模型来描述雾霾等恶劣天气条件对图像造成的影响,该模型是McCartney首先提出。该模型包括衰减模型和环境光模型两部分。模型表达式为:
其中,是图像像素的空间坐标,是观察到的有雾图像,是待恢复的无雾图像,表示大气散射系数,代表景物深度,是全局大气光,通常情况下假设为全局常量,与空间坐标无关。
公式(1)中的表示坐标空间处的透射率,我们使用来表示透射率,于是得到公式(2):
由此可见,图像去雾过程就是根据求解的过程。要求解出,还需要根据求解出透射率和全局大气光。
实际上,所有基于雾天退化模型的去雾算法就是是根据已知的有雾图像求解出透射率和全局大气光。
3.1 如何估计全局大气光值A?
将图像的亮度最大的点的灰度值作为全局大气光值。
利用暗通道估计全局大气光值。在暗通道去雾算法中,从暗原色通道中选取最亮的比例的像素值,然后选取原输入图像中这些像素具有的最大灰度值作为全局大气光值。三通道中每一个通道都有一个大气光值。
分块递归思想估计全局大气光值。具体思想就是先将图像平均分为四个部分,然后分别求取四个部分中的平均亮度值,选取亮度值最大的块,将这个块平均分为四个块,选取最亮的块,当分解到块的大小达到一定阈值时,在这个块中选取亮度最大的点作为全局大气光A。可以看到这有一个递归的过程。
分段思量估计全局大气光值。我记得这是一个韩国小哥提出的方法,对天空具有天然的免疫性。我们观察一般的图像,天空部分一般被分配在图像的上部分,因此将图像水平分为个部分,然后在最上的部分使用暗通道估计算法估计全局大气光。
快速估计全局大气光值。首先求取输入图像RGB三通道中的最小值,即求取暗原色通道图像,然后对暗原色通道图像进行均值滤波,然后求取其中灰度值最大的点,接着求取输入图像RGB三通道中值最大的通道图像,然后求取出灰度值最大的点,然后将两个点的灰度值的平均值作为全局大气光A。
3.2 如何估计透射率?
3.2.1 暗通道去雾算法估计透射率
在3.1节估计出全局大气光值之后,
根据公式(2)可以得出:
首先可以确定的是的范围是,的范围是,的范围是。和是已知的,可以根据的范围从而确定的范围。已知的条件有:
根据(4)和(5)推出: