分享

图像去雾技术综述

 大海中的一叶小舟 2019-08-01

  研究图像去雾技术有一段时间,阅读很多文献以及实现了很多算法。因此将个人对图像去雾技术的理解写成这篇文章,避免自己忘记,以及跟广大网友交流学习。

1、概述

  图像去雾的研究算法有很多,但是主要分为两类:基于图像增强的去雾算法和基于图像复原的去雾算法。

基于图像增强的去雾算法

去除图像的噪声,提高图像的对比度,从而恢复出无雾清晰视频。具有代表性的图像增强去雾算法有: 
1. 直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE) 
2. Retinex算法 
3. 小波变换 
4. 同态滤波

基于图像复原的去雾算法

根据大气退化模型,进行响应的去雾处理。具有代表性的去雾算法: 
1. HE的暗通道去雾算法,导向滤波的暗通道去雾算法 (Single image haze removal using dark channel prior, Guided image filtering) 
2. Fattal的单幅图像去雾算法(Single image dehazing) 
3. Tan的单一图像去雾算法(Visibility in bad weather from a single image) 
4. Tarel的快速图像恢复算法(Fast visibility restoration from a single color or gray level image) 
5. 贝叶斯去雾算法(Single image defogging by multiscale depth fusion) 
基于图像复原的去雾方法,使用了大气退化模型进行去雾,相当于图像成像时的逆变换,去雾效果会好于基于图像增强的去雾算法。本文主要讨论基于复原的去雾算法。

2、雾天图像退化模型

  在计算机视觉领域,通常使用雾天图像退化模型来描述雾霾等恶劣天气条件对图像造成的影响,该模型是McCartney首先提出。该模型包括衰减模型和环境光模型两部分。模型表达式为: 

I(x)=J(x)erd(x)+A(1erd(x))(1)I(x)=J(x)e−rd(x)+A(1−e−rd(x))·······················(1)
其中,x是图像像素的空间坐标,H是观察到的有雾图像,F是待恢复的无雾图像,r表示大气散射系数,d代表景物深度,A是全局大气光,通常情况下假设为全局常量,与空间坐标x无关。 
  公式(1)中er(dx)e−r(dx)表示坐标空间x处的透射率,我们使用t(x)t(x)来表示透射率,于是得到下面的公式: 
I(x)=J(x)t(x)+A(1t(x))(2)I(x)=J(x)t(x)+A(1−t(x))·······················(2)
由此可见,图像去雾过程就是根据I(x)求解J(x)的过程。要求解出J(x),还需要根据I(x)求解出透射率t(x)和全局大气光A。 
  实际上,所有基于雾天退化模型的去雾算法就是是根据已知的有雾图像I(x)求解出透射率t(x)和全局大气光A。

估计全局大气光A: 
1、暗通道去雾算法中的估计全局大气光A 
  先从暗原色通道中选取最亮的0.1%比例的像素电,然后选取原输入图像中这些像素具有的最大灰度值作为全局大气光A。RGB三通道中每一个通道都有一个大气光值。 
2、分块递归思想估计全局大气光A: 
  先将图像平均分为四个部分,然后分别求取四个部分中的平均亮度值,选取亮度值最大的块,将这个块平均分为四个块,选取最亮的块,当分解到块的大小达到一定阈值时,在这个块中选取亮度最大的点作为全局大气光A。 
3、亮度最大值作为全局大气光A 
  选取输入图像中亮度最大的电的灰度值作为全局大气光A。 
4、分段思量估计全局大气光A 
  观察一般的图像,天空部分一般分配在图像的上1/3部分,因此将图像水平分为3个部分,然后在最上的1/3部分使用暗通道估计算法估计全局大气光A。 
5、快速估计全局大气光A 
  首先求取输入图像RGB三通道中的最小值,即求取暗原色通道图像,然后对暗原色通道图像进行均值滤波,然后求取其中灰度值最大的点,接着求取输入图像RGB三通道中值最大的通道图像,然后求取出灰度值最大的点,然后将两个点的灰度值的平均值作为全局大气光A。

