何恺明暗通道去雾(阅读笔记)
何愷明暗通道去霧文章閱讀
劉海山,2021年6月24日
文獻引文信息: He, K. M., Sun, J. & Tang, X. O. Single Image Haze Removal Using Dark Channel Prior. Ieee T Pattern Anal 33, 2341-2353, doi:10.1109/Tpami.2010.168 (2011).
文獻來源:https://ieeexplore.ieee.org/document/5567108
筆記提綱
- 一、摘要
- 二、背景介紹
- 1. 前人工作情況
- 1.1 偏振去霧
- 1.2 約束去霧
- 1.3 基于深度的去霧模型
- 1.4 單幀圖像去霧
 
- 2. 研究意義
- 3. 工作的前因后果
 
- 三、基本原理
- 1. 暗通道先驗
- 2. 估計透過率t
- 3. 使用soft matting微調透過率
- 4. 估計大氣光值
- 5. 灰度圖像的處理
 
- 四、實驗結果
- 五. 問題轉化
- 附錄
一、摘要
In this paper, we propose a single-image defogging model based on the image dark channel prior. In an outdoor clear image, there is usually at least one color channel with a very low value in most local areas. Load this prior into the fog map imaging model, we can directly estimate the thickness of the fog in different areas and restore the fog-free image. A series of picture tests have proved the effectiveness of the model.
二、背景介紹
1. 前人工作情況
問題:先前有什么課題組做了什么(取得什么結果,達到什么目標,實現什么指標)?
   去霧是一個非常具有挑戰性的問題,因為霧的影響依賴于未知的深度(這里的深度是指相機到場景的距離)。如果輸入僅僅只是一幀霧圖,那么這個問題是非限定的。因此,有許多去霧的方法是通過使用多張圖像或者增加信息來實現的。
1.1 偏振去霧
??哥倫比亞大學計算機科學系的Yoav Y. Schechner于2001年提出了基于偏振的方法[3]實現去霧,通過采集多張(至少兩種)不同角度的偏振圖像來去霧。文章認為霧圖主要由兩部分組成——一是物體場景傳播出來的光,另一部分是由霧引起的散射光(天空光);文中說天空的散射光是部分偏振光,因此可以利用偏振片在得到不同的偏振圖像后對場景光進行恢復。相機采集到的光包含兩部分: Itotal=T+A{I^{total}} = T + AItotal=T+A
 再結合:
 平行偏振光強I∥=T/2+A∥垂直偏振光強I⊥=T/2+A⊥天空光平行分量A∥=A(1?P)/2天空光垂直分量A⊥=A(1+P)/2投射光強T=J?e?βz平行偏振光強{I^\parallel } = T/2 + {A^\parallel }\\ 垂直偏振光強{I^\bot} = T/2 + {A^\bot}\\ 天空光平行分量{A^ \parallel } = A(1 - P)/2\\ 天空光垂直分量{A^ \bot} = A(1 + P)/2\\ 投射光強T = J \cdot {e^{ - \beta z}} 平行偏振光強I∥=T/2+A∥垂直偏振光強I⊥=T/2+A⊥天空光平行分量A∥=A(1?P)/2天空光垂直分量A⊥=A(1+P)/2投射光強T=J?e?βz文中的平行方向可理解為天空光偏振濾波后強度最小的方向。
 從以上公式可推導出:
 A^=(I⊥?I∥)/Pe?βz^=1?A^/A∞最終復原場景光:J^=(I^total?A^)e?βz^=(I^total?A^)(1?A^/A∞)\hat A = ({I^ \bot } - {I^\parallel })/P\\ {e^{ - \widehat {\beta z}}} = 1 - \hat A/{A_\infty }\\ 最終復原場景光:\hat J = \frac{{({{\hat I}^{total}} - \hat A)}}{{{e^{ - \widehat {\beta z}}}}} = \frac{{({{\hat I}^{total}} - \hat A)}}{{(1 - \hat A/{A_\infty })}} A^=(I⊥?I∥)/Pe?βz?=1?A^/A∞?最終復原場景光:J^=e?βz?(I^total?A^)?=(1?A^/A∞?)(I^total?A^)?在這個模型中,需要我們估計無窮遠的天空光強度和天空光的偏振度;
 
 附屬可獲取的信息:
 利用光強衰減與距離的關系可反推出場景的深度圖:
 
 -----------另一篇有關偏振去霧的文章-----------
