李健 吉陳力 岳貴金
暗通道圖像去霧算法的FPGA實現
李健吉陳力岳貴金
本文針對何凱明提出的暗通道圖像去霧算法過于復雜難以在硬件上實現的問題,對原算法進行改進之后在基于FPGA的硬件平臺上進行了算法移植。文中詳細介紹了算法移植過程中三個主要模塊的實現過程:暗通道求取模塊及大氣光估計模塊,邊緣檢測及濾波模塊,圖像復原模塊。實驗結果顯示,本系統較好地完成了戶外采集到有霧圖像的復原工作,輸出圖像質量明顯改善。
近年來,霧霾持續籠罩著我國大部分地區,同時也給戶外圖像的清晰度造成極大的影響。在軍事偵察、視頻監控、遙感監測中,圖像的清晰度都是至關重要的。因此,為了實現戶外視覺系統在霧霾天氣下工作的可靠性和魯棒性,必須對霧霾圖像進行清晰化處理。
目前圖像去霧算法主要分為基于圖像增強和基于圖像復原的兩種類型,基于圖像復原的去霧算法得到了更廣泛的研究。何凱明等人在提出暗影通道先驗的知識后,有效的實現了圖像的去霧問題。然而,由于該算法中透射率細化過程中軟摳圖算法較為復雜,難以在實際中得到有效地應用,本文在保證改進后霧霾圖像處理效果接近原算法的前提下,主要對原算法中耗時最長的透射率優化過程進行了改進,并且取得了較為理想的效果。之后在FPGA硬件平臺上進行移植,實現了霧天圖像的有效復原,從而為實現去霧系統提供了一種有效、可行的方案。
物理模型及算法流程
公式(1)是目前常用的大氣散射物理模型:

這個等式定義在RGB顏色通道,I代表得到的有霧圖像,J 代表需要復原的圖像,A 表示整體大氣光,t( x)表示霧霾的介質傳輸率。去除霧霾的原理就是從I( x)中恢復出J( x )、t( x)和A。通過暗影通道先驗可以估測到A和t,之后通過對粗估計的透射率的邊緣部分進行單獨濾波從而實現平滑過程,最后根據得到的三個參數反推得到需要復原的圖像。
暗通道先驗
在絕大多數非天空場景區域里的戶外無霧圖像中,每個像素點上至少存在一個顏色通道的亮度值是比較低的。形式上,對于一幅圖像J ,我們定義:

其中Jc表示圖像J的一個顏色通道(即RGB三顏色的一種),?(x)是以x 為中心的一個局部圖像模塊。如果J 是戶外的無霧自然圖像,去除天空區域,Jdark的強度值是非常低并且趨近于0,Jdark稱為J 的暗影通道。
估算整體大氣光A和透射率
挑選暗通道中最亮像素的0.1%個像素,然后將這些像素對應輸入到原霧霾圖像中并將最高亮度的像素選作整體大氣光。此外,利用暗原色值和霧天圖像退化模型可以估計出成像時刻的霧濃度和透過率t。由式(1)兩端進行最小化操后,同除Ac可求得帶霧圖像的暗原色為:


其中, 等式(4)右側最小值項即有霧圖像局部區域的暗原色值,故可得到粗透射率t。
透射率優化平滑
透射率的粗糙估測圖存在一些小方塊, 在視覺上難以達到滿意效果。本算法在充分考慮硬件實現的可能性,以及戶外實時視頻去霧系統對處理時間的要求較高后,主要通過對透射率圖進行邊緣檢測,之后再對邊緣部分進行均值濾波來實現透射率優化過程。
1) 用prewitt經典算子對透射率圖進行邊緣檢測
該方法在圖像空間利用兩個方向模板與圖像進行鄰域卷積來完成的,首先計算水平和豎直方向的梯度,之后,此處梯度取二者的較大值作為輸出梯度,即:

最后適當選取門限TH,如果P(i,j)>TH,則其為階躍邊緣點,其運算結果就是其邊緣圖像。
2) 對邊緣部分進行平滑濾波
由觀察可知原算法中塊效應主要集中在圖像的邊緣部分,這里選用3*3區域模板進行均值濾波從而平滑邊緣。其數學公式表達為:

式(7)中,g(Z,y)為處理后圖像在該點上的灰度值,(x,y)為當前像素點,M為區域模板中包含像素的個數,M為9。
圖像復原
利用公式(2-8)我們可以求解出復原圖像:

公式中各個參數在前面的步驟中已經求得,進而可以得到復原圖像J( x)。
系統結構
本系統以友晶公司生產的DE2-70以及TRDBD5M圖像采集板卡作為開發平臺,其硬件結構圖如圖1所示。該視頻采集處理顯示系統主要包括圖像采集卡配置模塊、圖像采集模塊、圖像格式轉換模塊、圖像存儲模塊、圖像處理模塊、圖像顯示模塊。本系統主要通過兩塊SDRAM來實現去霧算法的存儲計算過程。系統工作原理為:首先通過時鐘復位控制I2C總線配置CMOS圖像采集卡,經過一定延時后通過圖像采集模塊采集目標場景的圖像,之后將BAYER模式的圖像數據轉換為常用的RGB數據并寫入到SDRAM0中,最后對有霧圖像進行算法處理后通過VGA模塊進行顯示。

