何凯明博士的去雾文章和算法实现已经漫天飞了,我今天也就不啰里啰唆,直接给出自己python实现的完整版本,全部才60多行代码,简单易懂,并有简要注释,去雾效果也很不错。

在这个python版本中,计算量最大的就是最小值滤波,纯python写的,慢,可以进一步使用C优化,其他部分都是使用numpy和opencv的现成东东,效率还行。

import cv2
import numpy as npdef zmMinFilterGray(src, r=7):'''最小值滤波,r是滤波器半径''''''if r <= 0:return srch, w = src.shape[:2]I = srcres = np.minimum(I  , I[[0]+range(h-1)  , :])res = np.minimum(res, I[range(1,h)+[h-1], :])I = resres = np.minimum(I  , I[:, [0]+range(w-1)])res = np.minimum(res, I[:, range(1,w)+[w-1]])return zmMinFilterGray(res, r-1)'''return cv2.erode(src, np.ones((2*r+1, 2*r+1)))                      #使用opencv的erode函数更高效
def guidedfilter(I, p, r, eps):'''引导滤波,直接参考网上的matlab代码'''height, width = I.shapem_I = cv2.boxFilter(I, -1, (r,r))m_p = cv2.boxFilter(p, -1, (r,r))m_Ip = cv2.boxFilter(I*p, -1, (r,r))cov_Ip = m_Ip-m_I*m_pm_II = cv2.boxFilter(I*I, -1, (r,r))var_I = m_II-m_I*m_Ia = cov_Ip/(var_I+eps)b = m_p-a*m_Im_a = cv2.boxFilter(a, -1, (r,r))m_b = cv2.boxFilter(b, -1, (r,r))return m_a*I+m_bdef getV1(m, r, eps, w, maxV1):  #输入rgb图像,值范围[0,1]'''计算大气遮罩图像V1和光照值A, V1 = 1-t/A'''V1 = np.min(m,2)                                         #得到暗通道图像V1 = guidedfilter(V1, zmMinFilterGray(V1,7), r, eps)     #使用引导滤波优化bins = 2000ht = np.histogram(V1, bins)                              #计算大气光照Ad = np.cumsum(ht[0])/float(V1.size)for lmax in range(bins-1, 0, -1):if d[lmax]<=0.999:breakA  = np.mean(m,2)[V1>=ht[1][lmax]].max()V1 = np.minimum(V1*w, maxV1)                   #对值范围进行限制return V1,Adef deHaze(m, r=81, eps=0.001, w=0.95, maxV1=0.80, bGamma=False):Y = np.zeros(m.shape)V1,A = getV1(m, r, eps, w, maxV1)               #得到遮罩图像和大气光照for k in range(3):Y[:,:,k] = (m[:,:,k]-V1)/(1-V1/A)           #颜色校正Y =  np.clip(Y, 0, 1)if bGamma:Y = Y**(np.log(0.5)/np.log(Y.mean()))       #gamma校正,默认不进行该操作return Yif __name__ == '__main__':m = deHaze(cv2.imread('land.jpg')/255.0)*255cv2.imwrite('defog.jpg', m)

  

下面给两个运行效果吧

转载于:https://www.cnblogs.com/zmshy2128/p/6128033.html

