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中实现的RC4算法
Feb 14 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
python样条插值的实现代码
Dec 17 Python
python3安装speech语音模块的方法
Dec 24 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
python加载自定义词典实例
Dec 06 Python
Django中使用Celery的方法步骤
Dec 07 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
Pyhton模块和包相关知识总结
May 12 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
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
详解Vue方法与事件
2017/03/09 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
python构建自定义回调函数详解
2017/06/20 Python
python 重定向获取真实url的方法
2018/05/11 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
研讨会主持词
2014/04/02 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
绿里奇迹观后感
2015/06/15 职场文书
申请吧主发表的感言
2015/08/03 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
MySQL 计算连续登录天数
2022/05/11 MySQL
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android