圖1 視頻采集及處理系統硬件結構圖
暗影通道求取模塊設計及A的求取
暗影通道的求取過程要涉及每一個顏色通道,這里首先對3個顏色通道分別進行最小化處理,最后再從3個顏色通道中選取最小的作為最終輸出暗通道值。通過quartus2提供的IP核altshift-taps(移位寄存器)在FPGA上實現對圖像像素的區域化取小運算。該IP核可以實現串行數據的并行輸出,并且可以指定寬度。在本算法中最小化模板選取3*3區域,需設置探頭個數為3,而探頭之間的間隔寬度設置為圖像每行的寬度640即可實現最小化處理。如圖2所示,即可實現同時讀取相鄰三行同一列的數據值:
那么,如何把理念轉化為實踐落地?韓光曙認為,無論優質、研究型,還是人文醫院,最終的落腳點是人,應把人放在核心的位置上。
在同時得到三個探頭的數據后需要對其進行比較取最小值,并且分別存儲相鄰三個時鐘的最小值,之后再進行一次取小運算,即得到這個顏色通道的暗通道值,最后選取三個顏色通道最小值即可得到所求到的暗通道值。在每次求取到暗通道值時進行比較大小后得到整幅圖像的最大值。之后讀取原圖像中該像素的J值作為整體大氣光A。
透射率的求取模塊設計
考慮到t的大小在0到1之間,并且浮點數運算會大幅度提高計算精度,故計算過程中的主要加減乘除均采用浮點數進行運算。這里需用到浮點數乘法器、浮點數除法器以及一個浮點數減法器,由于得到的t是32為浮點數,SDRAM數據寬度只有16位,故需要對t乘以一個因子K成為整數進行存儲,為了避免t過小造成舍去誤差,這里將后面與0.1的大小比較過程提前,取二者的較大值作為輸出值,之后再乘以因子K,K選20。
透射率的邊緣檢測及平滑濾波模塊設計
透射率邊緣檢測模塊
Prewitt邊緣檢測的核心運算是對每個像素進行8鄰域的模板卷積。這里同樣要用到移位寄存器將串行數據轉換為并行數據,然后再進行模板對應的乘加,最后通過判斷水平梯度和豎直梯度的大小得到最后的梯度,將這一梯度與設置好的閾值進行大小比較。這里閾值通過外部按鍵進行輸入設置,根據不同的外部環境來調節閾值大小來獲得較為理想的邊緣檢測結果。邊緣檢測的主要過程如圖3所示。
圖3中MAC_3是利用quartusII提供的IP核ALTMULT_ADD(乘加器)來實現,主要實現同一行上連續三個數和模板的乘加運算;PA_3是利用quartusII提供的IP核PARALLEL_ADD(平行加法器)來實現,其主要實現同一時鐘下3個乘加器的結果求和得到最后的梯度,故分別得到水平梯度pa0和豎直梯度pa1。
透射率邊緣濾波模塊
在得到帶有邊緣的透射圖之后利用兩個移位寄存器,一邊對所有的圖像數據進行均值化處理,另一邊輸出原透射圖的數據,最終通過判斷是否是邊緣來選擇輸出。當其是圖像邊緣時,輸出均值處理后的透射圖;當其不是邊緣時,輸出原透射圖數據即可。圖4為均值濾波硬件實現框圖。

圖5 硬件復原圖

圖2 區域化處理在altshift-tap上的實現

圖3 透射率邊緣求取結構圖

圖4 邊緣濾波過程結構圖
從圖4中可以看出,圖中主要利用到了quartusII提供的移位寄存器、乘加器以及累加器IP核。其中最關鍵的部分是要保證判斷部分同一時鐘下數據的配合是否正確,這一部分主要通過設置IP核的延時以及通過仿真觀察來修改時序實現正確的匹配。這里的透射率是放大后的整數,因此存在一定程度的誤差。
復原模塊設計

如上文介紹,系統選用臺灣友晶出品的DE2-70 和TRDB-D5M圖像采集模塊搭建系統,通過不斷地調試,目前已完成了去霧算法在視頻采集系統中對采集到圖像的去霧處理過程。圖5給出了顯示器上輸出的最后的復原圖像,依次為原圖、暗通道模塊、透射率求取模塊、復原后圖像。
圖5給出了部分硬件復原圖,從復原圖像中可以看出,該系統實現了霧天場景下采集到圖像的有效復原,并且恢復后的圖像色彩鮮艷,自然逼真,清晰度高。
本文針對暗通道先驗去霧算法在硬件移植中存在的問題,對算法中耗時最長的透射率優化過程進行改進,并詳細介紹了算法移植到FPGA硬件平臺中主要模塊的實現過程,最后給出了實驗的結果圖。實驗結果證明:該系統有效地實現了暗通道去霧算法在FPGA硬件平臺上的有效去霧,基本滿足了實時去霧的要求。

李 健吉陳力岳貴金
中航工業試飛中心
李健,碩士畢業于西安電子科技大學,現于中國飛行試驗研究院測試所從事機載測試工作。
10.3969/j.issn.1001-8972.2016.07.017