亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現暗通道去霧算法的示例

 更新時間:2020年09月27日 12:00:20   作者:zmshy2128  
這篇文章主要介紹了python實現暗通道去霧算法的示例,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下

何凱明博士的去霧文章和算法實現已經漫天飛了,我今天也就不啰里啰唆,直接給出自己python實現的完整版本,全部才60多行代碼,簡單易懂,并有簡要注釋,去霧效果也很不錯。

在這個python版本中,計算量最大的就是最小值濾波,純python寫的,慢,可以進一步使用C優(yōu)化,其他部分都是使用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)   #使用引導濾波優(yōu)化
  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輸出帶顏色字體實例以及相關代碼,有需要的朋友們可以學習參考下。
    2019-09-09
  • 詳解pytorch tensor和ndarray轉換相關總結

    詳解pytorch tensor和ndarray轉換相關總結

    這篇文章主要介紹了詳解pytorch tensor和ndarray轉換相關總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 利用Python進行金融數據分析的全過程

    利用Python進行金融數據分析的全過程

    金融數據分析在現代金融行業(yè)中扮演著至關重要的角色,通過使用Python編程語言,我們可以對大量金融數據進行處理、分析和可視化,從而獲得有價值的洞察,本篇文章將介紹如何使用Python進行金融數據分析,需要的朋友可以參考下
    2024-08-08
  • 詳解python ThreadPoolExecutor異常捕獲

    詳解python ThreadPoolExecutor異常捕獲

    本文主要介紹了詳解python ThreadPoolExecutor異常捕獲,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Python判斷文件和文件夾是否存在的方法(最新推薦)

    Python判斷文件和文件夾是否存在的方法(最新推薦)

    常在讀寫文件之前,需要判斷文件或目錄是否存在,不然某些處理方法可能會使程序出錯,所以最好在做任何操作之前,先判斷文件是否存在,沒有則創(chuàng)建,今天通過實例代碼講解下Python判斷文件和文件夾是否存在的方法,感興趣的朋友一起看看吧
    2022-11-11
  • python連接PostgreSQL數據庫的過程詳解

    python連接PostgreSQL數據庫的過程詳解

    這篇文章主要介紹了python連接PostgreSQL數據庫的過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python實現翻轉數組功能示例

    Python實現翻轉數組功能示例

    這篇文章主要介紹了Python實現翻轉數組功能,涉及Python針對數組的遍歷、判斷、排序等相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 可能是史上最細的python中import詳解

    可能是史上最細的python中import詳解

    import在python中的意思是用來調用模塊的,下面這篇文章主要給大家介紹了關于python中import詳解的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • python使用tkinter實現屏幕中間倒計時

    python使用tkinter實現屏幕中間倒計時

    這篇文章主要為大家詳細介紹了python使用tkinter實現屏幕中間倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • python獲取Linux下文件版本信息、公司名和產品名的方法

    python獲取Linux下文件版本信息、公司名和產品名的方法

    這篇文章主要介紹了python獲取Linux下文件版本信息、公司名和產品名的方法,主要涉及了pefile模塊的用法,需要的朋友可以參考下
    2014-10-10

最新評論