python实现暗通道去雾算法的示例


Posted in Python onSeptember 27, 2020

何凯明博士的去雾文章和算法实现已经漫天飞了,我今天也就不????簦?苯痈?鲎约?ython实现的完整版本,全部才60多行代码,简单易懂,并有简要注释,去雾效果也很不错。

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

import cv2
import numpy as np
 
def zmMinFilterGray(src, r=7):
  '''最小值滤波,r是滤波器半径'''
  '''if r <= 0:
    return src
  h, w = src.shape[:2]
  I = src
  res = np.minimum(I , I[[0]+range(h-1) , :])
  res = np.minimum(res, I[range(1,h)+[h-1], :])
  I = res
  res = 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.shape
  m_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_p
 
  m_II = cv2.boxFilter(I*I, -1, (r,r))
  var_I = m_II-m_I*m_I
 
  a = cov_Ip/(var_I+eps)
  b = m_p-a*m_I
 
  m_a = cv2.boxFilter(a, -1, (r,r))
  m_b = cv2.boxFilter(b, -1, (r,r))
  return m_a*I+m_b
 
def 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 = 2000
  ht = np.histogram(V1, bins)               #计算大气光照A
  d = np.cumsum(ht[0])/float(V1.size)
  for lmax in range(bins-1, 0, -1):
    if d[lmax]<=0.999:
      break
  A = np.mean(m,2)[V1>=ht[1][lmax]].max()
     
  V1 = np.minimum(V1*w, maxV1)          #对值范围进行限制
   
  return V1,A
 
def 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 Y
 
if __name__ == '__main__':
  m = deHaze(cv2.imread('land.jpg')/255.0)*255
  cv2.imwrite('defog.jpg', m)

下面给两个运行效果吧

python实现暗通道去雾算法的示例

python实现暗通道去雾算法的示例

python实现暗通道去雾算法的示例

python实现暗通道去雾算法的示例

以上就是python实现暗通道去雾算法的示例的详细内容,更多关于python实现暗通道去雾算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python ZipFile模块详解
Nov 01 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
Windows下PyCharm安装图文教程
Aug 27 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
python中metaclass原理与用法详解
Jun 25 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
python3字符串输出常见面试题总结
Dec 01 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
分享Python获取本机IP地址的几种方法
Mar 17 Python
谈谈python垃圾回收机制
Sep 27 #Python
如何在python中处理配置文件代码实例
Sep 27 #Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 #Python
python 读取、写入txt文件的示例
Sep 27 #Python
python 动态绘制爱心的示例
Sep 27 #Python
python批量修改文件名的示例
Sep 27 #Python
python 绘制国旗的示例
Sep 27 #Python
You might like
php设计模式 Visitor 访问者模式
2011/06/28 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
python下10个简单实例代码
2017/11/15 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python JSON编解码方式原理详解
2020/01/20 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
致标枪运动员加油稿
2014/02/15 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
技术入股合作协议书
2014/10/07 职场文书
2016高考寄语集锦
2015/12/04 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书