??2006年CVPR上,以色列技術研究所電子工程系Sarit Shwartz提出了盲去霧方法[4],省去了上一篇文中需要估計天空光強度和偏振度的問題。文章在求解場景光照R的模型上,利用改進的ICA (獨立成分分析,用于盲源分離)方法估計了偏振度和大氣光。場景光的計算模型:
 R=(1?1/p)Imax?(x,y)+(1+1/p)Imin?(x,y)1?[Imax?(x,y)?Imin?(x,y)]/(A∞p)R = \frac{{(1 - 1/p){I^{\max }}(x,y) + (1 + 1/p){I^{\min }}(x,y)}}{{1 - [{I^{\max }}(x,y) - {I^{\min }}(x,y)]/({A_\infty }p)}}R=1?[Imax(x,y)?Imin(x,y)]/(A∞?p)(1?1/p)Imax(x,y)+(1+1/p)Imin(x,y)?經過ICA方法估計偏振度后的模型去霧結果:
 
 其他偏振去霧文章:
 1.Advanced visibility improvement based on polarization filtered images
 2.Polarization-based vision through haze此文是第一篇的重寫版,發表于AO上。
1.2 約束去霧
在[5-7]中,在相同場景的不同天氣條件下獲得更多的約束;
 大致瀏覽了,效果不是很好;
1.3 基于深度的去霧模型
已知場景的距離先驗,再利用逆衰減模型求解原始場景光源。
[8] J. Kopf, B. Neubert, B. Chen, M. Cohen, D. Cohen-Or, O. Deussen, et al., “Deep Photo: Model-Based Photograph Enhancement and Viewing”, ACM Trans. Graphics, vol. 27, no. 5, pp. 116-1, 2008.
1.4 單幀圖像去霧
主要思想是什么?
[10]Fattal, R. Single image dehazing. Acm T Graphic 27, doi:Artn 7210.1145/1360612.1360671 (2008).
[11]Tan, R. T. Visibility in bad weather from a single image. 2008 Ieee Conference on Computer Vision and Pattern Recognition, Vols 1-12, 2347-2354, doi:DOI 10.1109/cvpr.2008.4587643 (2008).
大氣散射模型:
 I(x)=J(x)t(x)+A(1?t(x))I({\bf{x}}) = J({\bf{x}})t({\bf{x}}) + A(1 - t({\bf{x}}))I(x)=J(x)t(x)+A(1?t(x))從幾何的角度分析,該表達式說明A,J,I向量在彩色空間上是共面的,而且向量的終點共線。衰減量t滿足關系:
 t(x)=∥A?I(x)∥∥A?J(x)∥=Ac?Ic(x)Ac?Jc(x),where?c∈{r,g,b}t({\bf{x}}) = \frac{{\left\| {{\bf{A}} - {\bf{I}}({\bf{x}})} \right\|}}{{\left\| {{\bf{A}} - {\bf{J}}({\bf{x}})} \right\|}} = \frac{{{A^c} - {I^c}({\bf{x}})}}{{{A^c} - {J^c}({\bf{x}})}},{\text{ where }}c \in \left\{ {r,g,b} \right\}t(x)=∥A?J(x)∥∥A?I(x)∥?=Ac?Jc(x)Ac?Ic(x)?,?where?c∈{r,g,b}
 
基于這個模型,Tan的方法聚焦到增強圖像的能見度上。對于每個塊擁有統一的衰減率t,輸入圖像的能見度(定義為梯度求和)被霧衰減了,它們具備如下關系:
 ∑x∥?I(x)∥=t?∑x∥?J(x)∥<∑x∥?J(x)∥\sum\limits_{\bf{x}} {\left\| {\nabla {\bf{I}}({\bf{x}})} \right\|} = t \cdot \sum\limits_{\bf{x}} {\left\| {\nabla {\bf{J}}({\bf{x}})} \right\|} < \sum\limits_{\bf{x}} {\left\| {\nabla {\bf{J}}({\bf{x}})} \right\|} x∑?∥?I(x)∥=t?x∑?∥?J(x)∥<x∑?∥?J(x)∥使用J<A的約束,通過最大化塊的對比度來估計t。然后再用MRF模型更進一步正則化結果。這個方法可以極大地顯示物體的細節和結構信息。但是,因為這個方法僅僅增強能見度而沒有嘗試從物理層面恢復場景輻射,所以輸出圖像通常趨向于更大的顏色飽和度。而且結果可能在深度不連續附近存在光暈效應。
