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 isinstance判断对象类型
Sep 06 Python
浅析Python中的序列化存储的方法
Apr 28 Python
Django实现快速分页的方法实例
Oct 22 Python
numpy自动生成数组详解
Dec 15 Python
Python实现的栈(Stack)
Jan 26 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
python中的print()输出
Apr 12 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
python 追踪except信息方式
Apr 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
[JS]点出统计器
2020/10/11 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
基于node实现websocket协议
2016/04/25 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
python3生成随机数实例
2014/10/20 Python
Python实现批量下载图片的方法
2015/07/08 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
实习生自我鉴定范文
2013/12/05 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
欢送退休感言
2014/02/08 职场文书
学校课外活动总结
2014/05/08 职场文书
演讲稿的写法
2014/05/19 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
优秀员工演讲稿
2019/06/21 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
vue3中provide && inject的使用
2021/07/01 Vue.js
Python 中的Sympy详细使用
2021/08/07 Python
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python