图像去雾:基于暗通道的去雾算法

文章目录

  • 图像去雾:基于暗通道的去雾算法
    • 1.雾天图像退化模型
    • 2.基于暗通道先验的图像去雾原理
    • 3.算法结果
    • 4.参考文献
    • 5.Matlab代码

摘要:本文主要介绍,经典的基于暗通道的去雾算法。

1.雾天图像退化模型

在图像处理和计算机视觉领域经常使用的雾天图像退化模型,图像退化模型主要由两部分构成:场景反射(发射)光衰减模型和大气光成像模型。用于描述以上过程的数学模型为:
I(x)=J(x)t(x)+A(1−t(x))(1)I(x) = J(x)t(x)+A(1-t(x))\tag{1} I(x)=J(x)t(x)+A(1−t(x))(1)
其中:I(x)I(x)I(x)为观测点接收到的光强, J(x)J(x)J(x)为场景点辐射出的光强,也就是待恢复的无雾图像,t(x)t(x)t(x)为光线传播图,t(x)=e−βd(x)t(x) = e^{-\beta d(x)}t(x)=e−βd(x),d(x)d(x)d(x)为观测点距场景点的距离,β\betaβ为大气光散射系数,β\betaβ在可见光范围内视为常数, J(x)t(x)J(x)t(x)J(x)t(x)项即为场景反射(发射)光衰 减 模 型;AAA为 大 气 光 值,A(1−t(x))A(1-t(x))A(1−t(x))项即为大气光成像模型。

2.基于暗通道先验的图像去雾原理

暗通道的定义:在一幅拥有RGB三个通道的彩色图像J(x)J(x)J(x)中,对RGB三个通道和以n∗nn*nn∗n大小的滤波器模板 Ω(x)\Omega (x)Ω(x)(一般n为15 )进行两次最小值滤波,即:
Jdark(x)=miny∈Ω(x)(minc∈r,g,bJc(y))(2)J^{dark}(x)=min_{y\in \Omega(x)}(min_{c\in {r,g,b}}J^c(y)) \tag{2} Jdark(x)=miny∈Ω(x)​(minc∈r,g,b​Jc(y))(2)
经过对大量的室外无雾图像进行统计得出,室外无雾图像的暗通道具有性质,暗通值接近0.

以下为基于暗通道先验的去雾算法:

(1). 对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(1−t(x))等式两边的RGB三个通道同时除以大气光值 A ,得:
Ic(x)Ac=t(x)Jc(x)Ac+1−t(x)(3)\frac{I^c(x)}{A^c}=t(x)\frac{J^c(x)}{A^c}+1-t(x)\tag{3} AcIc(x)​=t(x)AcJc(x)​+1−t(x)(3)

(2) 大气光值A的求取:在I(x)I(x)I(x)的暗通道图中选取最亮的0.1%的像素点,这些点是雾最浓的地方,再将这些点对应到原图像I(x)I(x)I(x)的相同位置像素点,在原图像I(x)I(x)I(x)的这些点中分别选取3个通道中最大的值作为大气光值;

(3) )光线传播图t(x)t(x)t(x)的求取:同时计算等式两边的暗通道:
miny∈Ω(x)(minc(Ic(y)Ac))=t′(x)miny∈Ω(x)(minc(Ic(y)Ac))+1−t′(x)(5)min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) = t'(x)min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) + 1 - t'(x)\tag{5} miny∈Ω(x)​(minc​(AcIc(y)​))=t′(x)miny∈Ω(x)​(minc​(AcIc(y)​))+1−t′(x)(5)
根据暗通道先验理论miny∈Ω(x)(minc(Ic(y)Ac))min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c}))miny∈Ω(x)​(minc​(AcIc(y)​))接近于0.可以得出:
t′(x)=1−miny∈Ω(x)(minc(Ic(y)Ac))(6)t'(x) = 1 - min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) \tag{6} t′(x)=1−miny∈Ω(x)​(minc​(AcIc(y)​))(6)
为了使图像看起来真实在求取光线传播图t‘(x)时要乘以一个系数 www,即
t′(x)=1−w∗miny∈Ω(x)(minc(Ic(y)Ac))(6)t'(x) = 1 - w*min_{y\in \Omega(x)}(min_c(\frac{I^c(y)}{A^c})) \tag{6} t′(x)=1−w∗miny∈Ω(x)​(minc​(AcIc(y)​))(6)
其中www是控制去雾的参数,一般为0.95。www越小,去雾能力越低。

(4) 为了去除光晕现象需要对光线传播图t(x)t(x)t(x)进行软抠图(soft matting),一般情况下使用引导滤波。

(5) 还 原 出 无 雾 图 像:利 用 公 式:
J(x)=I(x)−Amax(t(x),t0)(7)J(x) = \frac{I(x)-A}{max(t(x),t_0)}\tag{7} J(x)=max(t(x),t0​)I(x)−A​(7)
分别在3个通道还原出无雾图像。当投射图ttt很小时,会导致JJJ的值偏大,会导致图片某些地方过爆,所以一般可以设置一个阈值t0t_0t0​来限制,我们设置一个阈值:一般设置较小,0.1即可。

3.算法结果

4.参考文献

