任夢潔,石勝斌
(陸軍炮兵防空兵學(xué)院 高過載彈藥制導(dǎo)控制與信息感知實(shí)驗(yàn)室,安徽 合肥 230031)
彈載電視成像技術(shù)是在彈載平臺(tái)下,以高性能的成像器件為基礎(chǔ),對(duì)地面、海面等各種場景下的目標(biāo)進(jìn)行偵察、定位和制導(dǎo)的技術(shù)。
由于軍事作戰(zhàn)中往往面臨嚴(yán)峻復(fù)雜的地理環(huán)境和惡劣的光照條件,在景物反射光線亮度分布不均或逆光情況下,成像器件對(duì)光線亮暗變化的動(dòng)態(tài)適應(yīng)性差,低照度情況下無法實(shí)現(xiàn)清晰化成像;由于成像器件的分辨率是固定的,當(dāng)彈目距離較遠(yuǎn)時(shí),目標(biāo)圖像信息較少,其特征得不到體現(xiàn),從而嚴(yán)重影響目標(biāo)的識(shí)別精度。
因此,筆者利用SSR算法對(duì)成像器件采集到的圖像進(jìn)行預(yù)處理,增強(qiáng)圖像中有用的信息,從而提高圖像的視覺效果,有利于后續(xù)的目標(biāo)檢測與跟蹤。由于SSR算法的實(shí)時(shí)性較差,傳統(tǒng)硬件處理芯片無法做到對(duì)視頻圖像的實(shí)時(shí)處理??紤]到嵌入式系統(tǒng)FPGA具有大規(guī)模并行處理能力,筆者將SSR圖像增強(qiáng)算法應(yīng)用于FPGA平臺(tái),構(gòu)建了一種基于Xilinx FPGA的彈載電視成像系統(tǒng)。
圖像增強(qiáng)主要分為基于空域的增強(qiáng)算法和基于頻域[1]的增強(qiáng)算法。如Singh等[2]和Lee等[3]提出的基于灰度水平來實(shí)現(xiàn)圖像的增強(qiáng)算法。這些算法可以提高亮度與對(duì)比度,但往往也會(huì)帶來信息丟失的問題,而且對(duì)于高動(dòng)態(tài)范圍的低照度圖像,這些算法不能壓縮動(dòng)態(tài)范圍。Land等[4]提出的基于Retinex理論的圖像增強(qiáng)方法具有動(dòng)態(tài)范圍壓縮大和顏色恒常性等特點(diǎn)。最經(jīng)典的Retinex算法是美國國家航空航天局的Jobson提出的單尺度Retinex(SSR)算法[5]。
Retinex理論[6-7]的基本思想是入射光決定了一幅圖像中的所有像素點(diǎn)的動(dòng)態(tài)范圍的大小,而物體自身所固有不變的反射系數(shù)決定了圖像的內(nèi)在固有屬性。所以將一幅圖像分為照度圖像與反射圖像兩部分,通過去除或者降低照度圖像對(duì)反射圖像的影響,就能得到圖像的本質(zhì)視覺感知,從而達(dá)到增強(qiáng)圖像的目的。根據(jù)Retinex理論,可以得到:
I(x,y)=R(x,y)·L(x,y)
(1)
式中:I為輸入圖像;R為反射圖像;L為照度圖像。
為了符合人眼在獲取信息的非線性特性與簡化運(yùn)算,將式(1)改為對(duì)數(shù)形式:
r(x,y)=i(x,y)-l(x,y)
(2)
式中:i(x,y)=log2I(x,y);r(x,y)=log2R(x,y);l(x,y)=log2L(x,y)。
反射圖像對(duì)應(yīng)于圖像的高頻部分,照度圖像對(duì)應(yīng)于圖像的低頻部分。因此,求取照度圖像L就是圖像I與一個(gè)低通濾波器進(jìn)行卷積的結(jié)果。在Retinex理論中,光照是分片平滑的,所以光照區(qū)域分得越準(zhǔn),區(qū)域內(nèi)細(xì)節(jié)平滑得越充分,照度圖像就會(huì)估計(jì)得越準(zhǔn)確,反射圖像也就越能反映圖像的本質(zhì)。因此,低通濾波器的選擇對(duì)于Retinex算法至關(guān)重要。SSR算法是最經(jīng)典的基于中心環(huán)繞的Retinex算法[8],它可以表示為
r(x,y)=i(x,y)-i(x,y)?G(x,y)
(3)
式中:?表示卷積符號(hào);G表示高斯函數(shù),
(4)
式中,σ為高斯函數(shù)的標(biāo)準(zhǔn)差,也是SSR的尺度參數(shù)。當(dāng)σ較小時(shí),陰暗部分的細(xì)節(jié)能夠得到較好的增強(qiáng),但顏色失真很嚴(yán)重;當(dāng)σ較大時(shí),顏色保真效果好,但動(dòng)態(tài)壓縮能力變差,細(xì)節(jié)模糊。因此在單尺度Retinex算法中,需要選取一個(gè)合適的σ[9],使得圖像的細(xì)節(jié)得到增強(qiáng)的同時(shí),圖像的顏色失真程度低。
為了確定Retinex算法的尺度值,對(duì)兩組圖像進(jìn)行分析,圖1為低照度圖像,圖2為正常光照下的霧天圖像。選取了σ=3~100,間隔為3的不同尺度,使用OpenCV軟件對(duì)不同尺度下的兩組圖像進(jìn)行圖像增強(qiáng),比較圖像增強(qiáng)效果。
從圖1、2可以看出,圖(a)為原始圖像,圖(b)的高斯濾波的σ=6,圖像的細(xì)節(jié)部分增強(qiáng)效果較好,但是圖像的顏色失真度比較高。圖(c)的高斯濾波的σ=27,圖像的細(xì)節(jié)部分增強(qiáng)效果較好,而且圖像的顏色保真度相對(duì)來說也比較高。圖(d)的高斯濾波的σ=81,圖像的顏色保真度比較高,但是圖像的局部細(xì)節(jié)部分增強(qiáng)效果差。
通過以上的比較可以看出,在σ=27時(shí),圖像的動(dòng)態(tài)壓縮能力和顏色保真程度之間達(dá)到平衡。因此,在本實(shí)驗(yàn)中,取Retinex算法的尺度為27。
單尺度Retinex算法的實(shí)現(xiàn)使用了FPGA廠商Xilinx公司2012年發(fā)布的高層次綜合工具Vivado HLS,該工具突破了傳統(tǒng)上對(duì)FPGA的設(shè)計(jì)都是基于硬件描述語言的RTL級(jí)描述[10],可以實(shí)現(xiàn)直接使用C、C++以及System C 語言規(guī)范對(duì)賽靈思全可編程器件進(jìn)行編程,無需手動(dòng)創(chuàng)建RTL,從而可加速IP創(chuàng)建。另外,HLS包含大多數(shù)開源函數(shù)庫OpenCV圖像處理函數(shù),設(shè)計(jì)者可以輕松實(shí)現(xiàn)OpenCV C++視頻處理設(shè)計(jì)到RTL代碼的轉(zhuǎn)換,將其轉(zhuǎn)換為可以在ZYNQ實(shí)現(xiàn)的硬件加速器或者在FPGA上實(shí)現(xiàn)的實(shí)時(shí)硬件視頻處理單元[11]。
在FPGA上實(shí)現(xiàn)單尺度Retinex算法需要的基本流程為[12]:
1)從攝像頭中獲取圖像I(x,y),獲取圖像為彩色圖像,圖像每個(gè)像素的顏色分量為三通道8位的無符號(hào)整型,將圖像中每個(gè)像素的分量分別轉(zhuǎn)化為32位的浮點(diǎn)型,從而方便后續(xù)的對(duì)數(shù)處理。
2)計(jì)算高斯模板,對(duì)圖像I(x,y)進(jìn)行高斯濾波,得到圖像L(x,y),高斯濾波模塊的尺度σ=27。
3)將原圖像和高斯濾波后的圖像映射到對(duì)數(shù)域,得到i(x,y)和l(x,y);需要注意要將原圖像I(x,y)中的每個(gè)像素值加1,再轉(zhuǎn)換到對(duì)數(shù)域,防止當(dāng)圖像像素為0取對(duì)數(shù)出錯(cuò)。
4)根據(jù)式(2),計(jì)算得到r(x,y),即增強(qiáng)后的圖像,由于圖像是彩色圖像,因此每個(gè)通道均有一個(gè)r(x,y)。
5)對(duì)增強(qiáng)后的圖像進(jìn)行灰度拉伸,增強(qiáng)對(duì)比度,其中局部的對(duì)比度增強(qiáng)法的具體方法如下。
計(jì)算整張圖片的平均值m和方差s0;任取一個(gè)像素值g(x,y),計(jì)算以該點(diǎn)為中心的w鄰域的平均灰度值M和方差s,按照公式(5)進(jìn)行處理:
G(x,y)=M+c(k-1)[g(x,y)-M]
(5)
式中:k為比例系數(shù),k=s0/s;c為修正系數(shù),默認(rèn)情況下c=1,若系數(shù)c(k-1)>0,則將大于局部平均灰度的像素值放大,小于局部平均灰度的像素值減小,從而增強(qiáng)圖像的局部對(duì)比度。
在Retinex算法中,原始圖像通過高斯濾波器得到圖像的照射分量。因此高斯濾波在Retinex算法中十分重要。在此考慮對(duì)高斯濾波器進(jìn)行設(shè)計(jì),則可以大大降低算法的運(yùn)行時(shí)間,滿足實(shí)時(shí)處理的要求。筆者利用高斯濾波線性可分的特性,將二維高斯濾波器分解為一維行濾波器GaussFilter_H和一維列濾波器GaussFilter_V。先對(duì)圖像進(jìn)行橫向?yàn)V波,然后再進(jìn)行縱向?yàn)V波,如圖3所示。
在本模塊設(shè)計(jì)中,主要對(duì)函數(shù)內(nèi)部逐像素操作和函數(shù)任務(wù)層進(jìn)行流水線處理。
2.4.1 函數(shù)內(nèi)部流水線處理
由于濾波器需要對(duì)圖像進(jìn)行逐像素操作,因此首先對(duì)像素操作的for循環(huán)進(jìn)行流水線化,目標(biāo)初始間隔為1。
橫向/縱向?yàn)V波器for循環(huán)流水線優(yōu)化:
LOOP_HCVR:
for(HLS_SIZE_Ti=0; i LOOP_HCVC: for(HLS_SIZE_T j=0; j #pragma HLS LOOP_FLATTEN off #pragma HLS PIPELINE II=1 …… } } 在高斯縱向?yàn)V波器RTL模塊性能描述中,LOOP_VCVC循環(huán)的Pipelined顯示為yes,表示該循環(huán)模塊已經(jīng)按照要求流水線化了,并且達(dá)到了初始間隔II=1的目標(biāo)要求。 2.4.2 函數(shù)間流水線操作 高斯尺度空間建立模塊并行化設(shè)計(jì)主要包含兩個(gè)部分:高斯濾波器橫向?yàn)V波與縱向?yàn)V波間的并行化設(shè)計(jì)和各層高斯濾波間的并行化設(shè)計(jì)。 通過調(diào)用#pragma HLS DATAFLOW指令來完成。高斯濾波模塊的單幅圖像處理時(shí)間延遲為373 931個(gè)時(shí)鐘周期,遠(yuǎn)遠(yuǎn)小于高斯濾波模塊內(nèi)部各個(gè)子模塊時(shí)鐘延遲之和,因此各個(gè)子模塊之間實(shí)現(xiàn)了流水線處理,達(dá)到了并行處理的目的。 為驗(yàn)證本文算法的可行性,驗(yàn)證彈載環(huán)境下圖像的處理效果,選取多組低照度圖像進(jìn)行實(shí)驗(yàn)。由于傳統(tǒng)的彈載平臺(tái)是將采集圖像通過無線鏈路傳送到PC端進(jìn)行處理,因此對(duì)比經(jīng)過FPGA和PC處理后的圖像,如圖4、5所示。FPGA處理圖像的硬件平臺(tái)是Xilinx公司的Zedboard開發(fā)板,以XC7Z020-CLG400-1為核心處理器件。PC處理圖像的平臺(tái)是操作系統(tǒng)為Windows 8、CPU為2.7 GHz Intel酷睿i5,內(nèi)存為8 G的PC機(jī),運(yùn)行環(huán)境為OpenCV 2410。SSR的參數(shù)σ=27。 從圖4低照度圖像和圖5霧天圖像的處理結(jié)果可以看出,在尺度參數(shù)σ=27的SSR算法中,用OpenCV處理后的效果要優(yōu)于FPGA,主要體現(xiàn)在處理后的圖像顏色保真度較高,原因是OpenCV具有較強(qiáng)的浮點(diǎn)計(jì)算能力,因此在計(jì)算整幅圖像的均值、方差、映射到對(duì)數(shù)域等計(jì)算中基本沒有偏差,處理后的圖像顏色的保真度較高,比較接近真實(shí)圖像。但是FPGA在進(jìn)行浮點(diǎn)運(yùn)算時(shí)需要消耗大量的資源,因此一般通過定點(diǎn)運(yùn)算近似計(jì)算,在整幅圖像的均值、方差、映射到對(duì)數(shù)域等計(jì)算中都有一定程度的偏差,處理后的圖像顏色有一定程度的失真。但是OpenCV和FPGA處理后的圖像細(xì)節(jié)基本一致,處理后的圖像對(duì)比度都大大提升,因此FPGA處理后的圖像能夠達(dá)到效果。 本設(shè)計(jì)采用的是100 MHz的時(shí)鐘。輸入不同分辨率的圖片,將OpenCV和Vivado HLS進(jìn)行SSR處理時(shí)間進(jìn)行對(duì)比,對(duì)比結(jié)果如表1所示,表中時(shí)間均為連續(xù)處理10次之后的平均值。 表1 SSR算法處理時(shí)間對(duì)比 從計(jì)算時(shí)間上來看,處理同樣的一幅1 920×1 080的彩色圖像,在系統(tǒng)時(shí)鐘為100 MHz的FPGA上運(yùn)行用時(shí)大約比PC快了165倍;處理同樣的一幅752×480的彩色圖像,在FPGA上運(yùn)行用時(shí)大約比PC快了154倍;處理同樣的一幅512×512的彩色圖像,在FPGA上運(yùn)行用時(shí)大約比PC快了162倍。因此FPGA的處理速度遠(yuǎn)遠(yuǎn)高于PC機(jī),這也是將SSR算法移植到FPGA的意義所在。 本系統(tǒng)攝像頭采集圖像的分辨率為752×480,在處理一幅752×480的三通道彩色圖像時(shí),增加HLS指令優(yōu)化之后,除了DSP48E的利用率有一定程度的增加外,BRAM_18K、FF和LUT的資源利用率都有所下降,并且LUT的資源利用率從109%下降到75%,符合FPGA的資源利用率要求。 基于單尺度Retinex圖像增強(qiáng)的視頻圖像實(shí)時(shí)處理系統(tǒng)構(gòu)架如圖6所示[13]。采用CMOS圖像傳感器MT9V034采集視頻圖像大小為752×480的24位彩色圖像。在Xilinx Zedboard開發(fā)板上進(jìn)行實(shí)現(xiàn),該開發(fā)板搭載XC7Z020芯片,擴(kuò)展外設(shè)通過PMOD與攝像頭連接。 將采集到的視頻圖像轉(zhuǎn)化為AXI4-Stream類型傳輸?shù)絇L端(即FPGA),利用單尺度Retinex模塊進(jìn)行圖像增強(qiáng)處理,將處理后視頻圖像通過VDMA模塊傳輸?shù)絇S端(即ARM)的DDR3中進(jìn)行存儲(chǔ),其中DDR3作為圖像緩存使用,再將DDR3中的視頻圖像傳輸?shù)絇L端,選用ADV7511芯片將視頻圖像轉(zhuǎn)化為適合HDMI輸出的格式,并在顯示器上顯示出來。 利用攝像頭采集圖像,F(xiàn)PGA進(jìn)行Retinex圖像增強(qiáng)處理,處理后的圖像顯示到顯示器上。處理前和處理后的圖像如圖7所示。 比較處理前后的畫面,可以看出由于照度太低,圖7(a)的書籍和圖7(b)的窗戶灰度值很低,細(xì)節(jié)部分也看不清楚。經(jīng)過單尺度Retinex算法處理之后,圖7(c)中圖像的亮度增強(qiáng),書籍上的文字的輪廓也變得清晰起來,圖像顏色保真度也較高。圖7(d)中圖像的亮度也有很大程度的增強(qiáng),可以看清楚窗框的輪廓,并且圖像中的細(xì)節(jié)部分如窗戶上映出的窗簾和窗戶外的樹的輪廓都凸顯了出來。 計(jì)算增強(qiáng)后圖像的峰值信噪比,利用公式求出圖像像素的均方誤差: (6) 再利用公式求出處理后圖像的信噪比: (7) 通過計(jì)算求得第1幅處理后圖像的信噪比為28.880 5,第2幅處理后圖像的信噪比為28.899 1。因此該視頻圖像實(shí)時(shí)處理系統(tǒng)能滿足圖像增強(qiáng)的要求。 筆者構(gòu)建的基于Xilinx FPGA的彈載電視成像系統(tǒng),滿足了FPGA的資源利用率要求和彈載電視成像系統(tǒng)對(duì)幀率的要求,實(shí)現(xiàn)了對(duì)SSR圖像增強(qiáng)算法從PC軟件處理平臺(tái)向FPGA硬件處理平臺(tái)的移植。經(jīng)測試,由攝像機(jī)獲取的視頻流經(jīng)過筆者設(shè)計(jì)的SSR圖像增強(qiáng)視頻系統(tǒng),成功實(shí)時(shí)輸出了752×480的視頻流,經(jīng)過處理后的視頻圖像整體的對(duì)比度和動(dòng)態(tài)范圍有所提升,細(xì)節(jié)部分得到了增強(qiáng)。3 圖像增強(qiáng)視頻系統(tǒng)設(shè)計(jì)
3.1 靜態(tài)圖像處理效果比較
3.2 靜態(tài)圖像處理時(shí)間和資源利用率比較
3.3 動(dòng)態(tài)視頻圖像處理效果顯示
4 結(jié)束語