估计透射率t(x): 
1、暗通道去雾算法 
  使用上面的方法先求取出全局大气光A,然后根据公式(2)可以得出: 

t(x)=AI(x)AJ(x)(3)t(x)=A−I(x)A−J(x)···············(3)
  首先可以确定的是t(x)的范围是[0, 1],I(x)的范围是[0,255],J(x)的范围是[0, 255]。A和I(x)是已知的,可以根据J(x)的范围从而确定t(x)的范围。已知的条件有: 
0J(x)255,0I(x)A,0J(x)A,0t(x)1(4)0≤J(x)≤255,0≤I(x)≤A,0≤J(x)≤A,0≤t(x)≤1··········(4)
t(x)AI(x)A0=AI(x)A=1I(x)A(5)t(x)≥A−I(x)A−0=A−I(x)A=1−I(x)A················(5)
  结合式(4)和式(5)可得:
1I(x)At(x)1(6)1−I(x)A≤t(x)≤1·······························(6)
  因此初略估计透射率的计算公式: 
t(x)=1I(x)A(7)t(x)=1−I(x)A·······················(7)
  为了保证图片的自然性,增加一个参数w来调整透射率 
t(x)=1wI(x)A(8)t(x)=1−wI(x)A·······················(8)

2、迭代思想估计透射率 
  要想得到好的图像去雾效果,肯定是需要去雾后的图像对比度高,并且图像的失真越小。我们对式(2)进行变换得到: 
J(x)=1t(x)I(x)At(x)+A(9)J(x)=1t(x)I(x)−At(x)+A···············(9)
  可以看出J(x)是I(x)的直线方程,直线与y轴的交点(0, At(x)−At(x)),与x轴的交点为(A[1-t(x)], 0)。可以看出当I(x)在0和255之间变换时,J(x)会有负数,会超过255。也就是会产生失真。 
  我们使用下式来衡量失真度
Eloss=c(r,g,b)(min(0,Jc(x)))2+(max(0,Jc(x)255))2(10)Eloss=∑c∈(r,g,b){(min(0,Jc(x)))2+(max(0,Jc(x)−255))2}·······(10)
  我们使用均方误差MSE来衡量对比度增强: 
Econtrast=c(r,g,b)(Jc(x)Jmean)2Nall=c(r,g,b)(Ic(x)Imean)2t2Nall(11)Econtrast=∑c∈(r,g,b)(Jc(x)−Jmean)2Nall=∑c∈(r,g,b)(Ic(x)−Imean)2t2Nall······(11)
  其中ImeanImean表示平均值,NallNall表示像素点的总数。因此我们要求取透射率使ElossEcontrastEloss−Econtrast的值最小。选定t(x)从0.1开始,每次增加0.1,一直到1.0,迭代9次,求取其中使ElossEcontrastEloss−Econtrast最小的值作为改点的透射率。 
  每个像素点单独求取透射率会花费大量的时间,我们可以假设一小块区域的像素的透射率相同,计算没一小块中ElossEcontrastEloss−Econtrast最小的值作为该块所有像素点的透射率。

3、精细化透射率

精细化透射率方法有: 
1、软抠图 
2、双边滤波 
3、导向滤波

4、恢复无雾图像

  估计出全局大气光A和透射率t(x)后,使用公式(9)可以计算得出去雾后的图像。实践表明这样去雾操作后,得到的无雾图像亮度会偏暗,可以使用自动对比度增强,亮度增强,伽马校正等图像处理方法进行处理,以便得效果更佳的无雾图像。

5、结语

  本文对图像去雾技术进行了简单的概括归纳,重点介绍了基于图像复原的去雾算法原理以及相关的技术。文章没有很详细的讲解算法,只是基本描述了去雾过程所涉及的技术方法。详细的讲解,我会在后续的文章后继续更新。 
  因本人水平有限,如有错误还请批评指正

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多