2. 研究意義
問題:開展這項研究的目的(動機)是什么?要解決什么科學或技術問題?
??在計算圖形學和計算機視覺應用中,去霧是一個備受高度重視的問題。首先,去霧的重要意義是提高場景的能見度和修正由天空光引起的顏色變換。通常來說,無霧圖像在視覺上更令人舒適。第二,大多是計算機視覺算法,從底層圖像分析到高層目標識別,前提假設都是輸入圖像是場景的發光。因此,許多視覺算法的性能不可避免地受到偏差和對比度場景光照的影響。最后,去霧可以提供深度信息、有利于許多視覺算法以及促進圖像編輯。霧或霾在場景分析上可以作為一個有用的深度線索。如此一來,一張糟糕的霧圖也能帶來好的用處。
3. 工作的前因后果
問題:盡量思考一下,為什么會想到做這項研究?這個科學或技術問題的價值是什么?有什么意義嗎?如果有,那么它的解決對整個領域的發展起到什么作用?
本文的暗通道先驗部分是受廣泛應用于多光譜遙感系統的暗物體減影技術[12]所啟發。
[12]An Improved Dark-Object Subtraction Technique for Atmospheric Scattering Correction of Multispectral Data
三、基本原理
??在本節原理介紹中,我們先介紹暗通道的基本原理,之后再介紹使用暗通道先驗的基本步驟。
1. 暗通道先驗
??暗通道先驗是基于無霧圖像的觀察而得出的結論:在大多數無天空光區域(patch,文中取15×15大小,并假設在patch中透過率是相同的)中,在某些像素上,至少一個彩色通道的強度具有很低的值甚至接近零。 同樣地,在此區域(patch)上的最小強度接近于零。對于一張任意圖像J,它的暗通道表示為:
 Jdark(x)=min?y∈Ω(x)(min?c∈{r,g,b}Jc(y)){J^{dark}}({\bf{x}}) = \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} {J^c}\left( {\bf{y}} \right)} \right)Jdark(x)=y∈Ω(x)min?(c∈{r,g,b}min?Jc(y))圖像暗通道的獲取:
 Jdark(x)=min?y∈Ω(x)(min?c∈{r,g,b}Jc(y)){J^{dark}}({\bf{x}}) = \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} {J^c}\left( {\bf{y}} \right)} \right)Jdark(x)=y∈Ω(x)min?(c∈{r,g,b}min?Jc(y))由前人工作可知,大氣散射模型[2,5,10,11]通常表示為:
 I(x)=J(x)t(x)+A(1?t(x))I({\bf{x}}) = J({\bf{x}})t({\bf{x}}) + A(1 - t({\bf{x}}))I(x)=J(x)t(x)+A(1?t(x))因為t>0,即J和I滿足正向線性組合關系,所以當J取暗通道操作時,等式右邊的結果等于單獨對采集圖像I取暗通道。即有:
 Idark=t?Jdark+A?(1?t){I^{dark}} = t \cdot {J^{dark}} + A \cdot (1 - t)Idark=t?Jdark+A?(1?t)作者在文中展示了haze-free圖像的統計結果:
 
在統計的暗通道數據中,超過90%的樣本強度值小于25。作者也展示了部分圖像的暗通道結果:
 
 ??如圖,左上角是任意圖像,左下角是其對應的暗通道結果,從圖中可以看到,圖像的暗通道基本上具有非常低的值。而圖中的右上角是有霧的圖像,右下角是其對應的暗通道,可見,由于霧的存在,其暗通道不再是一片黑,而是隨著距離越來越遠而表現為越來越亮,因為自然場景的暗通道強度是很小的,所以此時暗通道的強度主要是由霧的散射光引起的(大氣光)。
 由此,現在我們已經求得圖像的暗通道,下面將介紹如何利用暗通道先驗來估計透過率。
2. 估計透過率t
??因為大氣光值需要利用透過率的分布進行估計,所以我們放到后面介紹,這里我們先假定已知大氣光值。利用大氣光值對大氣散射模型進行歸一化:
 Ic(x)Ac=t(x)Jc(x)Ac+1?t(x)\frac{{{I^c}({\bf{x}})}}{{{A^c}}} = t({\bf{x}})\frac{{{J^c}({\bf{x}})}}{{{A^c}}} + 1 - t({\bf{x}})AcIc(x)?=t(x)AcJc(x)?+1?t(x)對兩邊取暗通道操作可得:
 min?y∈Ω(x)(min?cIc(y)Ac)=t~(x)?min?y∈Ω(x)(min?cJc(y)Ac)+1?t~(x)\mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{{{I^c}\left( {\bf{y}} \right)}}{{{A^c}}}} \right) = \tilde t({\bf{x}}) \cdot \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{{{J^c}\left( {\bf{y}} \right)}}{{{A^c}}}} \right) + 1 - \tilde t({\bf{x}})y∈Ω(x)min?(cmin?AcIc(y)?)=t~(x)?y∈Ω(x)min?(cmin?AcJc(y)?)+1?t~(x)由暗通道先驗的特點可知,J的暗通道基本等于0,上式可表示為:
 t~(x)=1?min?y∈Ω(x)(min?cIc(y)Ac)\tilde t({\bf{x}}) = 1 - \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{{{I^c}\left( {\bf{y}} \right)}}{{{A^c}}}} \right)t~(x)=1?y∈Ω(x)min?(cmin?AcIc(y)?)直接利用本模型還存在一點小問題,當patch中存在距離斷層時,透射率是常數這一假設不成立,因此在恢復的圖像中,處于距離斷層的邊緣會有光暈效應。
 
 ??如圖,在距離斷層邊緣,存在明顯的光暈效應,這是因為透射率在patch中是常數這一假設在此處不成立了。為了解決這一問題,作者使用soft matting的技術來微調透射率的結果。
