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选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
Python实现建立SSH连接的方法
Jun 03 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python使用RNN实现文本分类
May 24 Python
用Python实现读写锁的示例代码
Nov 05 Python
Python实现Restful API的例子
Aug 31 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
python 画函数曲线示例
Dec 04 Python
python多进程并发demo实例解析
Dec 13 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
python实现马丁策略的实例详解
Jan 15 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新手上路(六)
2006/10/09 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
python定时器使用示例分享
2014/02/16 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python中的默认参数实例分析
2018/01/29 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
python新手学习使用库
2020/06/11 Python
python链表类中获取元素实例方法
2021/02/23 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
Django migrate报错的解决方案
2021/05/20 Python
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Java 数组的使用
2022/05/11 Java/Android