楊 光,李 晶,吳鐘建,陳咸志,代 俊,羅鎮(zhèn)寶,曾 軍,羅冠泰
(西南技術(shù)物理研究所,四川 成都610041)
責任編輯:時 雯
視頻增強的首要目標是處理視頻中的每場圖像,使其比原始圖像更適合于特定應用,比如目標識別、跟蹤等[1]。在圖像制導應用中,霧霾等惡劣天氣引起圖像質(zhì)量嚴重退化,形成低對比度的目標圖像,導致目標跟蹤不穩(wěn)定,致使制導武器偏離目標。圖像實時增強技術(shù)作為提高圖像質(zhì)量的手段,對其研究具有重大的工程價值和現(xiàn)實意義。一般情況下,不同的增強算法的應用領域不盡相同,在圖像光照反差較大場合,Retinex算法可發(fā)揮較好的作用,但是戰(zhàn)場環(huán)境復雜多變,增強算法不能局限于某種特殊的場合,因此目標跟蹤對增強算法的魯棒性提出更高要求[2]。一些基于物理模型的圖像恢復算法增強效果通??梢詽M足跟蹤需求,但是算法的實時性往往不能達標,甚至存在某些場的處理時間高于單場周期的現(xiàn)象,對目標跟蹤性能造成惡劣影響[3]。
基于局部直方圖均衡的對比度增強方法具有自適應好、魯棒性強等特點,廣泛應用于圖像增強領域。Tom等人于1982年提出的自適應直方圖均衡算法[4](Adaptive Histogram Equalization,AHE),根據(jù)圖像局部特征計算灰度變換函數(shù),克服了全局直方圖均衡難以適應局部灰度分布的缺陷,對比度增強效果較好,但過高的時間復雜度使其難以應用于實時增強場合;針對AHE算法執(zhí)行時間較長問題,Zimmerman等人于提出子塊非重疊自適應直方圖均衡算法(Non-Overlapped Sub-Block Adaptive Histogram Equalization,NSAHE),可以有效降低AHE算法的時間復雜度,但各子塊灰度分布不均勻?qū)е庐a(chǎn)生方塊效應,對目標識別造成很大干擾[5];針對于NSAHE算法的塊效應以及AHE算法的局部可能出現(xiàn)過增強問題,Zuiderveld等人于1994年提出限制對比度自適應圖像增強算法(Contrast Limited Adaptive Histogram Equalization,CLAHE),將圖像劃分為非重疊子塊處理,大大降低了算法時間復雜度,通過對比度限制手段有效避免圖像過度增強,保證圖像局部具有較高的動態(tài)范圍[6]。CLAHE算法首先將子塊直方圖中大于截斷門限值的像素重新分散到其他灰度級上,然后計算子塊直方圖查找表,最后通過雙線性插值完成整幅圖像的像素映射、加權(quán)處理。CLAHE算法具有計算簡單、易于并行的特點,結(jié)合FPGA并行處理優(yōu)勢,本文利用視頻相鄰兩場直方圖的高度相似性特點,采用直方圖邊計算邊查找的處理方式,簡化CLAHE算法架構(gòu),降低邏輯設計復雜度,并在FPGA視頻圖像處理平臺上硬件實現(xiàn),提高跟蹤系統(tǒng)整體的實時性和穩(wěn)定性。
CLAHE算法起初僅用于醫(yī)學圖像處理,隨后發(fā)現(xiàn)該算法可以很大程度提高低對比度圖像的結(jié)構(gòu)層次,也可以配合其他手段廣泛應用于圖像去霧領域。
AHE算法中的過增強問題可通過限制各子塊增強程度來解決,這些子塊的直方圖中通常擁有多個尖峰,即有很多像素存在于單一灰度級上。CLAHE算法設置子塊直方圖單一灰度級擁有像素個數(shù)的上限,將超出上限的像素均勻分配到其他灰度級上面,降低直方圖映射函數(shù)的斜率,限制對比度增強程度,解決AHE算法的過增強問題[6]。
CLAHE算法將圖像分為非重疊子塊處理,這種分塊方式會導致子塊邊界區(qū)域灰度分布不均勻,在視覺上表現(xiàn)為方塊效應,一般采用低通平滑方法消除方塊效應,CLAHE采用雙線性插值平滑策略,以每個子塊的中心像素作為參考點,處理除參考點意外剩余像素,解決灰度間斷問題,獲得較為平滑的圖像效果。
CLAHE算法是一種典型的局部直方圖均衡算法,步驟如下:
1)圖像分塊。圖像劃分為尺寸相同的非重疊子圖像(子塊),每個子圖像含有M個像素。
2)直方圖計算。子塊直方圖用Hi,j(k)表示,k表示像素灰度級,取值范圍為[0,N-1],N為可能出現(xiàn)的灰度級數(shù),對于8 bit灰度圖像,N等于256;i,j分別表示圖像分塊后子圖像的行數(shù)和列數(shù)。
3)門限值計算。式(1)用來計算子塊直方圖單個灰度級的截斷門限值
式中:參數(shù)smax為最大斜率(累加直方圖的最大斜率),它與對比度增強程度成正比;smax取值為1到4之間的整數(shù);參數(shù)α稱為截斷系數(shù),它的取值范圍是[0,100]。當α=0時,β取得最小值M/N;當α=100時,β取得最大值smaxM/N,此時對比度拉伸效果最明顯,超出門限的像素個數(shù)存入excess變量中。
4)像素重分配。使用β對每個子塊的直方圖Hi,j(k)進行削減,將削減下來的像素重新分配到子塊直方圖未飽和(即灰度級上像素個數(shù)小于截斷門限)的灰度級中,直至將所有被削減的像素分配完畢,并用Fi,j(k)表示Hi,j(k)經(jīng)重新分配處理后的結(jié)果。
5)直方圖均衡。利用Fi,j(k)計算最終的直方圖均衡映射,均衡結(jié)果用Ci,j(k)。
6)像素重構(gòu)。根據(jù)Ci,j(k)得到各子塊中心像素的灰度值,以它們?yōu)閰⒖键c,采用雙線性插值策略計算圖像中其余各點的灰度值,重構(gòu)示意圖如圖1所示,圖1b是圖1a中第j-1行至第j行、第i-1列至第i列圖像局部的放大,位于1象限的點p為待增強像素,根據(jù)p點和參考點位置關(guān)系確定權(quán)值,加權(quán)獲得最終處理結(jié)果,見式(2)[7-8]
式中:Pold為增強前的像素;fi,j為子塊直方圖映射;Pnew為增強后的像素。
圖1 CLAHE算法像素重構(gòu)示意圖
在深入理解CLAHE算法原理之后,采用D觸發(fā)器陣列存儲直方圖查找表,方便數(shù)據(jù)讀寫操作,然而經(jīng)過資源分析后,發(fā)現(xiàn)此方案不可行。為此需要一種切實可行的優(yōu)化設計方案,在滿足圖像實時增強指標的基礎上實現(xiàn)資源優(yōu)化。本文選擇片上的BRAM(Block RAM)資源替代D觸發(fā)器陣列存儲結(jié)構(gòu)的優(yōu)化方案,雖然此方案對RAM讀寫時序要求較高,但是可以節(jié)省更多的邏輯資源。
對于256×256×8 bit的灰度圖像,CLAHE算法子塊大小設置為64×64(共16個子塊),截斷門限為β,下文分析FPGA資源詳細占用。
BRAM資源占用情況為:
統(tǒng)計RAM,根據(jù)截斷門限β設置數(shù)據(jù)寬度,地址寬度等于輸入圖像位數(shù)。
查找RAM,數(shù)據(jù)寬度與地址寬度均等于輸入圖像位數(shù)。
綜上所述,每個統(tǒng)計RAM占用資源為26(23等于512 bit,每個查找RAM占用資源為28(23等于2 kbit,統(tǒng)計RAM和查找RAM共計32個,需要32個M18K(M18K為V5系列FPGA可配置的最小容量BRAM單元)。
乘法器IP核中,權(quán)重計算需要4個乘法器、加權(quán)累加需要4個乘法器,乘法器IP核通過FPGA片上的DSP48E Slice配置,共需要8個DSP48E Slice,不占用額外的邏輯資源。
DCM(Digital Clock Manager):數(shù)字時鐘管理器,提供數(shù)據(jù)處理時鐘和RAM讀寫時鐘。
本文采用統(tǒng)計存儲模塊和查找存儲模塊(簡稱統(tǒng)計RAM和查找RAM)雙存儲架構(gòu),采用直方圖邊統(tǒng)計邊查找的工作模式,即場正程計算統(tǒng)計直方圖同時執(zhí)行像素增強,場逆程計算查找直方圖同時執(zhí)行RAM清零處理,形成流水處理方式,確保輸入像素在兩個數(shù)據(jù)時鐘周期增強后輸出。
如圖2所示,整個系統(tǒng)分為4個模塊:統(tǒng)計RAM、查找RAM、統(tǒng)計計算模塊和雙線性插值模塊。單個像素流水處理時間為兩個時鐘周期,第一個時鐘周期從查找RAM讀取采樣數(shù)據(jù),第二時鐘周期利用采樣數(shù)據(jù)以雙線性插值方式進行像素重構(gòu),同時讀取下一個待重構(gòu)像素的采樣數(shù)據(jù)。
工作數(shù)據(jù)流如下:
第n場場正程期間,輸入像素進入統(tǒng)計RAM和查找RAM,分別直方圖統(tǒng)計計算和直方圖查找數(shù)據(jù)采樣,下一個時鐘根據(jù)查找RAM的采樣數(shù)據(jù)以雙線性插值方式進行像素重構(gòu),同時讀取下一個待重構(gòu)像素的采樣數(shù)據(jù),單個像素流水處理時間為兩個時鐘周期;第n場場消隱期間,首先將查找RAM清零,統(tǒng)計計算模塊根據(jù)統(tǒng)計存儲模塊生成查找直方圖映射,然后將映射寫到第n+1場的查找RAM,最后將統(tǒng)計RAM清零,等待第n+1場輸入像素來臨。
圖2 系統(tǒng)框圖
1)存儲模塊(統(tǒng)計RAM和查找RAM)
在場正程行有效期間,在RAM讀寫時鐘(數(shù)據(jù)時鐘二倍頻)上升沿,以輸入像素灰度值作為統(tǒng)計RAM的讀寫地址,讀出統(tǒng)計RAM數(shù)據(jù),在下一個時鐘上升沿,如果讀出數(shù)據(jù)小于第1章所述的截斷門限,將讀出的數(shù)據(jù)加一重新寫入統(tǒng)計RAM中,如果讀出數(shù)據(jù)等于截斷門限,統(tǒng)計RAM內(nèi)容保持不變,將超出的像素個數(shù)統(tǒng)計到第二章所述的excess變量中,等待統(tǒng)計計算模塊進行像素重分配處理;與此同時,根據(jù)輸入像素灰度值及行列計數(shù)(灰度值作為查找RAM度地址、行列計數(shù)使能相應的查找RAM進行采樣),從查找RAM中讀出映射灰度值,然后送入雙線性插值模塊處理。
在場消隱期間,首先將查找RAM清零,然后將excess變量中的超出門限的像素均勻分配到其余灰度級上,再進行直方圖正規(guī)化處理,將結(jié)果寫入查找RAM,最后將統(tǒng)計RAM清零,至此單場圖像處理結(jié)束。
2)統(tǒng)計直方圖計算模塊
統(tǒng)計直方圖計算架構(gòu)如圖3所示,該模塊由像素重分配模塊和直方圖累加模塊構(gòu)成,模塊內(nèi)子塊并行處理,互不影響,當所有子塊的像素分配標志位拉高時,直方圖累加模塊開始工作。
圖3 統(tǒng)計直方圖計算模塊框圖
像素重分配模塊:CLAHE算法在像素重分配以1為步長,這種分配方式會延長單場圖像FPGA處理流水時間,為此提出一種新的像素分配策略,將excess變量與灰度級個數(shù)(對于8 bit灰度圖像,擁有256個灰度級)作商,得到excess_avr變量,以excess_avr作為分配步長,將excess變量中的像素分配到統(tǒng)計RAM中,通過這樣的思路可提高算法執(zhí)行的效率,為其他模塊處理提供一定的時間余量。
直方圖累加模塊:先讀取統(tǒng)計RAM中數(shù)據(jù)進行累加,然后實施直方圖映射正規(guī)化操作,避免將較大的數(shù)據(jù)寫入查找RAM,需要減少查找RAM的數(shù)據(jù)寬度,防止占用過多的RAM資源(即將查找灰度值映射至[0,2n-1],其中n為圖像位數(shù)),最后將正規(guī)化映射結(jié)果寫入查找RAM。
3)雙線性插值模塊
雙線性插值模塊從查找RAM獲取采樣數(shù)據(jù),模塊涉及數(shù)據(jù)選取、權(quán)值計算、插值規(guī)則選擇、加權(quán)乘累加多個操作,權(quán)重、乘累加運算中還涉及多位乘法操作,導致該模塊無法在一個時鐘周期內(nèi)完成,為此調(diào)用乘法器IP核、設計二倍頻(輸入數(shù)據(jù)時鐘頻率的二倍)狀態(tài)機(四個狀態(tài)),將處理時間壓縮在一個時鐘以內(nèi),狀態(tài)機說明如下:狀態(tài)0表示讀取采樣像素,同時計算權(quán)值,將采樣數(shù)據(jù)用狀態(tài)機時鐘延遲一拍,保證像素灰度值和權(quán)值的同步性;狀態(tài)1~3表示根據(jù)像素點的位置(1角落、2邊界、3內(nèi)部),選取不同的插值規(guī)則加權(quán)累加,像素增強后進入下一級處理,狀態(tài)機轉(zhuǎn)換流程如圖4所示。
圖4 雙線性插值模塊狀態(tài)機轉(zhuǎn)換圖
本文選用Intel Core4 Xeon CPU E5507,主頻為2.27 GHz,內(nèi)存為2.99 Gbyte的計算機,采用MATLAB 2007a、MOLDELSIM SE 6.5e和Xilinx開發(fā)軟件ISE12.4,所選圖像為256×256×8 bit灰度圖像,F(xiàn)PGA平臺輸入視頻為256×256×8 bit掛飛視頻,幀頻為50 f/s(幀/秒)。算法參數(shù)如下:CLAHE算法子塊大小為64×64,截斷門限設置為63。
硬件平臺采用的FPGA芯片是Xilinx公司Virtex-5系列XC5VSX50T,其總邏輯單元Total logic slice為8 160個,Total Block RAM為4 752 kbit,可配置成264個MK18,132個MK36。
首先利用MATLAB軟件將需要增強的圖像寫入文本文檔,然后在仿真Testbench中利用readmem系統(tǒng)函數(shù)將圖像讀到輸入像素緩存變量dat_mem中,再將像素按照數(shù)據(jù)時鐘和行場時序送給增強模塊,處理完成的像素返回給Testbench,在輸出使能信號out_en處在高電平時,利用fdisplay系統(tǒng)函數(shù)將增強后的像素寫入文本文檔,最后在MATLAB軟件上讀入圖像數(shù)據(jù),觀察增強效果。
如圖5所示為圖像第238行的實驗波形,數(shù)據(jù)時鐘是20 MHz的clk信號,第238行第一個像素灰度值datin為65,65作為讀地址從查找RAM讀出數(shù)據(jù)hist_acc_dato,再將hist_acc_dato送入雙線性插值模塊處理得到最后的增強結(jié)果dato等于39,整個圖像增強過程流水時間為兩個數(shù)據(jù)時鐘周期,即100 ns,完全保證了圖像增強的實時性。
圖5 CLAHE算法MODELSIM仿真圖(截圖)
如圖6所示,圖6a和圖6d分別以霧天都市和開發(fā)區(qū)圖像作為測試圖像,對比圖6b和圖6c、圖6e和圖6f以及表1中增強前后圖像客觀質(zhì)量的評價數(shù)據(jù),CLAHE算法MATLAB的串行實現(xiàn)和MODELSIM的并行實現(xiàn)獲得了相同的增強效果,經(jīng)過CLAHE增強算法處理,有效增強原圖像的對比度和紋理,增強后的圖像層次分明,顯示了較好的增強效果,為跟蹤器提供了較為清晰的圖像。
在Xilinx的XC5VSX50T FPGA平臺上,采用霧天采集的實時航拍視頻驗證CLAHE算法增強的實時性和可靠性。對比圖7中的增強效果,增強前圖像近處畫面模糊不清,圖像遠處畫面缺乏層次,丟失很多細節(jié),通過CLAHE算法增強處理后,圖像細節(jié)得到凸顯,整體畫面非常清晰,具有真實自然的視覺效果,保證圖像增強實時性的基礎上獲得良好的增強效果。
圖6 CLAHE算法增強效果
表1 增強前后圖像質(zhì)量客觀評價對比
圖7 CLAHE算法FPGA實現(xiàn)增強效果圖
本文以邏輯資源和BRAM資源較少的FPGA作為硬件平臺,以CLAHE算法為基礎實現(xiàn)視頻實時增強。結(jié)果表明,該方案對于對霧天不同退化程度的低照度實時視頻,能有效增強其對比度和局部細節(jié),在亮度、對比度和細節(jié)方面都能取得較好的視覺效果。
基于局部直方圖均衡的圖像增強FPGA實現(xiàn)方案具有自適應好、魯棒性強等優(yōu)點,因此該方法具有一定的通用性。利用視頻相鄰兩場的直方圖高度相似性特點,將CLAHE算法成功移植到FPGA硬件平臺,整場圖像增強處理流水時間僅為100 ns(兩個數(shù)據(jù)時鐘),為后續(xù)處理提供了充足的時間,提高了整個跟蹤系統(tǒng)的實時性和穩(wěn)定性。
[1]GONZALES R,WOODS R.Digital image processing[M].2nd ed.Beijing:Publishing House of Electronic Industry,2007:59-84.
[2]李建彬,韓軍,邱君華.基于Retinex的舊視頻序列增強算法[J].電視技術(shù),2011,35(5):21-24.
[3]TAN R.Visibility in bad weather from a single image[C]//Proc.IEEE Conference on Computer Vision and Pattern Recognition.Washington,DC:IEEE Computer Society,2008:2347-2354.
[4]TOM V,WOLFE G.Adaptive histogram equalization and its applications[C]//Proc.SPIE Application on Digital Image Processing IV.San Diego:SPIE Press,1982:204-209.
[5]ZIMMERMAN J,PIZER S.An evaluation of the effectiveness of adaptive histogram equalization for contrast enhancement[J].IEEE Trans.Medical Imaging,1988,7(4):304-312.
[6]ZUIDERVELD K.Contrast limited adaptive histogram equalization.graphics gems IV(Eds.)[M].MA:Academic Press,1994.
[7]周衛(wèi)星,廖歡.基于高頻強調(diào)濾波和CLAHE的霧天圖像增強算法[J].電視技術(shù),2010,34(7):38-40.
[8]KOKUFUTA K,MARUYAMA T.Real-time processing of contrast limited adaptive histogram equalization on FPGA[C]//Proc.International Conference on Field Programmable and Applications.Milano:IEEE Press,2010:155-158.