3. 使用soft matting微調透過率
軟摳圖的方法
 
4. 估計大氣光值
??我們已經假設了大氣光值是已知的。在本節中,我們提出了一個估計大氣光值的方法。在前人的工作中,最不透明區域的值被用于當做大氣光值A[11]或者A的初始猜測[10]。然而,人們卻很少關注如何檢霧的最不透明區域。
 ??在Tan的工作中,他把霧圖中最亮的點當做最不透明點。這個結論只在陰天或者太陽光可以被忽略的條件下成立。在這種條件下,大氣光是場景光的主要來源。因此,這個場景在每個顏色通道上的場景可以寫成:
 J(x)=R(x)AJ({\bf{x}}) = R({\bf{x}})AJ(x)=R(x)A對于每個場景點都有反照率R?1R \leqslant 1R?1。因此,霧圖成像方程可以寫成
 I(x)=R(x)?A?t(x)+A(1?t(x))?AI({\bf{x}}) = R({\bf{x}}) \cdot A \cdot t({\bf{x}}) + A(1 - t({\bf{x}})) \leqslant AI(x)=R(x)?A?t(x)+A(1?t(x))?A當圖像中存在無窮遠點時(場景透射率等于0),I中最亮的點就表示最不透明的點,它近似等于大氣光值。不幸的是,在實踐中,它僅僅在可以忽略太陽光的情況下有效。引入太陽光S,我們調整場景輻照度為
 J(x)=R(x)(S+A)J({\bf{x}}) = R({\bf{x}})(S + A)J(x)=R(x)(S+A)此時,圖像采集的光強可以表示為
 I(x)=R(x)?S?t(x)+R(x)?A?t(x)+A(1?t(x))I({\bf{x}}) = R({\bf{x}}) \cdot S \cdot t({\bf{x}}) + R({\bf{x}}) \cdot A \cdot t({\bf{x}}) + A(1 - t({\bf{x}}))I(x)=R(x)?S?t(x)+R(x)?A?t(x)+A(1?t(x))在這種情況下,全圖中最強的光可能大于大氣光值,Tan的方法失效,最亮的可以是白色的車、白色的建筑或者其他反照率高的物體。
 ??在1.1節中我們介紹到場景透過率與大氣值的關系為:
 t=1?A^(x)/A∞t = 1 - \hat A(x)/{A_\infty }t=1?A^(x)/A∞?因此,在透過率等于0的區域就是霧圖中霧最濃的區域,而在4.1節中我們已經估計出了透射率的相對分布(A未知,但相對關系已知)。暗通道圖像某區域越亮,表示該區域透射率越低,我們選取暗通道圖像中最亮的1%區域作為候選區域(檢測過程),再選擇I圖像中候選區域最亮的值作為我們的大氣光值A∞{A_\infty }A∞?。
 ??估計完投射率和大氣光值后,我們就可以計算出場景的輻照度:J(x)=I(x)?At(x)+AJ({\bf{x}}) = \frac{{I(x) - A}}{{t(x)}} + AJ(x)=t(x)I(x)?A?+A
5. 灰度圖像的處理
??對于灰度圖像,由于它沒有彩色通道,所以不需要在通道上取極小值。當場景存在較多的陰影或空洞時,暗通道算法仍然適用。
 
四、實驗結果
??本文的算法比較簡單且有效,本人已根據思路和參考資料復現出相應的程序。執行結果如下:
 
五. 問題轉化
??當霧的濃度越來越濃是,場景的信號變得越來越低,那么此時恢復場景的著手點將轉變為極低信號的檢測與恢復。
附錄
鑒于研究內容還未結束,這里只給出matlab程序框架,延遲開源,敬請諒解:
% 讀取圖像 I = imread('test.jpg'); % 圖片可彩、可灰、可多通道% 暗通道操作與大氣光值估計 [I_dark,A] = dark_channel(I,15,0.99);% 估計投射率 t = estimate_t(I,A);% 恢復場景輻照度 [J, depth] = recover_J(I,t,A);總結
以上是生活随笔為你收集整理的何恺明暗通道去雾(阅读笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 分享几个在线网站备案查询
- 下一篇: 电缆载流量计算对照表