暗通道去雾算法的python实现相关推荐

  1. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...

    授权自AI科技大本营(ID:rgznai100) 本文约3600字,建议阅读7分钟. 本文为你介绍FFA去雾算法和暗通道去雾算法搭建. 在过去的几十年中,单图像去雾作为基本的低级视觉任务已引起了计算机 ...

  2. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码

    在过去的几十年中,单图像去雾作为基本的低级视觉任务已引起了计算机视觉社区和人工智能公司的越来越多的关注.其中最为典型的便是北大&北航提出FFA-Net去雾新网络和何凯明博士提出的暗通道去雾算法 ...

  3. Python实现暗通道去雾算法——清晰还原雾天景色

    Python实现暗通道去雾算法--清晰还原雾天景色 在雾天拍摄照片时,画面会变得模糊不清,影响了图片的观感和质量.为了解决这个问题,学术界提出了一种称为"暗通道先验"的方法,这种方 ...

  4. 纯c语言实现的改进暗通道去雾算法测试程序(附赠大量测试图像),基于改进暗通道先验算法的图像去雾...

    邱清辉 摘要:针对普通暗通道先验算法去雾能力的不足,本文提出了一种改进算法,通过采用高斯平滑将原图像分为基础子图和细节子图,基础子图采用暗通道先验算法,细节子图采用gamma变换方法,再采用图像融合进 ...

  5. 暗通道去雾算法代码实现(1) python

    文章目录 前言 一.腐蚀膨胀操作 二.何凯明去雾论文思想的简单描述 1.关于暗通道先验 2.暗通道先验的理论依据: 3.有雾图像的形成模型 4.传输率t的估计 5.大气光的估计 6.使用导向滤波对传输 ...

  6. 暗通道去雾算法 python实现

    深度神经网络教你如何图像去雾: https://www.leiphone.com/news/201610/RC7IylYdZge7idm9.html 参考:http://blog.csdn.net/s ...

  7. 暗通道去雾(何恺明的成名作):简洁与效果并存的传统图像处理算法

    本篇博客主要作用为学习代码段与快应用的使用,内容浅显,还请路过的大佬见谅>_< 暗通道去雾算法(Single image haze removal using dark channel p ...

  8. 半年以来的图像去雾总结-图像去雾(一)暗通道去雾

    图像去雾最好的算法原型最好的莫过于何凯明博士的论文--好好阅读,必有灵感 在接下来的博客中,我会分步介绍各个图像去雾算法的研究和对比,在这里,首先介绍最经典的何凯明博士的暗通道去雾算法了,后面的博客有 ...

  9. 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)

    基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...

  10. 暗通道去雾法-对算法的理解Dark Channel Prior

    暗通道最早是由He提出的,并且也发展得很快,具体的在这里不说,这篇文章,只是谈一下暗通道去雾的实现过程 1.该方法最原始的模型是I=Jt+A(1-t),这个模型在我的其他文章中有详细介绍,这里不详细讲 ...

最新文章

  1. P1603 斯诺登的密码
  2. Windows Embedded Standard开发初体验(二)
  3. 产品生成器---父子产品模型
  4. linux安装mysql5.6.14_(四)Zabbix_linux安装mysql5.6
  5. 数据结构之图:有向图的拓扑排序,Python代码实现——26
  6. C#学习常用方法(3000)---Foreach ,in
  7. linux xampp图形界面,linux下安装xampp,XAMPP目录结构
  8. oracle 12c 性能,Oracle 12C 新性能 总结篇
  9. 百度网盘无需开会员也能享受高速下载通道
  10. hspice for linux的命令行
  11. jJava基础篇--IO流
  12. 45、预制干粉灭火装置的设置要求
  13. 【排序】八大排序算法简介及它们各自的特点总结
  14. VR视频为什么都是弯的?
  15. MinIO集群怎么接入Prometheus监控?(上)
  16. aws没有免费套餐服务数据可用
  17. 微型计算机3月2017,2017年3月计算机一级《MS Office》巩固试题及答案
  18. 你真的知道什么是三观吗?
  19. 平均路径损耗、小尺度衰落、大尺度衰落的区别
  20. MSSQL 如何删除字段的所有约束和索引

热门文章

  1. Python修改Mp3文件名称
  2. 安装eclipse插件时出现问题
  3. HttpHandler和ashx要实现IRequiresSessionState接口才能访问Session信息(转载)
  4. PHP是迄今为止最好的web平台
  5. oracle查看表空间的几个sql
  6. 学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)
  7. 关于翻译书籍版权的讨论
  8. python目录操作_Python 简明教程 --- 25,Python 目录操作
  9. binder.java 565_Android跨进程抛异常的原理的实现
  10. Nginx源码分析 - 初探Nginx的架构(01)