[论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)
《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座,并分享給大家,希望您喜歡。由于作者的英文水平和學術能力不高,需要不斷提升,所以還請大家批評指正,非常歡迎大家給我留言評論,學術路上期待與您前行,加油。
前一篇文章詳細介紹和總結基于溯源圖的APT攻擊檢測安全頂會內容,花了作者一個多月時間。這篇文章將講解ACE去霧算法、暗通道先驗去霧算法以及霧化生成算法,并且參考了兩位計算機視覺大佬(Rizzi 何愷明)的論文。希望這篇文章對您有所幫助,這些大佬是真的值得我們去學習,獻上小弟的膝蓋~fighting!
該系列文章是講解Python OpenCV圖像處理知識,前期主要講解圖像入門、OpenCV基礎用法,中期講解圖像處理的各種算法,包括圖像銳化算子、圖像增強技術、圖像分割等,后期結合深度學習研究圖像識別、圖像分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~
文章目錄
- 一.圖像去霧
- 二.ACE去霧算法
- 1.算法原理
- 2.代碼實現
- 三.暗通道先驗去霧算法
- 1.算法原理
- 2.算法實現
- 四.圖像噪聲和霧生成
- 1.加鹽噪聲
- 2.霧的模擬生成
- 五.總結
前文賞析:
- [論文閱讀] (01) 拿什么來拯救我的拖延癥?初學者如何提升編程興趣及LATEX入門詳解
- [論文閱讀] (02) SP2019-Neural Cleanse: Identifying and Mitigating Backdoor Attacks in DNN
- [論文閱讀] (03) 清華張超老師 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
- [論文閱讀] (04) 人工智能真的安全嗎?浙大團隊外灘大會分享AI對抗樣本技術
- [論文閱讀] (05) NLP知識總結及NLP論文撰寫之道——Pvop老師
- [論文閱讀] (06) 萬字詳解什么是生成對抗網絡GAN?經典論文及案例普及
- [論文閱讀] (07) RAID2020 Cyber Threat Intelligence Modeling Based on Heterogeneous GCN
- [論文閱讀] (08) NDSS2020 UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats
- [論文閱讀] (09)S&P2019 HOLMES Real-time APT Detection through Correlation of Suspicious Information Flow
- [論文閱讀] (10)基于溯源圖的APT攻擊檢測安全頂會總結
- [論文閱讀] (11)ACE算法和暗通道先驗圖像去霧算法(Rizzi | 何愷明老師)
一.圖像去霧
隨著社會的發展,環境污染逐漸加劇,越來越多的城市頻繁出現霧霾,這不僅給人們的身體健康帶來危害,還給那些依賴圖像信息的計算機視覺系統造成了不良影響,因為在霧天采集到的圖像對比度和飽和度均較低,顏色易發生偏移與失真等。因此,尋找一種簡單有效的圖像去霧方法,對計算機視覺的后續研究至關重要。
該部分主要從下列幾篇論文摘取對圖像去霧算法進行普及,引用及參考中文論文:
- 魏紅偉, 等. 圖像去霧算法研究綜述[J]. 軟件導刊, 2021.
- 王道累, 等. 圖像去霧算法的綜述及分析[J]. 圖學學報, 2021.
- OpenCV圖像增強萬字詳解(直方圖均衡化、局部直方圖均衡化、自動色彩均衡化)- Eastmount
圖像增強(Image Enhancement)是指按照某種特定的需求,突出圖像中有用的信息,去除或者削弱無用的信息。圖像增強的目的是使處理后的圖像更適合人眼的視覺特性或易于機器識別。 在醫學成像、遙感成像、人物攝影等領域,圖像增強技術都有著廣泛的應用。圖像增強同時可以作為目標識別、目標跟蹤、特征點匹配、圖像融合、超分辨率重構等圖像處理算法的預處理算法。
近些年來,出現了眾多的單幅圖像去霧算法,應用比較廣泛的有:
- 直方圖均衡化去霧算法
- Retinex去霧算法
- 暗通道先驗去霧算法
- 基于卷積神經網絡的DehazeNet去霧算法
其主要可以分為 3 類:基于圖像增強的去霧算法、基于圖像復原的去霧算法和基于 CNN 的去霧算法。
(1) 基于圖像增強的去霧算法
通過圖像增強技術突出圖像細節,提升對比度,使之看起來更加清晰,這類算法的適用性較廣。具體的算法有:
- Retinex 算法
根據成像原理,消除了反射分量的影響,達到了圖像增強去霧的效果 - 直方圖均衡化算法
使圖像的像素分布更加均勻,放大了圖像的細節 - 偏微分方程算法
將圖像視作一個偏微分方程,通過計算梯度場提高對比度 - 小波變換算法
對圖像進行分解,放大有用的部分
此外,在這類算法的基礎上出現了眾多的基于圖像增強原理的改進算法。
(2) 基于圖像復原的去霧算法
主要是基于大氣散射物理學模型,通過對大量有霧圖像和無霧圖像進行觀察總結,得到其中存在的一些映射關系,然后根據有霧圖像的形成過程來進行逆運算,從而恢復清晰圖像。其中最經典的要屬何愷明大佬提出的:
- 暗通道先驗去霧算法
通過對大量無霧圖像進行特征分析,找到了無霧圖像與大氣散射模型中某些參數的先驗關系。該算法復雜度低,去霧效果好,因此在其基礎上出現了大量基于暗通道先驗的改進算法。
(3) 基于CNN的去霧算法
使用 CNN 建立一個端到端的模型,通過有霧圖像恢復出無霧圖像,目前使用神經網絡進行去霧的算法主要有兩種思路:
- 使用 CNN 生成大氣散射模型的某些參數,然后再根據大氣散射模型來恢復無霧圖像
- 使用 CNN (例如 GAN)直接根據模糊圖像生成無霧的清晰圖像
CNN 因其強大的學習能力在多個領域得到應用,因此也出現了采用 CNN 進行去霧的算法。2016年CAI等首次提出了一種名為DehazeNet的去霧網絡,用于估計有霧圖像的透射率。DehazeNet 將有霧的模糊圖像作為輸入,輸出其透射率,基于大氣散射模型理論恢復出無霧的清晰圖像。
下圖是分別對直方圖均衡化、暗通道先驗去霧、DehazeNet和AOD-Net去霧算法進行測試,實驗結果如圖所示。由圖可知,基于圖像增強的直方圖均衡化算法的去霧圖像對比度明顯增強,由于不考慮降質原因,在增加對比度的同時也對噪聲進行了放大,出現細節丟失與色彩偏差現象。基于物理模型的暗通道去霧算法、基于神經網絡的 DehazeNet 和 AOD-Net 算法的去霧效果較直方圖均衡化算法更佳。
其他去霧算法對比結果如下圖所示,比如城市和道路有無圖像去霧效果對比。
最后,正如總結王道累老師總結的一樣,目前針對有霧圖像去霧的算法主要是從基于圖像增強、圖像復原和 CNN 3 個方向進行的。
- 基于圖像增強的方法不考慮有霧圖像的形成過程,而是直接通過突出圖像的細節,提高對比度等方式,從而使有霧圖像看上去更加清晰。
- 基于圖像復原的方法則是追尋圖像降質的物理過程,通過物理模型還原出清晰的圖像。
- 基于 CNN 的方法則是利用神經網絡強大的學習能力,尋找有霧圖像與圖像復原物理模型中某些系數的映射關系或者使用 GAN,根據有霧圖像還原出無霧的清晰圖像。
上述 3 類去霧算法對于霧天圖像都有著明顯的去霧效果,盡管其在實際生活中已經得到了廣泛的應用,但下述幾點仍有可能是今后圖像去霧領域的研究重點和難點:
-
更加真實的霧天圖像數據集
采用神經網絡進行去霧的算法在效果上好于圖像增強和復原的方法,但是由于在自然界中很難拍攝到一組背景相同的有霧圖像和無霧圖像,因此目前訓練神經網絡所采用的數據集均是通過合成得到的,雖然能夠在一定程度上擬合自然環境,但是仍然存在著一些差距。所以目前急需一種由在真實環境中獲取到的具有相同背景的有霧圖像和無霧圖像構建的數據集,來提高神經網絡去霧算法的魯棒性和穩定性。 -
更加簡便的去霧算法
目前各類算法能夠有效去除單幅圖像上的霧霾,但相對較好的算法都存在著時間復雜度高的問題,很難應用到視頻去霧或者需求較多的復雜任務中去。 -
魯棒性更強的去霧算法
上述算法都只對圖像上存在的均勻的薄霧有較好的去霧效果,對于濃霧或者分布不均的團霧則效果較差,因此找到一種適用范圍更廣的去霧方法將會是一個極具挑戰性的課題。
二.ACE去霧算法
1.算法原理
該部分主要介紹參考作者書籍以及相關論文進行敘述,簡單介紹ACE算法的原理知識。如果讀者想詳細了解其原理,推薦閱讀英文原文,詳見下面的參考文獻,都是大佬。
引用及參考中文論文:
- 尹勝楠, 等. 基于快速ACE算法的視覺里程計圖像增強方法[J]. 電子測量與儀器學報, 2021.
- 李景文, 等. 基于暗通道先驗改進的自動色彩均衡算法[J]. 科學技術與工程, 2019.
- 楊秀璋, 等. 一種改進的復雜環境下條形碼圖像增強和定位算法[J]. 現代計算機, 2020.
- OpenCV—python 自動色彩均衡(ACE)- SongpingWang
- OpenCV圖像增強萬字詳解(直方圖均衡化、局部直方圖均衡化、自動色彩均衡化)- Eastmount
英文原文:
- https://www.ipol.im/pub/art/2012/g-ace/?utm_source=doi
Automatic Color Enhancement (ACE) and its Fast Implementation - https://www.sciencedirect.com/science/article/abs/pii/S0167865502003239
A new algorithm for unsupervised global and local color correction(原作者Rizzi大佬)
圖像對比度增強的算法在很多場合都有用處,特別是在醫學圖像中,這是因為在眾多疾病的診斷中,醫學圖像的視覺檢查時很有必要的。Retinex算法是代表性的圖像增強算法,它根據人的視網膜和大腦皮層模擬對物體顏色的波長光線反射能力而形成,對復雜環境下的一維條碼具有一定范圍內的動態壓縮,對圖像邊緣有著一定自適應的增強。
自動色彩均衡(Automatic Color Enhancement,ACE) 算法是Rizzi大神在Retinex算法的理論上提出的,它通過計算圖像目標像素點和周圍像素點的明暗程度及其關系來對最終的像素值進行校正,實現圖像的對比度調整,產生類似人體視網膜的色彩恒常性和亮度恒常性的均衡,具有很好的圖像增強效果。
ACE算法包括兩個步驟:
- 一是對圖像進行色彩和空域調整,完成圖像的色差校正,得到空域重構圖像。
模仿視覺系統的側抑制性和區域自適應性,進行色彩的空域調整。側抑制性是一個生理學概念,指在某個神經元受到刺激而產生興奮時,再刺激相近的神經元,后者所發生的興奮對前者產生的抑制作用。 - 二是對校正后的圖像進行動態擴展。
對圖像的動態范圍進行全局調整,并使圖像滿足灰度世界理論和白斑點假設。算法針對單通道,再延伸應用到RGB彩色空間的3通道圖像,即對3個通道分別處理再進行整合完成。
(1) 區域自適應濾波
輸入圖像I(灰度圖為例),該步是對單通道圖像I中所有點p的區域自適應濾波,得到完成色差校正,空域重構后的中間結果圖像,計算公式如下:
式中:Ic§-Ic(j)為p、j兩個像素點間灰度差值,表達擬生物學上的側抑制性;d(p,j)表示距離度量函數,使用兩點間的歐氏距離,作用上控制點j對p的影響權重,映射出濾波的區域適應性;Sa(x)是亮度表現函數(奇函數),本文算法選擇經典Saturation函數。
不同亮度函數和參數的選擇控制了對比度增強的程度,經典的Saturation函數在飽和前取越大的斜率,結果的對比度增強越明顯,如圖2所示,極限情況是sign函數形式,而Sign函數由于無差別過度增強放大,導致噪聲同樣得到放大效果不佳,最終選擇Saturation函數作為相對亮度表現函數。公式如下:
(2) 色調重整拉伸,對圖像動態擴展
將式(1)中得到的中間量拉伸映射到 [0, 255] 中,占滿動態范圍 [0, 255](8位灰度圖像),計算公式如下,式中:[minR,maxR]是中間量L(x)的全部定義域,該項使圖像達到全局白平衡。
下圖是條形碼圖像進行ACE圖像增強后的效果圖,通過圖像增強后的圖(b)對比度更強,改善了原圖像的明暗程度,增強的同時保持了圖像的真實性。
ACE算法英文介紹如下:
實驗對比效果如下圖所示,大家在寫該主題論文的時候,注意和傳統方法對比。
2.代碼實現
由于OpenCV中暫時沒有ACE算法包,下面的代碼是借鑒“zmshy2128”老師的文章,修改實現的彩色直方圖均衡化處理。后面有機會作者詳細分析其代碼實現過程。
- 自動色彩均衡(ACE)快速算法 - zmshy2128老師
運行結果如圖所示,ACE算法能有效進行圖像去霧處理,實現圖像的細節增強。
最后是目標檢測去霧和女神去霧的效果,哈哈,繼續加油!
三.暗通道先驗去霧算法
該算法是計算機視覺領域何愷明大佬于2009年提出的圖像去霧經典算法,并獲取當年CVPR最佳論文。論文題目為《Single Image Haze Removal Using Dark Channel Prior》。下圖是大佬的百科簡介,是真的厲害,值得我們大家學習。
- 2003年5月,何愷明拿到保送清華的資格,是當年執信中學唯一保送上清華大學的學生;高考結果出爐以后,何愷明獲得滿分900分的成績,成為當年廣東省9位滿分狀元之一。
- 2009年,何愷明成為首獲計算機視覺領域三大國際會議之一CVPR“最佳論文獎”的中國學者。
- 在2015年的ImageNet圖像識別大賽中,何愷明和他的團隊用“圖像識別深度差殘學習”系統,擊敗谷歌、英特爾、高通等業界團隊,榮獲第一。
- 何愷明作為第一作者獲得了CVPR 2009,CVPR 2016和ICCV 2017(Marr Prize)的最佳論文獎,并獲得了ICCV 2017最佳學生論文獎。
- 2018年,第31屆計算機視覺和模式識別大會(Conference on Computer Vision and Pattern Recognition, CVPR)在美國鹽湖城召開,何愷明獲得本屆大會的PAMI年輕學者獎。
1.算法原理
言歸正傳,如果是圖像處理或研究圖像去霧領域的作者,建議大家認真閱讀這篇英文原文,能在2009年提出該算法真的很驚艷。
引用及參考中文論文:
- 何濤, 等. 基于暗通道先驗的單幅圖像去霧新算法[J]. 計算機科學, 2021.
- 王蓉, 等. 基于改進加權融合暗通道算法的圖像去霧研究[J]. 浙江科技學院學報, 2021.
- 圖像去霧算法的原理、實現、效果(速度可實時)- 摯愛圖像處理
- 圖像去霧之何凱明暗通道先驗去霧算法原理及c++代碼實現 - Do it !
英文原文:
- https://ieeexplore.ieee.org/document/5567108
Single Image Haze Removal Using Dark Channel Prior - https://ieeexplore.ieee.org/document/5206515
Single image haze removal using dark channel prior
暗通道先驗(Dark Channel Prior, DCP)去霧算法 依賴大氣散射模型進行去霧處理,通過對大量有霧圖像和無霧圖像進行觀察總結,得到其中存在的一些映射關系,然后根據有霧圖像的形成過程來進行逆運算,從而恢復清晰圖像。
算法實現過程及原理如下,參考何愷明老師和何濤老師的論文。
(1) 大氣散射模型
在計算機視覺和計算機圖形學中,方程所描述的大氣散射模型被廣泛使用。參數解釋如下:
- x是圖像的空間坐標
- I(x)代表有霧圖像(待去霧圖像)
- J(x)代表無霧圖像(待恢復圖像)
- A代表全球大氣光值
- t(x)代表透射率
方程右邊第一項為場景直接衰減項,第二項為環境光項。
(2) 暗通道定義
在絕大多數非天空的局部區域中,某些像素總會至少有一個顏色通道的值很低。對于一幅圖像J(x),其暗通道的數學定義表示如下:
其中,Ω(x)表示以x為中心的局部區域,上標c表示RGB三個通道。該公式的意義用代碼表達也很簡單,首先求出每個像素RGB分量中的最小值,存入一副和原始圖像大小相同的灰度圖中,然后再對這幅灰度圖進行最小值濾波,濾波的半徑由窗口大小決定。
(3) 暗通道先驗理論
暗通道先驗理論指出:對于非天空區域的無霧圖像J(x)的暗通道趨于0,即:
實際生活中造成暗原色中低通道值主要有三個因素:
- a) 汽車、建筑物和城市中玻璃窗戶的陰影,或者是樹葉、樹與巖石等自然景觀的投影;
- b) 色彩鮮艷的物體或表面,在RGB的三個通道中有些通道的值很低(比如綠色的草地/樹/植物,紅色或黃色的花朵/葉子,或者藍色的水面);
- c) 顏色較暗的物體或者表面,例如灰暗色的樹干和石頭。
總之,自然景物中到處都是陰影或者彩色,這些景物的圖像的暗原色總是很灰暗的,而有霧的圖像較亮。因此,可以明顯的看到暗通道先驗理論的普遍性。
(4) 公式變形
根據大氣散射模型,將第一個公式稍作處理,變形為下式:
假設每一個窗口的透射率t(x)為常數,記為t’(x),并且A值已給定,對式兩邊同時進行兩次最小值運算,可得:
其中,J(x)是要求的無霧圖像,根據前述的暗通道先驗理論可知:
因此可推導出:
(5) 透射率計算
將上式帶入可得到透射率t’(x)的預估值,如下所示:
現實生活中,即便晴空萬里,空氣中也會存在一些顆粒,在眺望遠處的景物時,人們還是能感覺到霧的存在。另外,霧的存在讓人們感受到景深,因此在去霧的同時有必要保留一定程度的霧。可以通過引入一個0到1之 間 的 因 子 w(一 般取0.95)對預估透射率進行修正,如式所示:
以上的推導過程均假設大氣光值A是已知的,在實際中,可以借助暗通道圖從原始霧圖中求取。具體步驟如下:
- 先求取暗通道圖,在暗通道圖中按照亮度的大小提取最亮的前0.1%的像素
- 在原始霧圖I(x)中找對應位置上具有最高亮度的點的值,作為大氣光值A
此外,由于透射率t偏小時,會造成J偏大,恢復的無霧圖像整體向白場過度,因此有必要對透射率設置一個下限值t0(一般取值為0.1),當t值小于t0 時,取t=t0。將以上求得的透射率和大氣光值代入公式,最終整理得到圖像的恢復公式如下:
這就是暗通道先驗去霧算法的原理過程,下面簡單補充論文中的處理效果圖。
再次膜拜偶像,極力推薦大家閱讀論文。
2.算法實現
實現代碼引用木老師的,感覺比我寫得好,參考如下:
- openCV+python實現圖像去霧 - 木盞老師
實現效果如下圖所示:
如果想和后續目標汽車檢測結合,同樣可以先去霧再進行檢測,如下圖所示:
四.圖像噪聲和霧生成
圖像處理總少不了噪聲添加或生成,下面補充兩個簡單的椒鹽噪聲和霧氣模擬生成的代碼。這與本文的實驗緊密相關,能為我們提供更多的GAN生成樣本。后面人工智能系列文章,GAN我們看看能不能學習真實霧化場景的圖像,值得期待,哈哈!
1.加鹽噪聲
原圖是一張風景圖像:
代碼如下:
# -*- coding:utf-8 -*- 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,:] = 210cv2.imshow("noise", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('fj-res.png',img)輸出結果如下圖所示:
2.霧的模擬生成
代碼如下:
import numpy as np import cv2 as cv import os import randomfile = ['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) #里面參數可調,主要調整霧的濃度image = cv.addWeighted(img,round(random.uniform(0.03, 0.28), 2),mask_img, 1, 0) #保存的文件夾cv.imwrite(output, image)輸出結果如下圖所示,效果還不錯。
五.總結
這篇文章就寫到這里了,希望對您有所幫助。由于作者英語實在太差,論文的水平也很低,寫得不好的地方還請海涵和批評。同時,也歡迎大家討論,真心推薦原文。學安全兩年,認識了很多安全大佬和朋友,希望大家一起進步。同時非常感謝參考文獻中的大佬們,感謝老師、實驗室小伙伴們的教導和交流,深知自己很菜,得努力前行。感恩遇見,且行且珍惜,小珞珞太可愛了,哈哈。
如果你是一名Python初學者或想了解圖像處理知識,推薦作者《Python圖像處理》系列,并且多實踐多寫代碼,最后希望文章對您有所幫助。
八月初又認識了很多朋友,也解答了許多學生和博友的問題,雖然自己技術不是很好,但真心感激這一路走來認識了許多伙伴,也享受相互交流的過程,感恩遇見,不負青春。
這半個月交流讓我印象深刻的是復旦、浙大和武大離職讀博想當老師的朋友,我們交流了許多學習心得并鼓勵前行;也有貴財計科、軟工、電商幾位學生工作的問題;以及家鄉貴財、貴大、興義師范、貴師大、貴理工選擇考研或已經讀研同學的咨詢,我們相互學習;當然還有許多創業、工作、學習或尋求正能量的交流,包括來自廣東、南航、中北、湖北工業、建筑轉NLP、安全或AI行業的博友。最讓我享受的是,許多我教過的學生或相互鼓勵前行的博友,經常祝福我們一家并保持良好的情誼,這或許就是分享的魅力,覺不亞于一次holy shit。教育的方式多種多樣,我享受這樣的交流和鼓勵方式,山川異域,攜手同行。
最后補充一句,父母能帶給孩子最好的禮物,或許就是“處于逆境時的應對能力”,希望小珞珞能堅強、健康、快樂的成長,女神也能美麗和幸福一輩子。愛你們喲。
(By:Eastmount 2021-11-04 晚上12點 http://blog.csdn.net/eastmount/ )
總結
以上是生活随笔為你收集整理的[论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [当人工智能遇上安全] 6.基于机器学习
- 下一篇: [Python图像识别] 四十八.Pyt