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中range()与xrange()用法分析
Sep 21 Python
python基础教程之Filter使用方法
Jan 17 Python
Python语言的变量认识及操作方法
Feb 11 Python
Python面向对象之类和对象实例详解
Dec 10 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Python matplotlib可视化实例解析
Jun 01 Python
基于python实现查询ip地址来源
Jun 02 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
Python可视化学习之seaborn调色盘
Feb 24 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常用正则表达式的整理汇总
2013/06/08 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
理解Javascript闭包
2013/11/01 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
js canvas实现五子棋小游戏
2021/01/22 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
Python写的服务监控程序实例
2015/01/31 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
pycharm安装图文教程
2017/05/02 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
对python函数签名的方法详解
2019/01/22 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
柯基袜:Corgi Socks
2017/01/26 全球购物
法律专业自我鉴定
2013/10/03 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
企业领导对照检查材料
2014/08/20 职场文书
工伤事故证明
2014/10/20 职场文书
图书馆义工感想
2015/08/07 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript