楊 杰,王民慧
(貴州大學 電氣工程學院,貴陽 550025)
霧霾天氣的出現(xiàn)導致監(jiān)控系統(tǒng)采集到的圖像質(zhì)量很差,不僅圖像不清晰,而且對比度也較低,這些都將對視頻中車牌的快速、準確識別造成很大影響。因此,對霧霾天氣造成的低質(zhì)量圖像進行實時、快速的去霧尤為重要,也將為后續(xù)的車牌識別提供有益支持。
目前,去霧方法大致有3種:基于物理模型的圖像復原、基于非物理模型的圖像增強以及基于深度學習的去霧。其中,基于物理模型的方法主要是考慮霧的成像原理,以此建立模型,再用該模型來恢復有霧的圖像。這種方法去霧效果較好,但算法的時間與空間復雜度高,不容易在硬件平臺實現(xiàn)?;诜俏锢砟P偷姆椒ㄊ峭ㄟ^增強圖像的亮度和對比度來實現(xiàn)的,不考慮成像原理。這類方法常用的是Retinex算法,該算法主要通過增強邊緣信息和抑制噪聲,處理后的圖像都能得到較好的亮度和對比度效果?;谏疃葘W習的去霧主要是其學習能力強、效果好等特點得以應用。該方法幾乎都是通過GPU平臺訓練的,算法復雜、功耗大,不利于實時性要求高的場景應用。現(xiàn)在的去霧算法大多數(shù)在PC端實現(xiàn),靈活性不高、計算速度也較慢等,這些都在一定程度上限制了監(jiān)控系統(tǒng)中車牌識別的應用性能。
Zynq是全可編程的片上系統(tǒng)(AP SOC),將軟硬件的優(yōu)勢結(jié)合起來,使得所設計的系統(tǒng)更加靈活,并且將設計成本和功耗降到最低。完全滿足監(jiān)控系統(tǒng)中對車牌識別實時性、可嵌入、小型化和低功耗等方面的性能要求。
因此,本文提出基于Zynq霧霾天氣下的實時車牌識別系統(tǒng),利用Zynq的ARM+FPGA獨特異構(gòu)方式來提高監(jiān)控系統(tǒng)的圖像去霧性能,而后進行實時的車牌識別。降低去霧算法的空間與時間復雜度,在顏色空間()對亮度用改進Retinex算法進行去霧處理,保持飽和度和色調(diào)相對不變。在車牌識別中,先將去霧后的圖像進行中值濾波進一步增強圖像,提取出分量進行二值化處理,然后進行圖像的腐蝕運算,再進行Sobel邊緣檢測,最后是圖像的膨脹運算。在整體系統(tǒng)架構(gòu)研發(fā)上,PS(ARM)端主要是進行簡單的運算、控制及初始化,而高斯核函數(shù)、二維及三維卷積耗時較多的運算則由PL(FPGA)端采用并行計算的方式實現(xiàn),從而提高運算速度。PS與PL之間的數(shù)據(jù)交換則是由片內(nèi)總線AXI4(Advanced eXtensible Interface 4)來建立連接的。
Retinex算法將一幅圖像分為入射分量和反射分量,即:
其中,(,)為接收的原始圖像;(,)為圖像的入射分量;(,)為圖像的反射分量,也就是要增強的去霧圖像;(,)為圖像的像素坐標。
對式(1)進行對數(shù)運算得到去霧圖像,可由式(2)表示為:
大多數(shù)情況下,傳統(tǒng)的Retinex算法是用高斯核函數(shù)(,)對原始圖像(,)進行卷積運算來逼近入射分量(,),即:
其中,“*”為卷積運算;(,)為高斯核函數(shù);系數(shù)由歸一化函數(shù)決定;為尺度參數(shù)。這樣,Retinex算法為:
傳統(tǒng)的Retinex算法是針對圖像的、、三個通道進行處理的,這種方式容易導致圖像的顏色失真,且算法的復雜度過高,在硬件平臺上實現(xiàn)的難度較大,對實時性也不容易滿足。因此,本系統(tǒng)采用基于顏色空間()的Retinex算法,將有霧的車輛違章圖像由格式轉(zhuǎn)為格式,進而得到色調(diào)、飽和度和亮度,保持圖像的和分量不變,對亮度進行局部單尺度Retinex(SSR)處理,這樣既減少了算法的復雜度,也可以盡量避免傳統(tǒng)的Retinex算法造成的圖像色彩失真。算法流程如圖1所示。
圖1 優(yōu)化Retinex算法流程圖Fig.1 Flowchart of optimizing Retinex algorithm
具體步驟如下:
(1)選取合適的尺度參數(shù)和模板大小,由式(4)生成高斯函數(shù)。
(2)將有霧圖像由格式轉(zhuǎn)化為格式。
(3)根據(jù)優(yōu)化的Retinex算法,對亮度分量進行對數(shù)運算得到亮度分量,將帶入式(3)與生成的高斯函數(shù)進行卷積運算,再取對數(shù)得到亮度,將亮度和進行相加減得到去霧后的亮度分量。
(4)色調(diào)、飽和度保持不變,并將、及由格式轉(zhuǎn)為格式,完成圖像去霧過程。
中值濾波通過去除一些離散的噪點,使圖像的像素更接近于實際值,在去除噪聲的同時,保護圖像的邊緣,使圖像更加清晰。算法在硬件上實現(xiàn)也比較簡單,為了提高運行效率,采用流水線式的排序得到3×3矩陣,且通過對每一行的排序、篩選,就可篩選得到中值。
圖像二值化是將圖像的像素點設為最大或最小的值,從而將整個圖像轉(zhuǎn)換為黑白圖像。在實時的圖像處理中,二值化占據(jù)重要的位置,圖像的特征只與0或255的像素值相關,因此處理起來更容易,數(shù)據(jù)處理量也大大減少。為了得到一個好的二值化圖像,定義一個閾值,如果大于或等于閾值,則指定邊界并以灰色值255表示。如果小于閾值,則在指定邊界外并用灰色值0表示。選擇閾值時,手動選擇以提高計算速度。
腐蝕和膨脹屬于形態(tài)學算法,兩者相互獨立、也相輔相成。前者是將邊界向內(nèi)收縮,消除小且無意義的點;后者是使邊界向外部擴張,填補一些圖像中的空洞。都是通過構(gòu)造結(jié)構(gòu)元素,使之掃描圖像中的每一個像素點,進行“與”或者“或”操作,最終得到減小或者擴大的二值圖像。
邊緣是圖像的基本特征,是一組在圖像中灰色值急劇變化的像素。Sobel邊緣檢測是離散差分算子用來計算圖像亮度函數(shù)的灰色近似值。
硬件平臺是基于Zynq-7020的開發(fā)板,采用ARM+FPGA獨特的架構(gòu)方式完成霧霾天氣下監(jiān)控系統(tǒng)中的車輛實時車牌識別系統(tǒng)。在這個系統(tǒng)中,用Ov5640攝像頭采集數(shù)據(jù)作為圖像數(shù)據(jù)的輸入;對數(shù)運算、顏色空間轉(zhuǎn)換、加減法器、IP核初始化以及控制在PS端進行;卷積運算以及各種并行計算將在PL中進行。研究后得到的系統(tǒng)的總體架構(gòu)框圖如圖2所示。
圖2 總體系統(tǒng)架構(gòu)框圖Fig.2 Block diagram of overall system architecture
在PS端配置攝像頭,SCCB端口通過EMIO連接至PS端,在PS端驅(qū)動攝像頭;攝像頭的圖像采集是自定義的IP核,以及相關的圖像處理算法都封裝為IP核,方便后期設計時的思路能夠更加清晰;將采集的圖像在PS端進行顏色空間的轉(zhuǎn)換,通過HP接口與AXI-Smart互連進行數(shù)據(jù)傳輸?shù)絇L端的圖像處理模塊進行圖像去霧以及車牌識別;將處理后的數(shù)據(jù)通過Xilinx官方提供的Video in to AXI4-Stream IP核轉(zhuǎn)換成AXI4-Stream IP格式的數(shù)據(jù)流,再通過VDMA的寫通道轉(zhuǎn)成AXI4 Memory Map格式,并寫入DDR存儲器中。DDR中的數(shù)據(jù)讀取和存儲是通過AXI-HP端口與AXI-Smart互連、且后續(xù)與VDMA連接,相較于其他端口可更加高效地訪問DDR3。將從DDR3中讀取圖像數(shù)據(jù)傳輸給AXI4-Stream to Video Out IP核。PS端提供的系統(tǒng)時鐘通過GP接口和AXI-Interconnect IP核相連,而后再提供給VDMA、VTC和動態(tài)時鐘IP核。AXI4-Stream to Video Out IP核在VTC IP核的控制下,將AXI4-Stream格式的圖像數(shù)據(jù)轉(zhuǎn)化為視頻圖像輸出數(shù)據(jù)格式RGB888,而在將要輸出的數(shù)據(jù)與DVI IP核相連后,就通過HDMI接口連接到顯示屏,實時顯示處理結(jié)果。
實驗中硬件平臺使用的是基于Zynq-7020的正點原子開發(fā)板領航者ZYNQ,CPU內(nèi)核頻率為766 MHz,邏輯單元為85 k,1 GB的DDR3,用Xilinx公司提供的Vivado 2018.3進行編譯下載。
為了驗證優(yōu)化后的Retinex算法的性能,用Zynq-7020實現(xiàn)本文優(yōu)化方法與在PC(Core i59300H,2.4 GHz主頻,8 G內(nèi)存,Matlab2014a)實現(xiàn)的傳統(tǒng)Retinex算法進行性能的比較。為保證比較的有效性,取40,選擇101×101的高斯模板。
用查找表(LUT)、查找表RAM(LUTRAM)、BRAM、DSP等指標來顯示PL端FPGA的資源消耗。表1為FPGA的資源占用率。
表1 FPGA資源占用表Tab.1 FPGA resources occupation table
當只是人為主觀地評判圖像去霧效果的好壞時,往往具有差異性。因此,需要用一些客觀的指標去判斷處理效果的好壞,這里用峰值信噪比、信息熵、運行時間三個指標作為評判的依據(jù)。其中,峰值信噪比描述的是圖像信號最大功率與影響圖像信號的干擾性噪聲功率的比值。信息熵是描述圖像的細節(jié)內(nèi)容、包含的信息量,熵值的大小反映信息量的豐富程度。
圖3是圖像去霧的效果對比結(jié)果,對比試驗圖的峰值信噪比、信息熵、運行時間三個客觀依據(jù)指標見表2。
圖3 去霧效果對比圖Fig.3 Comparison of fog removal effects
表2 評價指標結(jié)果對比Tab.2 Comparison of evaluation indexes results
根據(jù)表1資源消耗的結(jié)果,LUT、LUTRAM、BRAM和DSP占的資源大概都是FPGA資源的20%左右,整個系統(tǒng)消耗Zynq-7020資源較少,成本也較低,能夠滿足實際工程的需求。
從圖3去霧效果對比圖可以看出,PC端實現(xiàn)的去霧算法與Zynq上實現(xiàn)優(yōu)化后的去霧算法都能較好地達到去霧效果。
根據(jù)表2的客觀指標依據(jù)對比,在PC端實現(xiàn)Retinex去霧算法和在Zynq上實現(xiàn)優(yōu)化Retinex去霧算法,兩者都能使峰值信噪比達到60 dB,能夠有效地減少霧霾所產(chǎn)生的噪聲,增強圖像的視覺清晰效果。相比于原始圖像,處理后的照片信息熵有所提高,證明圖像的細節(jié)以及豐富度有所提高。無論是在PC端、還是在Zynq上,峰值信噪比和信息熵都能得到較為接近的結(jié)果,處理水平也不相上下,但是在運行時間上,Zynq上的速度相比于PC端提高了33倍,能夠達到27幀/s以上的實時處理速度。
實驗結(jié)果表明,基于Zynq平臺能夠?qū)崿F(xiàn)圖像去霧和車牌識別,具體就是能夠快速、實時和準確地去霧以及識別出車牌號。
本系統(tǒng)主要由圖像采集模塊、圖像處理模塊和顯示模塊等構(gòu)成。該系統(tǒng)以Zynq-7020核心板為主控核心控制器,通過Ov5640攝像頭采集圖像數(shù)據(jù),將數(shù)據(jù)傳輸給去霧模塊進行實時去霧,然后把去霧后的圖像通過車牌識別模塊進行車牌識別,最后通過顯示模塊在顯示器上實時顯示。
以上設計實現(xiàn)了對有霧圖像的實時處理且取得了較好效果,同時對車牌識別也有著較高精準度,則可讓交通管理者能夠快速知道車輛車牌號,進而更快探查到車主信息。并且去霧模塊可以更加廣泛地應用于戶外監(jiān)控視頻系統(tǒng)中,為使用者帶來便利。