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的函数嵌套的使用方法
Jan 24 Python
python实现根据图标提取分类应用程序实例
Sep 28 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
Python打印输出数组中全部元素
Mar 13 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
python线程优先级队列知识点总结
Feb 28 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP 事件机制(2)
2011/03/23 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
js a标签点击事件
2017/03/30 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python如何获取apk的packagename和activity
2020/01/10 Python
python的json包位置及用法总结
2020/06/21 Python
python批量修改文件名的示例
2020/09/27 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