葉 懋,黃品高,呂 洋,唐 寧,劉建偉
(1.桂林電子科技大學 機電綜合工程訓練國家級實驗教學示范中心,廣西 桂林541004;2.中國科學院 深圳先進技術(shù)研究院,廣東 深圳518005;3.西安應用光學研究所,陜西 西安 710065)
港口、高速路口等處的戶外監(jiān)控設(shè)施易受季節(jié)性霧、霾天氣的影響,造成對比度降低、色彩失真、細節(jié)丟失等成像問題,使這些戶外視頻設(shè)備難以發(fā)揮其應有的作用,嚴重時甚至造成人員和經(jīng)濟損失。因而霧、霾氣象條件下視頻圖像實時復原技術(shù)的研究受到廣泛的關(guān)注。
相對于傳統(tǒng)霧霾圖像復原算法,基于物理模型的圖像復原方法在近年來有了長足發(fā)展,圖像復原效果更佳且運行速度更快[1-4]。在視頻實時除霧方面,隨著FPAG(field programmable gate array)、ARM(advanced RISC machine)等芯片的發(fā)展,使視頻實時處理不再依賴上位機成為可能;目前基于先驗暗通道算法及其改進算法在FPGA上的實現(xiàn)[5-6],由于先驗暗通道復原算法較大的計算量,使得這些研究都僅在單一圖片的除霧上獲得成功;還有利用FPGA及在其內(nèi)部嵌入RISC(reduced instruction set computer)處理器軟核,共同實現(xiàn)實時視頻除霧[7],這種方法使用了RISC因而對FPGA的要求較高,不利于產(chǎn)品化后降低成本,降低了系統(tǒng)的可移植性。
為保證視頻除霧處理的實時性及降低硬件開銷,本文以一種快速霧霾圖片復原算法[4]為參考,提出了一種采用流水線設(shè)計方法、局部與全局計算相結(jié)合、窗口中心像素處理為核心的實時視頻復原處理算法的FPGA實現(xiàn)方案,并在DE2-115 FPGA開發(fā)板上進行了系統(tǒng)的驗證。
McCartney在Mie散射理論的基礎(chǔ)上提出了著名的大氣散射模型[8],在霧、霾等惡劣氣象條件下,因光線在傳輸過程中受空氣中懸浮微粒的影響,使得在成像端獲取的視頻或圖片不清晰,該模型將這一過程表達為
H(x)=F(x)e-β d(x)+A(1-e-β d(x))
(1)
為簡化(1),令,
G(x)=A(1-e-β d(x))
(2)
則由(1)式可得:
(3)
式中:H(x)是由成像設(shè)備獲取的已退化的有霧圖像,需從H(x)中估計出環(huán)境光G(x)和全局大氣光A即可要獲得復原的圖像F(x)。
文獻[4]給出的環(huán)境光估值方程為
G0(x)=min(min(ρmav,0.9)Mave(x),M(x))
(4)
式中:M(x)是每個像素在R、G、B3個通道的中的最小值,對M(x)進行均值濾波后獲得Mave(x),mav(0≤mav≤1)是M(x)中所有元素的均值;ρ是調(diào)節(jié)除霧深度的參數(shù),其取值范圍為0≤ρ≤1/mav。經(jīng)過大量實驗驗證,當增大ρ的取值時,能夠獲得較小的透射率,使得最終保留的霧小,但會增加除霧過程的能量損失,使最終圖像整體亮度下降[9]。
文獻[4]給出大氣光的估值方程為
max(Mave(x)))[111]T
(5)
從(4)、(5)式可以看出,復原算法都是圍繞著M(x)的計算展開的,如果以幀為單位計算M(x),就必須緩存一幀R、G、B三個通道的數(shù)據(jù)加上M(x)自身的存儲,需要640×480×4個8 bit的寄存器,這樣的計算方式首先會降低系統(tǒng)的實時性;其次不利于控制系統(tǒng)的硬件成本;最后降低系統(tǒng)的可移植性。
考慮到數(shù)字視頻的像素是在時鐘信號控制下串行傳輸?shù)?,因此以流水線的處理思路將算法修改為:在一個時鐘周期內(nèi)以單一像素的計算為核心,對于整個模塊而言,在一個時鐘周期里輸入一個像素同時也輸出一個處理好的像素,這樣極大地提高了模塊的數(shù)據(jù)吞吐率,提高了可復用性和可移植性。
由于FPGA內(nèi)部處理是并行運行的,將算法分割為一系列小模塊,使大部分的處理在一個時鐘周期內(nèi)完成,因此可以將算法實現(xiàn)分解為如圖1所示的流程。
圖1 復原模塊框圖Fig.1 Block diagram of recovery module
遵循以單一像素計算為核心的思路,選擇以均值濾波窗口大小來確定計算窗口的劃分。如圖2所示為均值濾波不同窗口對最終處理效果的影響,左圖為使用3×3窗口、右圖使用15×15窗口,所得結(jié)果主觀上無明顯差別,考慮占用存儲空間較少因此選用3×3窗口。
圖2 濾波窗口大小與最終結(jié)果的比較Fig.2 Comparison of different filter window sizes
為實現(xiàn)3×3窗口均值濾波獲得Mave,就要求在每個時鐘周期獲得同一列相鄰3行的3個像素信息。因此,輸入的串行像素數(shù)據(jù)首先經(jīng)過圖3所示的行緩存(Line buffer),完成行數(shù)據(jù)的移位暫存與串并轉(zhuǎn)化,使相鄰3行的數(shù)據(jù)得以并行輸出。
圖3 Line bufferFig.3 Line buffer
在最后計算輸出時還需要用到原始的像素信息,所以在行緩存后還要使用一個移位寄存器,來存儲原始數(shù)據(jù),其結(jié)構(gòu)如圖4所示。其中的Reg均為24 bit,在系統(tǒng)中使用3組這樣的移位寄存器分別對應于R、G、B通道,其shift in[0∶24]分別連接圖3中{taps0[0∶7],taps1[0∶7],taps2[0∶7]}。
圖4 移位寄存Fig.4 Shift register
M(x)需要每個像素3個通道中的最小值,因此只需要進行8次比較,實現(xiàn)時使用阻塞賦值方式,使得比較模塊被綜合成為一個純組合邏輯電路,因此9個數(shù)據(jù)的比較在一個時鐘周期內(nèi)得以完成。圖5中LESS_THAN4和MUX21的組合就是綜合后的兩數(shù)比較算法的實現(xiàn),MUX21輸出端就是兩數(shù)中的小值。
圖5 兩個數(shù)的比較Fig.5 Sub-module of two number comparison
同樣,像素最大值模塊也是使用阻塞賦值方式,在一個時鐘周期內(nèi)完成同一列的相鄰3行的3個像素9個值的比較,其結(jié)果在與暫存的現(xiàn)有最大值比較,直至一幀數(shù)據(jù)比較完后獲得像素的最大值max。
每個時鐘周期最小值模塊都能輸出同一列相鄰行3個像素的最小值,因此需維持如圖6所示的移位寄存器,在每個時鐘周期進行一次該移位寄存器內(nèi)數(shù)據(jù)的均值求取,即可完成3×3窗口的均值濾波獲得Mave。同時將該結(jié)果與當前暫存的均值濾波的最大值Mavemax比較,如果大于當前最大值,則將當前結(jié)果替換Mavemax的值。
圖6 3×3窗口結(jié)構(gòu)Fig.6 Structure of 3×3 window
由大氣散射模型可知大氣光是全局量,估算大氣光至少需要一幀的數(shù)據(jù)來進行估算,考慮到視頻相鄰兩幀之間大氣光值變化不大,可選擇以前一幀的大氣光來計算當前幀。為此將每個時鐘周期產(chǎn)生均值濾波的結(jié)果Mave累加,當累加完一幀的數(shù)據(jù)后,然后將累加的結(jié)果除以640×480×256即得mav,即(4)式中的mav。
至此估算環(huán)境光G所需的數(shù)據(jù)均已獲得,因FPGA不支持浮點運算所以要將參與(4)式運算的數(shù)左移16位而后再進行計算,其中調(diào)節(jié)參數(shù)ρ由FPGA系統(tǒng)的外部11位撥碼開關(guān)來提供。
待一幀數(shù)據(jù)處理完后,根據(jù)(5)式大氣光A只需要將一幀像素的最大值max與均值濾波后的最大值Mavemax作平均即可,在實現(xiàn)的時候直接將二者的和左移15位即得大氣光A的估計值。
最后根據(jù)(3)式分別計算R、G、B三個通道處理后的值,并完成輸出。
本文的算法系統(tǒng)是在友晶科技的多媒體處理開發(fā)平臺DE2-115上實現(xiàn)的,系統(tǒng)架構(gòu)如圖7所示。視頻信號源輸出的視頻信號,經(jīng)由ADV7180解碼得到8 bit的兼容ITU-RBT.656標準視頻分量信號,該視頻分量信號在BT656解碼模塊中,進行串并轉(zhuǎn)化為16 bit的YCbCr色空間信號,進而利用SDRAM進行轉(zhuǎn)存,將隔行視頻信號轉(zhuǎn)化為逐行視頻信號,利用YCbCr解交織模塊和YCbCr轉(zhuǎn)RGB模塊將信號最終轉(zhuǎn)化為24 bit的RGB信號,視頻復原模塊將RGB視頻信號進行霧霾復原處理后,經(jīng)由VGA控制模塊輸出到ADB7123中,從而完成整個系統(tǒng)流程。
圖7 系統(tǒng)架構(gòu)Fig.7 Structure of system
本文FPGA的程序是使用Verilog在版本為13.0的Quartus II上進行邏輯綜合與下載的,運行平臺為友晶科技的DE2-115。使用的測試儀器是TEKTRONIX型號MSO 2012B。實驗測試環(huán)境如圖8所示。
圖8 測試環(huán)境Fig.8 Testing environment
當像素p進入模塊開始處理時,在第一個時鐘周期內(nèi)完成N8(p)各像素的三通道最小值M(p),以及最大值max,在第2個時鐘周期完成M(p)的均值濾波求得Mave(p),并判斷當前像素是否是完成一幀,如果完成則求取mav,否則繼續(xù)累加;第3個周期完成估算G,并判斷是否完成一幀,如果是則計算A;求取像素p的最后處理結(jié)果;第4個周期處理后像素p。
為方便測試模塊的工作時序,測試將通道R和通道G的輸入全為“0”,通道B每隔5個時鐘周期輸入一個“255”,邏輯分析儀的D9-D15接B通道輸入信號(受測試儀器輸入端口數(shù)量限制,缺少最高位)、D8接時鐘、D7-D0接模塊的B通道輸出信號,測試結(jié)果如圖9所示;播放視頻時實際測試波形如圖10中所示。在兩圖中D8時鐘信號分別為26.999 9 MHz和27 MHz,在圖10的D15、14紅框標記處是輸入像素的第2高位和第3高位,其對應輸出為D6、D5的紅框標記處,需要說明的是:在圖10中由于是實時播放的視頻圖像,所以在經(jīng)過處理后每個像素的值,相對于輸入值均可能會產(chǎn)生變化,正如圖10中輸入輸出通道中紅框下面各位的值均有變化。圖9、10的測試結(jié)果表明當一個像素進入模塊后,3個周期內(nèi)完成處理并在第4個周期進行輸出,與理論分析一致。
圖9 時序測試結(jié)果Fig.9 Timing test results
圖10 播放視頻時實測波形Fig.10 Measured waveform when playing video
DE2-115開發(fā)板使用的是Altera公司Cyclone IV系列EP4CE115F29的FPGA芯片,本文所提出系統(tǒng)經(jīng)邏輯綜合后,系統(tǒng)以及圖像復原模塊占用資源情況如表1所示。
表1 系統(tǒng)及模塊占用資源情況
實驗所用視頻為霧天高速路口監(jiān)控錄像其分辨率為640×480 pixel、幀率29幀/s。視頻處理效果如圖11所示,第1列為原始視頻圖像、第2列是ρ為1.5時的效果、第3列是ρ為1.9時的效果,從中可以看出處理后的圖像能夠比較清晰地看到遠處房屋及近處車輛細節(jié),特別是左上角區(qū)域復原后能夠顯示出較為清晰的細節(jié),隨著ρ的增加,除霧的程度也隨之增加,由于能量的損失致使圖像偏暗。
圖11 視頻原圖及不同調(diào)整系數(shù)的復原效果Fig.11 Comparison with different parameter ρ
受FPGA系統(tǒng)存儲空間、不能浮點運算等實際情況的限制,以及為滿足系統(tǒng)對視頻處理實時性的要求,本文對原算法做了一定修改。為衡量修改前后對視頻的影響,分別計算原算法處理結(jié)果與原圖的能量損失比例、FPGA系統(tǒng)處理結(jié)果與原圖的能量損失比例[9]。計算結(jié)果如表2所示:同一幅圖片在同一參數(shù)下,原算法與FPGA處理算法損失能量差異最大為2.26%、最小為0.68%,說明修改后算法與原算法基本一致。
表2 復原前后能量損失對比
實驗結(jié)果表明修改后的算法相對于原算法能量損失的差異最大為2.26%、最小為0.68%;對于分辨率為640×480 pixel,幀率29幀/s的視頻,系統(tǒng)播放流暢無卡頓,完全滿足實時處理的要求。且系統(tǒng)占用資源少,可以完全移植到C3系列部分FPGA中,從而降低硬件成本,也可作極少量的修改,實現(xiàn)對高清視頻的處理。