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通过zlib实现压缩与解压字符串的方法
Nov 19 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
python中执行smtplib失败的处理方法
Jul 01 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
利用Python实现模拟登录知乎
May 25 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 中dirname(_file_)讲解
2007/03/18 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
一分钟理解js闭包
2016/05/04 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Django中的ajax请求
2018/10/19 Python
python的继承知识点总结
2018/12/10 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
python软件都是免费的吗
2020/06/18 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python如何写个俄罗斯方块
2020/11/06 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
UNIX命令速查表
2012/03/10 面试题
市政施工员自我鉴定
2014/01/15 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
中层干部考核评语
2015/01/04 职场文书
大二学年个人总结
2015/03/03 职场文书