图像去雾算法学习

版权声明:原创博文如需转载,请注明出处谢谢! https://blog.csdn.net/qq_28878661/article/details/82960578

介绍一篇很好的图像去雾算法论文,对图像去雾算法的学习均源自此文章。

《Single Image Haze Removal Using Dark Channel Prior》在中国知网、百度学术上都有下载的。

作者根据Dark Object Subtraction原理通过大量实验发现局部找最暗点进行均匀去雾有很好的效果。

由此得到对于一个无雾图像每个局部区域都很有可能有一些暗的地方,换言之,至少一个颜色通道会有很低的值、或黑色东西


一些相关原理及公式理解:

1、暗通道表达式

任意输入图像J,表达式:

J^c表示彩色图像的每个通道 ,\Omega (X)表示以像素X为中心的一个窗口。

2、暗通道先验理论

作者思路启发来自 image matting 问题(半透明物体边界提取),在matting框架下,寻找一个能局部估算雾的浓度的方法。

3、去雾公式推导

I(x) —— 待去雾图像          J(x) —— 恢复的去雾图像

A —— 全球大气光成分     t(x) —— 透射率

  • 被广泛使用的雾图形成模型

I(x)=J(x)t(x)+A(1-t(x))                       (1)

由(1)左右同时除以A,得到变形式:

\frac{I^c(x)}{A^c}=t(x)\frac{J^c(x)}{A^c}+1-t(x)                          (2)

c表示R、G、B三通道

  • A值定义

借助暗通道图从有雾图像中获取。

步骤:

(1)从暗通道图中按亮度大小排序,取前0.1%的像素

(2)在原始有雾图 I 中找出其中亮度最高的点的值,即为A值

  • 透射率t(x)预估值

对式(2)进行两次求最小值:

由式(2)得:

可推出:

将式(10)带入式(8)中,得:

即为透射率预估值。

在现实生活中,雾的存在让人类感到景深的存在,因此在去雾的同时需要保留一定程度的雾。

故,对式(11)存入一个因子\omega,取值范围[ 0 , 1 ]。本文所有测试结果,依赖于\omega=0.95。得到:

  • 去雾公式

由式(1)可得:

J(x)=\frac{I(x)-A}{t(x)}+A

当投射图t的值很小时,会导致J的值偏大,而使图像整体向白场过度,因此一般设置一个阈值T0。本文以T0=1为标准。

最终得到去雾公式为:

J(x)=\frac{I(x)-A}{max(t(x),t_{0})}+A

4、各参数对去雾效果的影响

  • 窗口大小

窗口越大,去雾效果越不明显。建议窗口大小在11-51之间,即半径在5-25之间。

  • \omega

\omega值越小,去雾效果越不明显。

5、算法效果

6、去雾图像缺陷

去雾图像存在偏暗的现象,可以结合一些自动色剂之类的算法增强曝光,得到更理想的去雾图像。


具体实现源码可以在此处下载。

同时推荐另一篇文章:《Guided Image Filtering》是作者在2013年对上述算法的改进,用导向滤波代替soft matting。

参考文章:

何恺明经典去雾算法:https://blog.csdn.net/real_myth/article/details/53022490

高级图像去雾算法的快速实现:https://blog.csdn.net/huixingshao/article/details/42834939

猜你喜欢

转载自blog.csdn.net/qq_28878661/article/details/82960578