Picture-defogging:暗通道去雾法

算法实现在本人的GitHub:https://github.com/wk123467/Picture-defogging.git

算法原理

该算法使用McCarney大气散射模型 I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I(x)=J(x)t(x)+A(1-t(x)) I(x)=J(x)t(x)+A(1t(x)),其中 I ( x ) I(x) I(x)代表待去雾图片、 J ( x ) J(x) J(x)代表去雾图片、 t ( x ) t(x) t(x)代表大气折射率、 A A A代表大气光值,则可推断出去雾图片 J ( x ) = ( I ( x ) − A ) / t ( x ) + A J(x)=(I(x)-A)/t(x)+A J(x)=(I(x)A)/t(x)+A。要想推断出去雾图片,需要计算出大气折射率 t ( x ) t(x) t(x)和大气光值 A A A,而他们均需要待去雾图片的暗通道。

原图

在这里插入图片描述

暗通道计算方法

  1. 计算输入图片所有像素点位置在RGB三通道中的最小值,记为darkMat。例如,某个像素点位置的RGB三通道像素值为[r:34, g:45, b:18],则该位置选择像素值为18
  2. 对darkMat进行最小值滤波(或引导滤波),得到的暗通道示意图如下所示
    在这里插入图片描述

大气光值计算方法

  1. 取暗通道前0.1%的像素值位置
  2. .找出待去雾图片对应的多个像素值位置
  3. 对这些像素值位置取平均,最终得到一个整数A

大气折射率计算方法

  • 该计算方法为 t ( x ) = 1 − ω   × ( d a r k M a t A ) t(x)=1 - \omega \space\times(\frac{darkMat}{A}) t(x)=1ω ×(AdarkMat),其中 ω \omega ω为控制去雾程度,因为图片中包含雾可以使图片拥有纵深,更真实。此时得到的大气折射示意图如下所示
    在这里插入图片描述

总结

  1. 通过大气折射模式的简单变换即可得到去雾图片,方便简洁,而且效果好
  2. 算法中实现了两种图像滤波(引导滤波(图上)、最小值滤波(图下)),得到的结果如下所示。从图中可以观察到引导滤波的效果更好
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值