石瀟讓 丁宇璇 南京郵電大學電子光學與工程學院
引言:近年來,霧霾問題變?yōu)榱舜蟊娨恢标P(guān)注的問題。眾所周知,霧霾會影響人們的身體健康和生命安全,尤其是交通安全,嚴重的霧霾天氣甚至導致高速公路和機場等交通設施的關(guān)閉,嚴重影響人們出行的便利。那么,如何有效降低霧霾天氣對交通的影響程度就成為了學者們研究的方向之一。
現(xiàn)有算法難以在FPGA上實現(xiàn)的主要原因就是大部分現(xiàn)有算法包含了大量的浮點運算,而FPGA并不適合浮點運算。本文提出的算法盡量避免了浮點運算,轉(zhuǎn)而大量使用了定點運算和整數(shù)運算,大大提高了算法在FPGA上的運行速度,從而實現(xiàn)了圖像實時去霧霾的的效果。
本文提出的算法基于現(xiàn)有的Retinex算法等,主要根據(jù)FPGA的特點對算法進行了優(yōu)化,使算法能夠在FPGA上運行。
眾所周知,Retinex理論的基本內(nèi)容是,物體的顏色由物體反射長(紅),中(綠)和短(藍)光的光線的能力決定,而不是反射的絕對值光強度。物體的顏色不受光線不均勻性的影響,并且具有一致性,即Retinex基于顏色一致性(顏色恒定性)。
根據(jù)Rand的理論,給定圖像S(x,y)可以分解成兩個不同的圖像:反射圖像R(x,y)和亮度圖像L(x,y)。
對于觀察者觀察到的圖像中每一個像素S(x,y),可以認為
事實上,如何確定R并沒有一個明確的結(jié)論,所以根據(jù)不同的方法,也可以產(chǎn)生各種各樣的算法。本文采取了一種最適合FPGA的估計方法。
步驟一:利用對數(shù)的方法將入射光和反射光分離
事先使用Matlab求出0到255的整數(shù)對數(shù)表,在FPGA中寫一個ROM并將上表存入ROM中。這一步使用了對數(shù)運算,但由于RGB空間中R、G、B取值有限,所以可以事先將對應結(jié)果算好存入FPGA的ROM中,這樣不僅降低了算法的復雜程度,還大大提高了算法在FPGA中的運行速度。
步驟二:我們將最終反射圖像估計為空間平滑圖像(物理解釋是通過計算圖像和周圍區(qū)域中像素的加權(quán)平均值來計算圖像中的照明變化,并將其去除;最后, 只保留圖像中物體的反射屬性),因此可以使用高斯模板來卷積原始圖像,相當于對原始圖像進行低通濾波以得到低通濾波圖像D(x,y )。這一步驟可以用如下公式表示,F(xiàn)(x,y)表示高斯濾波函數(shù):
這一步驟其實就是對圖像進行了一次低通濾波,從而除去了步驟一中產(chǎn)生的高頻噪點。本文選擇了非常成熟的中值濾波器設計。中值濾波算法首先在n*n窗口中對數(shù)據(jù)進行排序,然后將(n2+1)/2數(shù)字作為當前像素點的新值,即用中值替換原始值。 因此,選擇正確的排序算法是提高濾波器性能的關(guān)鍵。由于中值濾波器只需求中值,不需要對序列進行完全分類,結(jié)合FPGA并行計算的特點,可以改善排序算法。
3×3二維中值濾波窗口中的數(shù)據(jù)定義如表1所示。
首先,對窗口中的每一行進行排序,得到3行的最大值,中值和最小值,分別表示為Max,Med和Min。 對于第一行窗口數(shù)據(jù),有:
然后,對經(jīng)過第1次比較后的數(shù)據(jù)進行分組,將每行的最大值分在一組,記為Max={Max1,Max2,Max3}。將每行的中值和最小值也各分為一組,記為Med和Min,其中,Med={Med1,Med2,Medl3},Min={Min1,Min2,Min3}。由于要找的是中值,因此只需取最大值組中的最小值MinofMax,中值組中的中值 Medofmed以及最小組中的最大值 Magoffin來進行比較,其他值均可舍棄不參加排序比較。最后, Minimax、 Medofmed、 Magoffin的中值即是最終要求的中值。即Medofwin=Med{ Minimax, Medofmed, Magoffin}。
步驟三:在對數(shù)域中,從原始圖像中減去低通濾波圖像以獲得高頻增強圖G(x,y):G(x,y)=logS(x,y)-logD(x,y)
步驟四:對G(x,y)取反對數(shù)以獲得增強圖像R(x,y):
本算法基于前人的工作,針對FPGA的特點提出了一個實時圖像去霧霾算法,充分利用了FPGA快速、功耗小、開發(fā)周期短的特點。