李健 吉陳力 岳貴金
暗通道圖像去霧算法的FPGA實(shí)現(xiàn)
李健吉陳力岳貴金
本文針對(duì)何凱明提出的暗通道圖像去霧算法過于復(fù)雜難以在硬件上實(shí)現(xiàn)的問題,對(duì)原算法進(jìn)行改進(jìn)之后在基于FPGA的硬件平臺(tái)上進(jìn)行了算法移植。文中詳細(xì)介紹了算法移植過程中三個(gè)主要模塊的實(shí)現(xiàn)過程:暗通道求取模塊及大氣光估計(jì)模塊,邊緣檢測及濾波模塊,圖像復(fù)原模塊。實(shí)驗(yàn)結(jié)果顯示,本系統(tǒng)較好地完成了戶外采集到有霧圖像的復(fù)原工作,輸出圖像質(zhì)量明顯改善。
近年來,霧霾持續(xù)籠罩著我國大部分地區(qū),同時(shí)也給戶外圖像的清晰度造成極大的影響。在軍事偵察、視頻監(jiān)控、遙感監(jiān)測中,圖像的清晰度都是至關(guān)重要的。因此,為了實(shí)現(xiàn)戶外視覺系統(tǒng)在霧霾天氣下工作的可靠性和魯棒性,必須對(duì)霧霾圖像進(jìn)行清晰化處理。
目前圖像去霧算法主要分為基于圖像增強(qiáng)和基于圖像復(fù)原的兩種類型,基于圖像復(fù)原的去霧算法得到了更廣泛的研究。何凱明等人在提出暗影通道先驗(yàn)的知識(shí)后,有效的實(shí)現(xiàn)了圖像的去霧問題。然而,由于該算法中透射率細(xì)化過程中軟摳圖算法較為復(fù)雜,難以在實(shí)際中得到有效地應(yīng)用,本文在保證改進(jìn)后霧霾圖像處理效果接近原算法的前提下,主要對(duì)原算法中耗時(shí)最長的透射率優(yōu)化過程進(jìn)行了改進(jìn),并且取得了較為理想的效果。之后在FPGA硬件平臺(tái)上進(jìn)行移植,實(shí)現(xiàn)了霧天圖像的有效復(fù)原,從而為實(shí)現(xiàn)去霧系統(tǒng)提供了一種有效、可行的方案。
物理模型及算法流程
公式(1)是目前常用的大氣散射物理模型:
這個(gè)等式定義在RGB顏色通道,I代表得到的有霧圖像,J 代表需要復(fù)原的圖像,A 表示整體大氣光,t( x)表示霧霾的介質(zhì)傳輸率。去除霧霾的原理就是從I( x)中恢復(fù)出J( x )、t( x)和A。通過暗影通道先驗(yàn)可以估測到A和t,之后通過對(duì)粗估計(jì)的透射率的邊緣部分進(jìn)行單獨(dú)濾波從而實(shí)現(xiàn)平滑過程,最后根據(jù)得到的三個(gè)參數(shù)反推得到需要復(fù)原的圖像。
暗通道先驗(yàn)
在絕大多數(shù)非天空?qǐng)鼍皡^(qū)域里的戶外無霧圖像中,每個(gè)像素點(diǎn)上至少存在一個(gè)顏色通道的亮度值是比較低的。形式上,對(duì)于一幅圖像J ,我們定義:
其中Jc表示圖像J的一個(gè)顏色通道(即RGB三顏色的一種),?(x)是以x 為中心的一個(gè)局部圖像模塊。如果J 是戶外的無霧自然圖像,去除天空區(qū)域,Jdark的強(qiáng)度值是非常低并且趨近于0,Jdark稱為J 的暗影通道。
估算整體大氣光A和透射率
挑選暗通道中最亮像素的0.1%個(gè)像素,然后將這些像素對(duì)應(yīng)輸入到原霧霾圖像中并將最高亮度的像素選作整體大氣光。此外,利用暗原色值和霧天圖像退化模型可以估計(jì)出成像時(shí)刻的霧濃度和透過率t。由式(1)兩端進(jìn)行最小化操后,同除Ac可求得帶霧圖像的暗原色為:
其中, 等式(4)右側(cè)最小值項(xiàng)即有霧圖像局部區(qū)域的暗原色值,故可得到粗透射率t。
透射率優(yōu)化平滑
透射率的粗糙估測圖存在一些小方塊, 在視覺上難以達(dá)到滿意效果。本算法在充分考慮硬件實(shí)現(xiàn)的可能性,以及戶外實(shí)時(shí)視頻去霧系統(tǒng)對(duì)處理時(shí)間的要求較高后,主要通過對(duì)透射率圖進(jìn)行邊緣檢測,之后再對(duì)邊緣部分進(jìn)行均值濾波來實(shí)現(xiàn)透射率優(yōu)化過程。
1) 用prewitt經(jīng)典算子對(duì)透射率圖進(jìn)行邊緣檢測
該方法在圖像空間利用兩個(gè)方向模板與圖像進(jìn)行鄰域卷積來完成的,首先計(jì)算水平和豎直方向的梯度,之后,此處梯度取二者的較大值作為輸出梯度,即:
最后適當(dāng)選取門限TH,如果P(i,j)>TH,則其為階躍邊緣點(diǎn),其運(yùn)算結(jié)果就是其邊緣圖像。
2) 對(duì)邊緣部分進(jìn)行平滑濾波
由觀察可知原算法中塊效應(yīng)主要集中在圖像的邊緣部分,這里選用3*3區(qū)域模板進(jìn)行均值濾波從而平滑邊緣。其數(shù)學(xué)公式表達(dá)為:
式(7)中,g(Z,y)為處理后圖像在該點(diǎn)上的灰度值,(x,y)為當(dāng)前像素點(diǎn),M為區(qū)域模板中包含像素的個(gè)數(shù),M為9。
圖像復(fù)原
利用公式(2-8)我們可以求解出復(fù)原圖像:
公式中各個(gè)參數(shù)在前面的步驟中已經(jīng)求得,進(jìn)而可以得到復(fù)原圖像J( x)。
系統(tǒng)結(jié)構(gòu)
本系統(tǒng)以友晶公司生產(chǎn)的DE2-70以及TRDBD5M圖像采集板卡作為開發(fā)平臺(tái),其硬件結(jié)構(gòu)圖如圖1所示。該視頻采集處理顯示系統(tǒng)主要包括圖像采集卡配置模塊、圖像采集模塊、圖像格式轉(zhuǎn)換模塊、圖像存儲(chǔ)模塊、圖像處理模塊、圖像顯示模塊。本系統(tǒng)主要通過兩塊SDRAM來實(shí)現(xiàn)去霧算法的存儲(chǔ)計(jì)算過程。系統(tǒng)工作原理為:首先通過時(shí)鐘復(fù)位控制I2C總線配置CMOS圖像采集卡,經(jīng)過一定延時(shí)后通過圖像采集模塊采集目標(biāo)場景的圖像,之后將BAYER模式的圖像數(shù)據(jù)轉(zhuǎn)換為常用的RGB數(shù)據(jù)并寫入到SDRAM0中,最后對(duì)有霧圖像進(jìn)行算法處理后通過VGA模塊進(jìn)行顯示。
圖1 視頻采集及處理系統(tǒng)硬件結(jié)構(gòu)圖
暗影通道求取模塊設(shè)計(jì)及A的求取
暗影通道的求取過程要涉及每一個(gè)顏色通道,這里首先對(duì)3個(gè)顏色通道分別進(jìn)行最小化處理,最后再從3個(gè)顏色通道中選取最小的作為最終輸出暗通道值。通過quartus2提供的IP核altshift-taps(移位寄存器)在FPGA上實(shí)現(xiàn)對(duì)圖像像素的區(qū)域化取小運(yùn)算。該IP核可以實(shí)現(xiàn)串行數(shù)據(jù)的并行輸出,并且可以指定寬度。在本算法中最小化模板選取3*3區(qū)域,需設(shè)置探頭個(gè)數(shù)為3,而探頭之間的間隔寬度設(shè)置為圖像每行的寬度640即可實(shí)現(xiàn)最小化處理。如圖2所示,即可實(shí)現(xiàn)同時(shí)讀取相鄰三行同一列的數(shù)據(jù)值:
那么,如何把理念轉(zhuǎn)化為實(shí)踐落地?韓光曙認(rèn)為,無論優(yōu)質(zhì)、研究型,還是人文醫(yī)院,最終的落腳點(diǎn)是人,應(yīng)把人放在核心的位置上。
在同時(shí)得到三個(gè)探頭的數(shù)據(jù)后需要對(duì)其進(jìn)行比較取最小值,并且分別存儲(chǔ)相鄰三個(gè)時(shí)鐘的最小值,之后再進(jìn)行一次取小運(yùn)算,即得到這個(gè)顏色通道的暗通道值,最后選取三個(gè)顏色通道最小值即可得到所求到的暗通道值。在每次求取到暗通道值時(shí)進(jìn)行比較大小后得到整幅圖像的最大值。之后讀取原圖像中該像素的J值作為整體大氣光A。
透射率的求取模塊設(shè)計(jì)
考慮到t的大小在0到1之間,并且浮點(diǎn)數(shù)運(yùn)算會(huì)大幅度提高計(jì)算精度,故計(jì)算過程中的主要加減乘除均采用浮點(diǎn)數(shù)進(jìn)行運(yùn)算。這里需用到浮點(diǎn)數(shù)乘法器、浮點(diǎn)數(shù)除法器以及一個(gè)浮點(diǎn)數(shù)減法器,由于得到的t是32為浮點(diǎn)數(shù),SDRAM數(shù)據(jù)寬度只有16位,故需要對(duì)t乘以一個(gè)因子K成為整數(shù)進(jìn)行存儲(chǔ),為了避免t過小造成舍去誤差,這里將后面與0.1的大小比較過程提前,取二者的較大值作為輸出值,之后再乘以因子K,K選20。
透射率的邊緣檢測及平滑濾波模塊設(shè)計(jì)
透射率邊緣檢測模塊
Prewitt邊緣檢測的核心運(yùn)算是對(duì)每個(gè)像素進(jìn)行8鄰域的模板卷積。這里同樣要用到移位寄存器將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),然后再進(jìn)行模板對(duì)應(yīng)的乘加,最后通過判斷水平梯度和豎直梯度的大小得到最后的梯度,將這一梯度與設(shè)置好的閾值進(jìn)行大小比較。這里閾值通過外部按鍵進(jìn)行輸入設(shè)置,根據(jù)不同的外部環(huán)境來調(diào)節(jié)閾值大小來獲得較為理想的邊緣檢測結(jié)果。邊緣檢測的主要過程如圖3所示。
圖3中MAC_3是利用quartusII提供的IP核ALTMULT_ADD(乘加器)來實(shí)現(xiàn),主要實(shí)現(xiàn)同一行上連續(xù)三個(gè)數(shù)和模板的乘加運(yùn)算;PA_3是利用quartusII提供的IP核PARALLEL_ADD(平行加法器)來實(shí)現(xiàn),其主要實(shí)現(xiàn)同一時(shí)鐘下3個(gè)乘加器的結(jié)果求和得到最后的梯度,故分別得到水平梯度pa0和豎直梯度pa1。
透射率邊緣濾波模塊
在得到帶有邊緣的透射圖之后利用兩個(gè)移位寄存器,一邊對(duì)所有的圖像數(shù)據(jù)進(jìn)行均值化處理,另一邊輸出原透射圖的數(shù)據(jù),最終通過判斷是否是邊緣來選擇輸出。當(dāng)其是圖像邊緣時(shí),輸出均值處理后的透射圖;當(dāng)其不是邊緣時(shí),輸出原透射圖數(shù)據(jù)即可。圖4為均值濾波硬件實(shí)現(xiàn)框圖。
圖5 硬件復(fù)原圖
圖2 區(qū)域化處理在altshift-tap上的實(shí)現(xiàn)
圖3 透射率邊緣求取結(jié)構(gòu)圖
圖4 邊緣濾波過程結(jié)構(gòu)圖
從圖4中可以看出,圖中主要利用到了quartusII提供的移位寄存器、乘加器以及累加器IP核。其中最關(guān)鍵的部分是要保證判斷部分同一時(shí)鐘下數(shù)據(jù)的配合是否正確,這一部分主要通過設(shè)置IP核的延時(shí)以及通過仿真觀察來修改時(shí)序?qū)崿F(xiàn)正確的匹配。這里的透射率是放大后的整數(shù),因此存在一定程度的誤差。
復(fù)原模塊設(shè)計(jì)
如上文介紹,系統(tǒng)選用臺(tái)灣友晶出品的DE2-70 和TRDB-D5M圖像采集模塊搭建系統(tǒng),通過不斷地調(diào)試,目前已完成了去霧算法在視頻采集系統(tǒng)中對(duì)采集到圖像的去霧處理過程。圖5給出了顯示器上輸出的最后的復(fù)原圖像,依次為原圖、暗通道模塊、透射率求取模塊、復(fù)原后圖像。
圖5給出了部分硬件復(fù)原圖,從復(fù)原圖像中可以看出,該系統(tǒng)實(shí)現(xiàn)了霧天場景下采集到圖像的有效復(fù)原,并且恢復(fù)后的圖像色彩鮮艷,自然逼真,清晰度高。
本文針對(duì)暗通道先驗(yàn)去霧算法在硬件移植中存在的問題,對(duì)算法中耗時(shí)最長的透射率優(yōu)化過程進(jìn)行改進(jìn),并詳細(xì)介紹了算法移植到FPGA硬件平臺(tái)中主要模塊的實(shí)現(xiàn)過程,最后給出了實(shí)驗(yàn)的結(jié)果圖。實(shí)驗(yàn)結(jié)果證明:該系統(tǒng)有效地實(shí)現(xiàn)了暗通道去霧算法在FPGA硬件平臺(tái)上的有效去霧,基本滿足了實(shí)時(shí)去霧的要求。
李 健吉陳力岳貴金
中航工業(yè)試飛中心
李健,碩士畢業(yè)于西安電子科技大學(xué),現(xiàn)于中國飛行試驗(yàn)研究院測試所從事機(jī)載測試工作。
10.3969/j.issn.1001-8972.2016.07.017