基于单幅图像的快速去雾算法实现

来源:互联网 发布:linux修改hosts文件 编辑:程序博客网 时间:2024/05/16 00:44

  基于图像复原的去雾方法中,最有代表性的是暗通道去雾算法,但是暗通道去雾算法的处理时间比较长,不能达到实时处理。在阅读了大量文献及其参考文献,找到能够实时处理的去雾算法,是清华大学写的文章:基于单幅图像的快速去雾算法,作者:刘倩,陈茂华,周东华。
  废话不多说,直接上算法
这里写图片描述
  首先对算法进行一个简单的说明,根据博文去雾技术综述可知,去雾的主要步骤就是估计全局大气光A和透射率t(x)
文章中,使用了L(x)来代替A(1t(x))

L(x)=A(1t(x))(1)
因此,本文就是根据输入图像估计AL(x),然后根据雾天退化模型求取出去雾后的图像。
估计透射率t(x)
根据博文去雾技术综述可知,
t(x)1H(x)A(2)
H(x)三通道中的最小值,并记为
M(x)=mincr,g,b(Hc(x))(3)
因此公式(2)可以变换为
t(x)1M(x)A(4)
对公式(4)右边进行均值滤波
averagesa(1M(x)A)=1averagesa(M(x))A=1yΩ(x)M(y)Asa2(5)
其中,sa表示均值滤波窗口大小,Ω(x)表示像素x的sa×sa的邻域。均值滤波后的结果能反应t(x)的大致趋势,但与真实的t(x)还相差一定的绝对值,于是,得出透射率的粗略估计值
t (x)=1Mave(x)A+ψMave(x)A=1δMave(x)A(6)
其中Mave(x)=averagesa(M(x))δ=1ψψ[0,1],因此δ[0,1]。为了防止去雾后图像出现整体画面偏暗,这里根据图像的均值来调整δ,即
δ=ρmav
mavM(x)中所有元素的均值,ρ为调节因子。因此可以得到透射率的计算公式
t(x)=max(1min(ρmav,0.9)Mave(x)A,1M(x)A)(7)
结合公式(1)可得
L(x)=min(min(ρmav,0.9)Mave(x),M(x))(8)

估计全局大气光
公式(5)中第一个等式左侧的表达式取值范围应为[0, 1],由此得出Amax(Mave(x)),一般情况下又有Amax(maxcr,g,b(Hc(x)))。这样就初步确定了全局大气光的范围,为了能够快速获取全局大气光,文章直接取两者的平均值作为全局大气光
A=12(max(H(x))+max(Mave(x)))(9)

然后根据雾天退化模型恢复出无雾图像。

因本人水平有限,如有错误,还请批评指正。

附上代码下载地址:
源码下载地址

原创粉丝点击