[1]He Kaiming,Sun Jian,Tang Xiaoou. Single Image Haze Removal Using Dark Channel Prior.[J]. IEEE transactions on pattern analysis and machine intelligence,2011,33(12).

5.Matlab代码

基于暗通道的去雾算法
文献复现:
[1]王凯,王延杰,樊博.基于暗通道先验的图像去雾算法改进[J].液晶与显示,2016,31(08):840-845.

个人资料介绍

图像去雾:基于暗通道的去雾算法 - 附代码相关推荐

  1. 路径规划算法:基于鸟群优化的路径规划算法- 附代码

    路径规划算法:基于鸟群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于鸟群优化的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函数 2.算法结果 3 ...

  2. 基于透镜成像学习策略的灰狼优化算法-附代码

    基于透镜成像学习策略的灰狼优化算法 文章目录 基于透镜成像学习策略的灰狼优化算法 1.灰狼优化算法 2.基于透镜成像学习的 GWO 算法 2.1修改控制参数*C*策略 2.2 透镜成像反向学习策略 3 ...

  3. 基于柯西变异的蚁狮优化算法 - 附代码

    基于柯西变异的蚁狮优化算法 文章目录 基于柯西变异的蚁狮优化算法 1.蚁狮优化算法 2. 改进蚁狮优化算法 2.1 基于柯西变异算子改进 3.实验结果 4.参考文献 5.Matlab代码 6.Pyth ...

  4. 基于Levy飞行的飞蛾扑火优化算法-附代码

    基于Levy飞行的飞蛾扑火优化算法 文章目录 基于Levy飞行的飞蛾扑火优化算法 1.飞蛾扑火优化算法 2. 改进飞蛾扑火优化算法 2.1 Lévy 飞行 3.实验结果 4.参考文献 5.Matlab ...

  5. 从暗通道先验去雾到海底图像修复-三维重建辅助计算摄影

    点击上方"小白学视觉",选择加"星标"或"置顶"重磅干货,第一时间送达 一. Sea Thru:海底图像修复 我想很多朋友一定看过海底的各种 ...

  6. 50. 从暗通道先验去雾到海底图像修复-三维重建辅助计算摄影

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google ...

  7. 图像去雾算法(二)基于暗通道先验算法学习笔记

    在http://write.blog.csdn.net/postedit/78301999中介绍了图像去雾的相关研究方法,发现目前为止在图像去雾方面,何凯明博士基于暗通道先验的算法具有很好的效果,关于 ...

  8. 基于暗通道优先算法的去雾应用(Matlab/C++)

    基于暗通道优先的单幅图像去雾算法(Matlab/C++) 算法原理:             参见论文:Single Image Haze Removal Using Dark Channel Pri ...

  9. 图像去雾算法--暗通道先验去雾算法

    图像去雾: 在雾天拍摄的图像容易受雾或霾的影响,导致图片细节模糊.对比度低以至于丢失图像重要信息,为解决此类问题图像去雾算法应运而生.图像去雾算法是以满足特定场景需求.突出图片细节并增强图片质量为目的 ...

  10. 暗通道先验去雾实现过程分析

    经典去雾算法-何凯明09年提出暗通道先验去雾(Single Image Haze Removal Using Dark Channel Prior) 暗通道去雾公式:I(x) = f(x)*t(x) ...

最新文章

  1. Python常用函数--文档字符串DocStrings
  2. Silverlight学习笔记十七BingMap(六)之获取图片系统的图片信息ImageryService的应用...
  3. 北航学长的《数据竞赛入门讲义》分享:我是靠这些拿到冠军的
  4. PHP根据IP获取当前所在地地址
  5. Oracle查询重复数据并删除,只保留一条记录
  6. linux为用户配置java环境变量
  7. 打开虚拟服务器设置,什么样配置的虚拟主机打开网站快
  8. py---------面向对象进阶
  9. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)
  10. Maven -- 未完待续
  11. 设计模式笔记二十一:状态模式
  12. H3C交换机配置命令大全
  13. itunes计算机无法启动,打开电脑中的iTunes显示Apple Mobile Device Service无法启动如何解决...
  14. windows 键盘快捷键
  15. Flutter自定义主题颜色
  16. 修改360抢票的刷新频率+突破8车次限制,太简单了
  17. 一款面世较早的音乐播放器-酷狗音乐播放器下载
  18. Unity内存优化 之 ManagedHeap 整理
  19. Python爬虫获取京东大数据!其实爬虫真的很简单!
  20. GWAS计算BLUE值2--LMM计算BLUE值

热门文章

  1. C++ 单例模式 模版类(Meyers‘ Singleton)
  2. buffer sort Oracle,SQL执行计划中的BUFFER SORT是什么意思呢,请高手指点.
  3. c语言编写自由落体运动程序,3个C语言程序急求大神编写,再次先谢过了、
  4. 测度定义_测度论浅谈
  5. oracle-关于分组函数的小细节
  6. 2021-01-21
  7. -bash: vi: command not found -bash: ls: command not found
  8. python win32库与subprocess_python subprocess 模块使用(以及详解管道阻塞的坑)
  9. java applet怎么传参,使用不带浏览器的参数运行java applet
  10. PHP数组数据结构图,PHP数组与数据结构