十月太忙,還是寫一篇吧!祝大家1024節(jié)日快樂O(∩_∩)O
歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都將結合案例、代碼和作者的經(jīng)驗講解,真心想把自己近十年的編程經(jīng)驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。Python系列整體框架包括基礎語法10篇、網(wǎng)絡爬蟲30篇、可視化分析10篇、機器學習20篇、大數(shù)據(jù)分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉(zhuǎn)發(fā)就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
該系列文章主要講解Python OpenCV圖像處理和圖像識別知識,前期主要講解圖像處理基礎知識、OpenCV基礎用法、常用圖像繪制方法、圖像幾何變換等,中期講解圖像處理的各種運算,包括圖像點運算、形態(tài)學處理、圖像銳化、圖像增強、圖像平滑等,后期研究圖像識別、圖像分割、圖像分類、圖像特效處理以及圖像處理相關應用。
第一部分作者介紹了圖像處理基礎知識,第二部分介紹了圖像運算和圖像增強,接下來第三部分我們將詳細講解圖像識別及圖像處理經(jīng)典案例,該部分屬于高階圖像處理知識,能進一步加深我們的理解和實踐能力。前面介紹了OpenGL繪制圖形相關知識。這篇文章繼續(xù)補充圖像處理的高階應用,即圖像去霧算法。本文主要講解ACE去霧算法、暗通道先驗去霧算法以及霧化生成算法,并且參考了兩位計算機視覺大佬(Rizzi和何愷明)的論文。希望對大家有所幫助,如果有不足之處,還請海涵。
下載地址:記得點贊喔 O(∩_∩)O 前文賞析見文章末尾
- https://github.com/eastmountyxz/Python-zero2one
- 開源600多頁電子書:https://github.com/eastmountyxz/HWCloudImageRecognition
作者新開的“娜璋AI安全之家”將專注于Python和安全技術,主要分享Web滲透、系統(tǒng)安全、人工智能、大數(shù)據(jù)分析、圖像識別、惡意代碼檢測、CVE復現(xiàn)、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。
一.圖像去霧
隨著社會的發(fā)展,環(huán)境污染逐漸加劇,越來越多的城市頻繁出現(xiàn)霧霾,這不僅給人們的身體健康帶來危害,還給那些依賴圖像信息的計算機視覺系統(tǒng)造成了不良影響,因為在霧天采集到的圖像對比度和飽和度均較低,顏色易發(fā)生偏移與失真等。因此,尋找一種簡單有效的圖像去霧方法,對計算機視覺的后續(xù)研究至關重要。
圖像增強(Image Enhancement)是指按照某種特定的需求,突出圖像中有用的信息,去除或者削弱無用的信息。圖像增強的目的是使處理后的圖像更適合人眼的視覺特性或易于機器識別。 在醫(yī)學成像、遙感成像、人物攝影等領域,圖像增強技術都有著廣泛的應用。圖像增強同時可以作為目標識別、目標跟蹤、特征點匹配、圖像融合、超分辨率重構等圖像處理算法的預處理算法[1-3]。
近些年來,出現(xiàn)了眾多的單幅圖像去霧算法,應用比較廣泛的有:
- 直方圖均衡化去霧算法
- Retinex去霧算法
- 暗通道先驗去霧算法
- 基于卷積神經(jīng)網(wǎng)絡的DehazeNet去霧算法
其主要可以分為 3 類:基于圖像增強的去霧算法、基于圖像復原的去霧算法和基于 CNN 的去霧算法。
1.基于圖像增強的去霧算法
通過圖像增強技術突出圖像細節(jié),提升對比度,使之看起來更加清晰,這類算法的適用性較廣。具體的算法有:
- Retinex 算法:根據(jù)成像原理消除反射分量影響,達到圖像增強去霧效果。
- 直方圖均衡化算法:使圖像的像素分布更加均勻,放大圖像的細節(jié)。
- 偏微分方程算法:將圖像視作一個偏微分方程,計算梯度場提高對比度。
- 小波變換算法:對圖像進行分解,放大有用的部分。
此外,在這類算法的基礎上出現(xiàn)了眾多的基于圖像增強原理的改進算法。
2.基于圖像復原的去霧算法
主要是基于大氣散射物理學模型,通過對大量有霧圖像和無霧圖像進行觀察總結,得到其中存在的一些映射關系,然后根據(jù)有霧圖像的形成過程來進行逆運算,從而恢復清晰圖像。其中最經(jīng)典的要屬何愷明大佬提出的:
- 暗通道先驗去霧算法
通過對大量無霧圖像進行特征分析,找到了無霧圖像與大氣散射模型中某些參數(shù)的先驗關系。該算法復雜度低,去霧效果好,因此在其基礎上出現(xiàn)了大量基于暗通道先驗的改進算法[4-6]。
3.基于CNN的去霧算法
使用卷積神經(jīng)網(wǎng)絡(CNN)建立一個端到端的模型,通過有霧圖像恢復出無霧圖像,目前使用神經(jīng)網(wǎng)絡進行去霧的算法主要有兩種思路:
- 使用CNN生成大氣散射模型的某些參數(shù),再根據(jù)大氣散射模型來恢復無霧圖像
- 使用CNN或GAN根據(jù)模糊圖像生成無霧的清晰圖像
CNN因其強大的學習能力在多個領域得到應用,因此也出現(xiàn)了采用CNN進行去霧的算法。2016年CAI等首次提出了一種名為DehazeNet的去霧網(wǎng)絡,用于估計有霧圖像的透射率。DehazeNet將有霧的模糊圖像作為輸入,輸出其透射率,基于大氣散射模型理論恢復出無霧的清晰圖像[1-2]。
圖41-5是分別對直方圖均衡化、暗通道先驗去霧、DehazeNet和AOD-Net去霧算法進行測試,實驗結果如圖所示。由圖可知,基于圖像增強的直方圖均衡化算法的去霧圖像對比度明顯增強,由于不考慮降質(zhì)原因,在增加對比度的同時也對噪聲進行了放大,出現(xiàn)細節(jié)丟失與色彩偏差現(xiàn)象。基于物理模型的暗通道去霧算法、基于神經(jīng)網(wǎng)絡的DehazeNet和AOD-Net算法的去霧效果較直方圖均衡化算法更佳。
其他去霧算法對比結果如圖41-6所示,比如城市和道路有無圖像去霧效果。
正如總結王道累老師[2]總結的一樣,目前針對有霧圖像去霧的算法主要是從基于圖像增強、圖像復原和卷積神經(jīng)網(wǎng)絡3個方向進行的。
- 基于圖像增強的方法不考慮有霧圖像的形成過程,而是直接通過突出圖像的細節(jié),提高對比度等方式,從而使有霧圖像看上去更加清晰。
- 基于圖像復原的方法則是追尋圖像降質(zhì)的物理過程,通過物理模型還原出清晰的圖像。
- 基于 CNN 的方法則是利用神經(jīng)網(wǎng)絡強大的學習能力,尋找有霧圖像與圖像復原物理模型中某些系數(shù)的映射關系或者使用 GAN,根據(jù)有霧圖像還原出無霧的清晰圖像。
上述3類去霧算法對于霧天圖像都有著明顯的去霧效果,盡管其在實際生活中已經(jīng)得到了廣泛的應用,但下述幾點仍有可能是今后圖像去霧領域的研究重點和難點:
- 更加真實的霧天圖像數(shù)據(jù)集
采用神經(jīng)網(wǎng)絡進行去霧的算法在效果上好于圖像增強和復原的方法,但是由于在自然界中很難拍攝到一組背景相同的有霧圖像和無霧圖像,因此目前訓練神經(jīng)網(wǎng)絡所采用的數(shù)據(jù)集均是通過合成得到的,雖然能夠在一定程度上擬合自然環(huán)境,但是仍然存在著一些差距。所以目前急需一種由在真實環(huán)境中獲取到的具有相同背景的有霧圖像和無霧圖像構建的數(shù)據(jù)集,來提高神經(jīng)網(wǎng)絡去霧算法的魯棒性和穩(wěn)定性。 - 更加簡便的去霧算法
目前各類算法能夠有效去除單幅圖像上的霧霾,但相對較好的算法都存在著時間復雜度高的問題,很難應用到視頻去霧或者需求較多的復雜任務中去。 - 魯棒性更強的去霧算法
上述算法都只對圖像上存在的均勻的薄霧有較好的去霧效果,對于濃霧或者分布不均的團霧則效果較差,因此找到一種適用范圍更廣的去霧方法將會是一個極具挑戰(zhàn)性的課題。
二.ACE去霧算法
該部分主要介紹參考相關論文進行敘述,簡單介紹ACE算法的原理知識。如果讀者想詳細了解其原理,推薦閱讀這些大佬的英文原文[7-8]。
圖像對比度增強的算法在很多場合都有用處,特別是在醫(yī)學圖像中,這是因為在眾多疾病的診斷中,醫(yī)學圖像的視覺檢查時很有必要的。Retinex算法是代表性的圖像增強算法,它根據(jù)人的視網(wǎng)膜和大腦皮層模擬對物體顏色的波長光線反射能力而形成,對復雜環(huán)境下的一維條碼具有一定范圍內(nèi)的動態(tài)壓縮,對圖像邊緣有著一定自適應的增強。
自動色彩均衡(Automatic Color Enhancement,ACE)算法是Rizzi[8]大神在Retinex算法的理論上提出的,它通過計算圖像目標像素點和周圍像素點的明暗程度及其關系來對最終的像素值進行校正,實現(xiàn)圖像的對比度調(diào)整,產(chǎn)生類似人體視網(wǎng)膜的色彩恒常性和亮度恒常性的均衡,具有很好的圖像增強效果。
ACE算法包括兩個步驟:
- 一是對圖像進行色彩和空域調(diào)整,完成圖像的色差校正,得到空域重構圖像。模仿視覺系統(tǒng)的側抑制性和區(qū)域自適應性,進行色彩的空域調(diào)整。側抑制性是一個生理學概念,指在某個神經(jīng)元受到刺激而產(chǎn)生興奮時,再刺激相近的神經(jīng)元,后者所發(fā)生的興奮對前者產(chǎn)生的抑制作用。
- 二是對校正后的圖像進行動態(tài)擴展。對圖像的動態(tài)范圍進行全局調(diào)整,并使圖像滿足灰度世界理論和白斑點假設。算法針對單通道,再延伸應用到RGB彩色空間3通道圖像,即對3個通道分別處理再進行整合完成。
1.區(qū)域自適應濾波
輸入圖像I(灰度圖為例),該步是對單通道圖像I中所有點p的區(qū)域自適應濾波,得到完成色差校正,空域重構后的中間結果圖像,計算公式如下:
式中:Ic§-Ic(j)為p、j兩個像素點間灰度差值,表達擬生物學上的側抑制性;d(p,j)表示距離度量函數(shù),使用兩點間的歐氏距離,作用上控制點j對p的影響權重,映射出濾波的區(qū)域適應性;Sα(x)是亮度表現(xiàn)函數(shù)(奇函數(shù)),本文算法選擇經(jīng)典Saturation函數(shù)。
不同亮度函數(shù)和參數(shù)的選擇控制了對比度增強的程度,經(jīng)典的Saturation函數(shù)在飽和前取越大的斜率,結果的對比度增強越明顯。極限情況是sign函數(shù)形式,而Sign函數(shù)由于無差別過度增強放大,導致噪聲同樣得到放大效果不佳,最終選擇Saturation函數(shù)作為相對亮度表現(xiàn)函數(shù)。公式如下:
2.色調(diào)重整拉伸,對圖像動態(tài)擴展
將上式得到的中間量拉伸映射到[0, 255]中,占滿動態(tài)范圍[0, 255](8位灰度圖像),計算公式如下,式中:[minR,maxR]是中間量L(x)的全部定義域,該項使圖像達到全局白平衡。
下圖是條形碼圖像進行ACE圖像增強后的效果圖,通過圖像增強后的圖(b)對比度更強,改善了原圖像的明暗程度,增強的同時保持了圖像的真實性[6]。
最后,再次推薦大家去閱讀ACE算法英文論文。其實驗對比效果如圖41-8所示,大家在寫該主題論文的時候,也需要注意和傳統(tǒng)方法對比。
由于OpenCV中暫時沒有ACE算法包,下面代碼是借鑒“zmshy2128”老師的文章[9-11],修改實現(xiàn)的彩色直方圖均衡化處理,以及被我擴展為Python3版本。推薦讀者結合論文詳細分析其代碼實現(xiàn)過程。
# -*- coding: utf-8 -*-
# By: zmshy2128老師 & Eastmount 修改成(Python3)
# 參考: https://www.cnblogs.com/zmshy2128/p/6135551.html
import cv2
import numpy as np
import math
import matplotlib.pyplot as plt
#線性拉伸處理
#去掉最大最小0.5%的像素值 線性拉伸至[0,1]
def stretchImage(data, s=0.005, bins = 2000):
ht = np.histogram(data, bins);
d = np.cumsum(ht[0])/float(data.size)
lmin = 0; lmax=bins-1
while lmin<bins:
if d[lmin]>=s:
break
lmin+=1
while lmax>=0:
if d[lmax]<=1-s:
break
lmax-=1
return np.clip((data-ht[1][lmin])/(ht[1][lmax]-ht[1][lmin]), 0,1)
#根據(jù)半徑計算權重參數(shù)矩陣
g_para = {}
def getPara(radius = 5):
global g_para
m = g_para.get(radius, None)
if m is not None:
return m
size = radius*2+1
m = np.zeros((size, size))
for h in range(-radius, radius+1):
for w in range(-radius, radius+1):
if h==0 and w==0:
continue
m[radius+h, radius+w] = 1.0/math.sqrt(h**2+w**2)
m /= m.sum()
g_para[radius] = m
return m
#常規(guī)的ACE實現(xiàn)
def zmIce(I, ratio=4, radius=300):
para = getPara(radius)
height,width = I.shape
zh = []
zw = []
n = 0
while n < radius:
zh.append(0)
zw.append(0)
n += 1
for n in range(height):
zh.append(n)
for n in range(width):
zw.append(n)
n = 0
while n < radius:
zh.append(height-1)
zw.append(width-1)
n += 1
#print(zh)
#print(zw)
Z = I[np.ix_(zh, zw)]
res = np.zeros(I.shape)
for h in range(radius*2+1):
for w in range(radius*2+1):
if para[h][w] == 0:
continue
res += (para[h][w] * np.clip((I-Z[h:h+height, w:w+width])*ratio, -1, 1))
return res
#單通道ACE快速增強實現(xiàn)
def zmIceFast(I, ratio, radius):
print(I)
height, width = I.shape[:2]
if min(height, width) <=2:
return np.zeros(I.shape)+0.5
Rs = cv2.resize(I, (int((width+1)/2), int((height+1)/2)))
Rf = zmIceFast(Rs, ratio, radius) #遞歸調(diào)用
Rf = cv2.resize(Rf, (width, height))
Rs = cv2.resize(Rs, (width, height))
return Rf+zmIce(I,ratio, radius)-zmIce(Rs,ratio,radius)
#rgb三通道分別增強 ratio是對比度增強因子 radius是卷積模板半徑
def zmIceColor(I, ratio=4, radius=3):
res = np.zeros(I.shape)
for k in range(3):
res[:,:,k] = stretchImage(zmIceFast(I[:,:,k], ratio, radius))
return res
#主函數(shù)
if __name__ == '__main__':
img = cv2.imread('car.png')
res = zmIceColor(img/255.0)*255
cv2.imwrite('car-Ice.jpg', res)
運行結果如圖所示,ACE算法能有效進行圖像去霧處理,實現(xiàn)圖像的細節(jié)增強。圖41-9顯示行駛中的車輛去霧效果。
圖41-10顯示了大霧天游動的鴨群去霧效果。
圖41-11顯示了城市大霧天氣的去霧對比效果。
三.暗通道先驗去霧算法
該算法是計算機視覺領域何愷明大佬于2009年提出的圖像去霧經(jīng)典算法,并獲取當年CVPR最佳論文。論文題目為《Single Image Haze Removal Using Dark Channel Prior》,何老師的很多文章都值得大家學習,是真的非常厲害。如果您是研究圖像去霧或計算機視覺領域的讀者,建議大家認真閱讀這篇英文原文,能在2009年提出該算法真的很驚艷[12-13]。
暗通道先驗(Dark Channel Prior, DCP)去霧算法依賴大氣散射模型進行去霧處理,通過對大量有霧圖像和無霧圖像進行觀察總結,得到其中存在的一些映射關系,然后根據(jù)有霧圖像的形成過程來進行逆運算,從而恢復清晰圖像[14-15]。
算法實現(xiàn)過程及原理如下,參考何愷明老師和何濤老師的論文[12-15]。
1.大氣散射模型
在計算機視覺和計算機圖形學中,下列方程所描述的大氣散射模型被廣泛使用。方程右邊第一項為場景直接衰減項,第二項為環(huán)境光項。
具體參數(shù)解釋如下:
- x是圖像的空間坐標
- I(x)代表有霧圖像(待去霧圖像)
- J(x)代表無霧圖像(待恢復圖像)
- A代表全球大氣光值
- t(x)代表透射率
2.暗通道定義
在絕大多數(shù)非天空的局部區(qū)域中,某些像素總會至少有一個顏色通道的值很低。對于一幅圖像J(x),其暗通道的數(shù)學定義表示如下:
其中,Ω(x)表示以x為中心的局部區(qū)域,上標c表示RGB三個通道。該公式的意義用代碼表達也很簡單,首先求出每個像素RGB分量中的最小值,存入一副和原始圖像大小相同的灰度圖中,然后再對這幅灰度圖進行最小值濾波,濾波的半徑由窗口大小決定。
3.暗通道先驗理論
暗通道先驗理論指出:對于非天空區(qū)域的無霧圖像J(x)的暗通道趨于0,即:
實際生活中造成暗原色中低通道值主要有三個因素:
- 汽車、建筑物和城市中玻璃窗戶的陰影,或者是樹葉、樹與巖石等自然景觀的投影;
- 色彩鮮艷的物體或表面,在RGB的三個通道中有些通道的值很低(比如綠色的草地/樹/植物,紅色或黃色的花朵/葉子,或者藍色的水面);
- 顏色較暗的物體或者表面,例如灰暗色的樹干和石頭。
總之,自然景物中到處都是陰影或者彩色,這些景物的圖像的暗原色總是很灰暗的,而有霧的圖像較亮。因此,可以明顯的看到暗通道先驗理論的普遍性。
4.公式變形
根據(jù)大氣散射模型,將第一個公式稍作處理,變形為下式:
假設每一個窗口的透射率t(x)為常數(shù),記為t’(x),并且A值已給定,對式兩邊同時進行兩次最小值運算,可得:
其中,J(x)是要求的無霧圖像,根據(jù)前述的暗通道先驗理論可知:
因此可推導出:
5.透射率計算
將上式帶入可得到透射率t’(x)的預估值,如下所示:
現(xiàn)實生活中,即便晴空萬里,空氣中也會存在一些顆粒,在眺望遠處的景物時,人們還是能感覺到霧的存在。另外,霧的存在讓人們感受到景深,因此在去霧的同時有必要保留一定程度的霧??梢酝ㄟ^引入一個0到1之間的因子w(一般取0.95)對預估透射率進行修正,如式所示:
以上的推導過程均假設大氣光值A是已知的,在實際中,可以借助暗通道圖從原始霧圖中求取。具體步驟如下:
- 先求取暗通道圖,在暗通道圖中按照亮度大小提取最亮的前0.1%的像素
- 在原始霧圖I(x)中找對應位置上具有最高亮度的點的值,作為大氣光值A
此外,由于透射率t偏小時,會造成J偏大,恢復的無霧圖像整體向白場過度,因此有必要對透射率設置一個下限值t0(一般取值為0.1),當t值小于t0時,取t=t0。將以上求得的透射率和大氣光值代入公式,最終整理得到圖像的恢復公式如下:
這就是暗通道先驗去霧算法的原理過程,下面簡單補充論文中的處理效果圖。再次推薦大家閱讀何老師的原文。
實現(xiàn)代碼引用木盞老師的,感覺比作者的寫得好[16-17],核心代碼如下:
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 11 00:16:07 2021
@author: xiuzhang
參考資料:
https://blog.csdn.net/leviopku/article/details/83898619
"""
import sys
import cv2
import math
import numpy as np
def DarkChannel(im,sz):
b,g,r = cv2.split(im)
dc = cv2.min(cv2.min(r,g),b)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(sz,sz))
dark = cv2.erode(dc,kernel)
return dark
def AtmLight(im,dark):
[h,w] = im.shape[:2]
imsz = h*w
numpx = int(max(math.floor(imsz/1000),1))
darkvec = dark.reshape(imsz,1)
imvec = im.reshape(imsz,3)
indices = darkvec.argsort()
indices = indices[imsz-numpx::]
atmsum = np.zeros([1,3])
for ind in range(1,numpx):
atmsum = atmsum + imvec[indices[ind]]
A = atmsum / numpx;
return A
def TransmissionEstimate(im,A,sz):
omega = 0.95
im3 = np.empty(im.shape,im.dtype)
for ind in range(0,3):
im3[:,:,ind] = im[:,:,ind]/A[0,ind]
transmission = 1 - omega*DarkChannel(im3,sz)
return transmission
def Guidedfilter(im,p,r,eps):
mean_I = cv2.boxFilter(im,cv2.CV_64F,(r,r))
mean_p = cv2.boxFilter(p, cv2.CV_64F,(r,r))
mean_Ip = cv2.boxFilter(im*p,cv2.CV_64F,(r,r))
cov_Ip = mean_Ip - mean_I*mean_p
mean_II = cv2.boxFilter(im*im,cv2.CV_64F,(r,r))
var_I = mean_II - mean_I*mean_I
a = cov_Ip/(var_I + eps)
b = mean_p - a*mean_I
mean_a = cv2.boxFilter(a,cv2.CV_64F,(r,r))
mean_b = cv2.boxFilter(b,cv2.CV_64F,(r,r))
q = mean_a*im + mean_b
return q
def TransmissionRefine(im,et):
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
gray = np.float64(gray)/255
r = 60
eps = 0.0001
t = Guidedfilter(gray,et,r,eps)
return t
def Recover(im,t,A,tx = 0.1):
res = np.empty(im.shape,im.dtype)
t = cv2.max(t,tx)
for ind in range(0,3):
res[:,:,ind] = (im[:,:,ind]-A[0,ind])/t + A[0,ind]
return res
if __name__ == '__main__':
fn = 'city.png'
src = cv2.imread(fn)
I = src.astype('float64')/255
dark = DarkChannel(I,15)
A = AtmLight(I,dark)
te = TransmissionEstimate(I,A,15)
t = TransmissionRefine(src,te)
J = Recover(I,t,A,0.1)
arr = np.hstack((I, J))
cv2.imshow("contrast", arr)
cv2.imwrite("car-dehaze.png", J*255 )
cv2.imwrite("car-contrast.png", arr*255)
cv2.waitKey();
城市霧天的去霧效果如圖41-16所示,可以發(fā)現(xiàn)暗通道先驗去霧算法的效果非常棒。
如果想和后續(xù)目標汽車檢測結合,同樣可以先去霧再進行檢測,如圖41-16所示。
四.圖像噪聲和霧生成
圖像處理總少不了噪聲添加或生成,最后補充兩個簡單的椒鹽噪聲和霧氣模擬生成的代碼。這與本文的實驗緊密相關,能為我們提供更多的GAN生成樣本。后面人工智能系列文章,我們看看能不能利用GAN學習真實霧化場景圖像。
1.加鹽噪聲
原圖是一張風景圖像如圖41-17所示。
圖像增加椒鹽噪聲的代碼如下:
# -*- coding: utf-8 -*-
# By: Eastmount
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("fj.png", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape
#加噪聲
for i in range(50000):
x = np.random.randint(0, rows)
y = np.random.randint(0, cols)
img[x,y,:] = 210
cv2.imshow("noise", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('fj-res.png',img)
輸出結果如下圖所示。
2.霧的模擬生成
該部分代碼如下:
# -*- coding: utf-8 -*-
# By: Eastmount
import numpy as np
import cv2 as cv
import os
import random
file = ['fj.png']
output = 'fj-wu.png'
for file_img in file:
#打開圖像
img = cv.imread(file_img)
mask_img = cv.imread(file_img)
#霧的顏色
mask_img[:, :] = (166, 178, 180)
#里面參數(shù)可調(diào),主要調(diào)整霧的濃度
image = cv.addWeighted(img,
round(random.uniform(0.03, 0.28), 2),
mask_img, 1, 0)
#保存的文件夾
cv.imwrite(output, image)
輸出結果如圖41-19所示,效果還不錯。
五.總結
本文主要講解兩種經(jīng)典的圖像去霧算法,分別是ACE去霧算法和暗通道先驗去霧算法,同時補充了霧化生成的算法。本文推薦大家學習Rizzi和何愷明兩位計算機視覺大佬的論文。
感謝在求學路上的同行者,不負遇見,勿忘初心。圖像處理系列主要包括三部分,分別是:
忙碌的11月,忙碌的2023。轉(zhuǎn)眼四年過去,我和她都不容易,兩人每次看“致謝”都會淚目,青春變了,唯有情感不變,希望一家人健康快樂。剛到寢室,要戰(zhàn)斗了!
(By:Eastmount 2023-12-05 夜于貴陽 http://blog.csdn.net/eastmount/ )
參考文獻:
- [1] 魏紅偉, 等. 圖像去霧算法研究綜述[J]. 軟件導刊, 2021.
- [2] 王道累, 等. 圖像去霧算法的綜述及分析[J]. 圖學學報, 2021.
- [3] OpenCV圖像增強萬字詳解(直方圖均衡化、自動色彩均衡化)—— Eastmount
- [4] 尹勝楠, 等. 基于快速ACE算法的視覺里程計圖像增強方法[J]. 電子測量與儀器學報, 2021.
- [5] 李景文, 等. 基于暗通道先驗改進的自動色彩均衡算法[J]. 科學技術與工程, 2019.
- [6] 楊秀璋, 等. 一種改進的復雜環(huán)境下條形碼圖像增強和定位算法[J]. 現(xiàn)代計算機, 2020.
- [7] Pascal Gertreuer. Automatic Color Enhancement (ACE) and its Fast Implementation. https://www.ipol.im/pub/art/2012/g-ace/?utm_source=doi.
- [8] Rizzi A., et al. A new algorithm for unsupervised global and local color correction. https://www.sciencedirect.com/science/article/abs/pii/S0167865502003239.
- [9] 自動色彩均衡(ACE)快速算法 - zmshy2128老師
- [10] OpenCV—python 自動色彩均衡(ACE)- SongpingWang
- [11] [Python圖像識別] 四十六.圖像預處理之圖像去霧詳解——Eastmount.
- [12] He Kaiming, et al. Single Image Haze Removal Using Dark Channel Prior. https://ieeexplore.ieee.org/ document/5567108.
- [13] He Kaiming, et al.Single image haze removal using dark channel prior. https://ieeexplore.ieee.org/ document/5206515.
- [14] 何濤, 等. 基于暗通道先驗的單幅圖像去霧新算法[J]. 計算機科學, 2021.
- [15] 王蓉, 等. 基于改進加權融合暗通道算法的圖像去霧研究[J]. 浙江科技學院學報, 2021.
- [16] 圖像去霧算法的原理、實現(xiàn)、效果(速度可實時)—— 摯愛圖像處理
- [17] 圖像去霧之何凱明暗通道先驗去霧算法原理及c++代碼實現(xiàn) —— Do it !
前文賞析
盡管該部分占大量篇幅,但我舍不得刪除,哈哈!
第一部分 基礎語法
- [Python從零到壹] 一.為什么我們要學Python及基礎語法詳解
- [Python從零到壹] 二.語法基礎之條件語句、循環(huán)語句和函數(shù)
- [Python從零到壹] 三.語法基礎之文件操作、CSV文件讀寫及面向?qū)ο?/li>
第二部分 網(wǎng)絡爬蟲
- [Python從零到壹] 四.網(wǎng)絡爬蟲之入門基礎及正則表達式抓取博客案例
- [Python從零到壹] 五.網(wǎng)絡爬蟲之BeautifulSoup基礎語法萬字詳解
- [Python從零到壹] 六.網(wǎng)絡爬蟲之BeautifulSoup爬取豆瓣TOP250電影詳解
- [Python從零到壹] 七.網(wǎng)絡爬蟲之Requests爬取豆瓣電影TOP250及CSV存儲
- [Python從零到壹] 八.數(shù)據(jù)庫之MySQL基礎知識及操作萬字詳解
- [Python從零到壹] 九.網(wǎng)絡爬蟲之Selenium基礎技術萬字詳解(定位元素、常用方法、鍵盤鼠標操作)
- [Python從零到壹] 十.網(wǎng)絡爬蟲之Selenium爬取在線百科知識萬字詳解(NLP語料構造必備技能)
第三部分 數(shù)據(jù)分析和機器學習
- [Python從零到壹] 十一.數(shù)據(jù)分析之Numpy、Pandas、Matplotlib和Sklearn入門知識萬字詳解(1)
- [Python從零到壹] 十二.機器學習之回歸分析萬字總結全網(wǎng)首發(fā)(線性回歸、多項式回歸、邏輯回歸)
- [Python從零到壹] 十三.機器學習之聚類分析萬字總結全網(wǎng)首發(fā)(K-Means、BIRCH、層次聚類、樹狀聚類)
- [Python從零到壹] 十四.機器學習之分類算法三萬字總結全網(wǎng)首發(fā)(決策樹、KNN、SVM、分類算法對比)
- [Python從零到壹] 十五.文本挖掘之數(shù)據(jù)預處理、Jieba工具和文本聚類萬字詳解
- [Python從零到壹] 十六.文本挖掘之詞云熱點與LDA主題分布分析萬字詳解
- [Python從零到壹] 十七.可視化分析之Matplotlib、Pandas、Echarts入門萬字詳解
- [Python從零到壹] 十八.可視化分析之Basemap地圖包入門詳解
- [Python從零到壹] 十九.可視化分析之熱力圖和箱圖繪制及應用詳解
- [Python從零到壹] 二十.可視化分析之Seaborn繪圖萬字詳解
- [Python從零到壹] 二十一.可視化分析之Pyechart繪圖萬字詳解
- [Python從零到壹] 二十二.可視化分析之OpenGL繪圖萬字詳解
- [Python從零到壹] 二十三.十大機器學習算法之決策樹分類分析詳解(1)
- [Python從零到壹] 二十四.十大機器學習算法之KMeans聚類分析詳解(2)
- [Python從零到壹] 二十五.十大機器學習算法之KNN算法及圖像分類詳解(3)
- [Python從零到壹] 二十六.十大機器學習算法之樸素貝葉斯算法及文本分類詳解(4)
- [Python從零到壹] 二十七.十大機器學習算法之線性回歸算法分析詳解(5)
- [Python從零到壹] 二十八.十大機器學習算法之SVM算法分析詳解(6)
- [Python從零到壹] 二十九.十大機器學習算法之隨機森林算法分析詳解(7)
- [Python從零到壹] 三十.十大機器學習算法之邏輯回歸算法及惡意請求檢測應用詳解(8)
- [Python從零到壹] 三十一.十大機器學習算法之Boosting和AdaBoost應用詳解(9)
- [Python從零到壹] 三十二.十大機器學習算法之層次聚類和樹狀圖聚類應用詳解(10)
第四部分 Python圖像處理基礎
- [Python從零到壹] 三十三.圖像處理基礎篇之什么是圖像處理和OpenCV配置
- [Python從零到壹] 三十四.OpenCV入門詳解——顯示讀取修改及保存圖像
- [Python從零到壹] 三十五.圖像處理基礎篇之OpenCV繪制各類幾何圖形
- [Python從零到壹] 三十六.圖像處理基礎篇之圖像算術與邏輯運算詳解
- [Python從零到壹] 三十七.圖像處理基礎篇之圖像融合處理和ROI區(qū)域繪制
- [Python從零到壹] 三十八.圖像處理基礎篇之圖像幾何變換(平移縮放旋轉(zhuǎn))
- [Python從零到壹] 三十九.圖像處理基礎篇之圖像幾何變換(鏡像仿射透視)
- [Python從零到壹] 四十.圖像處理基礎篇之圖像量化處理
- [Python從零到壹] 四十一.圖像處理基礎篇之圖像采樣處理
- [Python從零到壹] 四十二.圖像處理基礎篇之圖像金字塔向上取樣和向下取樣
第五部分 Python圖像運算和圖像增強
- [Python從零到壹] 四十三.圖像增強及運算篇之圖像點運算和圖像灰度化處理
- [Python從零到壹] 四十四.圖像增強及運算篇之圖像灰度線性變換詳解
- [Python從零到壹] 四十五.圖像增強及運算篇之圖像灰度非線性變換詳解
- [Python從零到壹] 四十六.圖像增強及運算篇之圖像閾值化處理
- [Python從零到壹] 四十七.圖像增強及運算篇之腐蝕和膨脹詳解
- [Python從零到壹] 四十八.圖像增強及運算篇之形態(tài)學開運算、閉運算和梯度運算
- [Python從零到壹] 四十九.圖像增強及運算篇之頂帽運算和底帽運算
- [Python從零到壹] 五十.圖像增強及運算篇之圖像直方圖理論知識和繪制實現(xiàn)
- [Python從零到壹] 五十一.圖像增強及運算篇之圖像灰度直方圖對比分析萬字詳解
- [Python從零到壹] 五十二.圖像增強及運算篇之圖像掩膜直方圖和HS直方圖
- [Python從零到壹] 五十三.圖像增強及運算篇之直方圖均衡化處理
- [Python從零到壹] 五十四.圖像增強及運算篇之局部直方圖均衡化和自動色彩均衡化處理
- [Python從零到壹] 五十五.圖像增強及運算篇之圖像平滑(均值濾波、方框濾波、高斯濾波)
- [Python從零到壹] 五十六.圖像增強及運算篇之圖像平滑(中值濾波、雙邊濾波)
- [Python從零到壹] 五十七.圖像增強及運算篇之圖像銳化Roberts、Prewitt算子實現(xiàn)邊緣檢測
- [Python從零到壹] 五十八.圖像增強及運算篇之圖像銳化Sobel、Laplacian算子實現(xiàn)邊緣檢測
- [Python從零到壹] 五十九.圖像增強及運算篇之圖像銳化Scharr、Canny、LOG實現(xiàn)邊緣檢測
第六部分 Python圖像識別和圖像高階案例
- [Python從零到壹] 六十.圖像識別及經(jīng)典案例篇之基于閾值及邊緣檢測的圖像分割
- [Python從零到壹] 六十一.圖像識別及經(jīng)典案例篇之基于紋理背景和聚類算法的圖像分割
- [Python從零到壹] 六十二.圖像識別及經(jīng)典案例篇之基于均值漂移算法和分水嶺算法的圖像分割
- [Python從零到壹] 六十三.圖像識別及經(jīng)典案例篇之圖像漫水填充分割應用
- [Python從零到壹] 六十四.圖像識別及經(jīng)典案例篇之圖像傅里葉變換和傅里葉逆變換詳解
- [Python從零到壹] 六十五.圖像識別及經(jīng)典案例篇之圖像霍夫變換詳解
- [Python從零到壹] 六十六.圖像識別及經(jīng)典案例篇之基于機器學習的圖像分類
- [Python從零到壹] 六十七.圖像識別及經(jīng)典案例篇之基于卷積神經(jīng)網(wǎng)絡的MNIST圖像分類
- [Python從零到壹] 六十八.圖像識別及經(jīng)典案例篇之圖像特效(毛玻璃、浮雕、油漆和模糊特效變換)
- [Python從零到壹] 六十九.圖像識別及經(jīng)典案例篇之圖像特效(素描和卡通特效)
- [Python從零到壹] 七十.圖像識別及經(jīng)典案例篇之圖像特效(懷舊、流年、光照和水波特效)
- [Python從零到壹] 七十一.圖像識別及經(jīng)典案例篇之圖像特效(濾鏡和均衡化特效)
- [Python從零到壹] 七十二.圖像識別及經(jīng)典案例篇之OpenGL入門及繪制基本圖形和3D圖
- [Python從零到壹] 七十三.圖像識別及經(jīng)典案例篇之圖像去霧ACE算法和暗通道先驗去霧算法實現(xiàn)
第七部分 NLP與文本挖掘
第八部分 人工智能入門知識
第九部分 網(wǎng)絡攻防與AI安全
第十部分 知識圖譜構建實戰(zhàn)文章來源:http://www.zghlxwxcb.cn/news/detail-799289.html
擴展部分 人工智能高級案例文章來源地址http://www.zghlxwxcb.cn/news/detail-799289.html
到了這里,關于[Python從零到壹] 七十三.圖像識別及經(jīng)典案例篇之圖像去霧ACE算法和暗通道先驗去霧算法實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!