焦慧華
(瓊臺師范學(xué)院,海南 ???571127)
關(guān)鍵字:圖像增強(qiáng);FPGA ;直方圖均衡;實(shí)時處理
圖像增強(qiáng)是按特定的需要突出一幅圖像中的某些信息,同時削弱或去除某些不需要的信息的處理方法,也是提高圖像質(zhì)量的過程[1]。圖像增強(qiáng)的目的是使圖像的某些特性方面更加鮮明、突出,使處理后的圖像更適合人眼視覺特性或機(jī)器分析,以便于實(shí)現(xiàn)對圖像的更高級的處理和分析。
目前圖像增強(qiáng)處理的應(yīng)用已經(jīng)滲透到航空航天、軍事偵察、醫(yī)學(xué)診斷、衛(wèi)星圖片的處理等領(lǐng)域。如惡劣天氣下飛機(jī)的視景增強(qiáng)系統(tǒng),需要采用圖像增強(qiáng)處理方法克服因光線不足、沙塵、煙霧等原因帶來的圖像模糊,從而為飛行器提供可視化導(dǎo)航。還有對不同時間拍攝的同一地區(qū)的遙感圖片進(jìn)行增強(qiáng)處理,偵查是否有敵人軍事調(diào)動或軍事裝備及建筑出現(xiàn)。圖像增強(qiáng)技術(shù)的快速發(fā)展同它的廣泛應(yīng)用是分不開的,在未來社會中圖像增強(qiáng)技術(shù)將會發(fā)揮更為重要的作用。
直方圖描述了一幅圖像的概貌,簡單講,灰度級直方圖就是反映一幅圖像中灰度級與出現(xiàn)這種灰度的概率之間的關(guān)系圖。設(shè)變量R代表圖像中象素灰度級,在圖像中,象素的灰度等級可作歸一化處理,這樣,R的值將限定為0≤R≤ 1。對于一幅給定的圖像而言,每一個象素取得[0,1]區(qū)間內(nèi)的灰度級是隨機(jī)的,也就是說,R是一個隨機(jī)變量。假定對每一瞬間它們是連續(xù)的隨機(jī)變量,那么,就可以用概率密度函數(shù)來表示原始圖像的灰度分布[2]。如果用直角坐標(biāo)系中的橫軸代表灰度級R,用縱軸代表灰度級的概率密度函數(shù),這樣就可針對一幅圖像在這個坐標(biāo)系中作曲線來。這條曲線在概率論中就是分布密度曲線。不同灰度圖像的直方圖分布如圖1所示,其中,圖(a)圖像亮度很低,基本分不清其中的圖形信息,所以直方圖分布都偏向低的灰度;圖(b)圖像信息清晰,層次分明,所以直方圖分布比較均勻;圖(c)圖像偏亮,但是對比度很低,看不清圖像。其直方圖分布就是在比較窄的一條帶上。
圖1 灰度圖與灰度直方圖示意
對于實(shí)際灰度圖像而言,直方圖統(tǒng)計分布就是上述灰度概率密度函數(shù)的離散化。設(shè)圖像總的灰度等級為L,圖像F(X,Y)的總像素數(shù)為N。則圖像的灰度統(tǒng)計直方圖可以用下面離散函數(shù)表示 :
為了使設(shè)計達(dá)到實(shí)時圖像增強(qiáng)的要求,同時考慮到FPGA硬件特點(diǎn),設(shè)計中對算法進(jìn)行如下處理:
為了保證圖像的實(shí)時增強(qiáng),首先在接受圖像數(shù)據(jù)時,計算此場的直方圖,由于在FPGA內(nèi)計算小數(shù)通常比較復(fù)雜,而且特別消耗邏輯資源,對直方圖統(tǒng)計采取的優(yōu)化如下:
得到累加直方圖后,最后將對應(yīng)的累加直方圖轉(zhuǎn)換為直方圖映射關(guān)系表,轉(zhuǎn)換關(guān)系如下式所示:
由直方圖均衡算法原理,可將FPGA算法實(shí)現(xiàn)分為如下3個模塊:
1.直方圖統(tǒng)計模塊 2.直方圖累加模塊 3.直方圖映射模塊
視頻圖像處理時,在場有效期需完成直方圖的統(tǒng)計并存儲圖像數(shù)據(jù),場消隱期完成直方圖均衡化[5]。最后將存儲的圖像數(shù)據(jù)根據(jù)均衡化結(jié)果映射輸出得到增強(qiáng)圖像。根據(jù)視頻圖像相鄰兩幀直方圖的高度相似性特點(diǎn)對算法進(jìn)行改進(jìn),在實(shí)現(xiàn)視頻圖像直方圖均衡化算法時,將前一場圖像直方圖統(tǒng)計和均衡化結(jié)果作為當(dāng)前場圖像的映射數(shù)據(jù)輸出。以上方法避免了外部存儲器的頻繁讀寫操作,簡化了系統(tǒng)結(jié)構(gòu)和邏輯設(shè)計的復(fù)雜度,節(jié)省了處理器和存儲器存取數(shù)據(jù)時間,同時節(jié)約了視頻圖像處理系統(tǒng)存儲器部分的硬件成本。改進(jìn)算法的邏輯框圖如圖 2所示。
圖2 直方圖均衡算法邏輯框圖
首先由直方圖統(tǒng)計模塊統(tǒng)計完一場圖像的直方圖后,在場復(fù)位未到的時間段里生成直方圖均衡映射表,并對直方圖緩存雙端口RAM和直方圖雙端口RAM進(jìn)行清零,在采集完一幀圖像后剩余場消隱期的時間生成直方圖均衡映射表,映射表生成模塊時鐘為像素時鐘的2倍。設(shè)計中利用幀同步信號同步直方圖均衡映射表生成模塊,驅(qū)動時鐘為像素時鐘,在接受模塊統(tǒng)計完一幀圖像數(shù)據(jù)后發(fā)一脈沖通知直方圖均衡映射表生成模塊開始工作,直方圖均衡映射表生成模塊依次從0到255地址讀取直方圖雙端口RAM中的直方圖并累加存入均衡映射表中,讀完256個地址后生成直方圖均衡映射表,然后通知直方圖統(tǒng)計模塊對對直方圖緩存雙端口RAM和直方圖雙端口RAM進(jìn)行清零。經(jīng)過上述處理后,輸出的圖像數(shù)據(jù)就是已經(jīng)經(jīng)過直方圖均衡化后的圖像數(shù)據(jù),同時將視頻同步信號一起同步輸出。
上述FPGA直方圖均衡算法主要包括三個模塊:直方圖統(tǒng)計模塊、直方圖累加模塊和直方圖映射模塊。下面簡要介紹三個模塊的實(shí)現(xiàn)方法。
1.直方圖統(tǒng)計模塊的實(shí)現(xiàn)
按照優(yōu)化的算法的第一步是在FPGA中實(shí)現(xiàn)直方圖統(tǒng)計,通常在計算機(jī)或者DSP上實(shí)現(xiàn)時,我們會使用數(shù)組結(jié)構(gòu),但是在FPGA中定義數(shù)組是非常消耗資源的,尤其是當(dāng)數(shù)組成員的位寬很大時。而FPGA 器件提供了一個很好的結(jié)構(gòu),可以處理這類問題,就是Block RAM。在FPGA 器件上都集成了片內(nèi)存儲器,本設(shè)計把這種RAM設(shè)計成雙端口方式,如圖3所示,便于直方圖統(tǒng)計的實(shí)現(xiàn)。
圖3 直方圖緩存雙端口RAM
圖4 直方圖統(tǒng)計模塊實(shí)現(xiàn)結(jié)構(gòu)
直方圖統(tǒng)計要求對每個像素值出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計,因此可以設(shè)計一個256 × 18 bit的雙端口RAM作為直方圖寄存單元。將輸入的像素值作為雙端口RAM的寫入地址,每次對相同的像素出現(xiàn)的次數(shù)進(jìn)行加1,所以要在每次寫RAM之前首先將RAM中的暫存的數(shù)據(jù)讀出,并進(jìn)行加1處理,然后再寫入到RAM中。其實(shí)現(xiàn)的邏輯結(jié)構(gòu)如圖4所示。
圖中另外一個雙端口RAM2是用來保存直方圖最后統(tǒng)計結(jié)果的寄存器。
2.直方圖累加模塊的實(shí)現(xiàn)
當(dāng)直方圖統(tǒng)計結(jié)束后,需要對直方圖統(tǒng)計結(jié)果進(jìn)行累加求和。并將累計結(jié)果作為均衡化處理的依據(jù),所以需要將每次累加的和保存在另外一個雙端口RAM中。累加的過程是從上面直方圖統(tǒng)計模塊的雙端口RAM2中,依次讀出每個數(shù)據(jù),并進(jìn)行累加,累加結(jié)果同時存入雙端口RAM3中。累加操作是在場消隱期進(jìn)行,所以每次累加結(jié)束后要用場同步信號進(jìn)行復(fù)位。累加操作是由FPGA中的累加器實(shí)現(xiàn)。模塊的邏輯框圖如圖5所示。
3.直方圖映射模塊的實(shí)現(xiàn)
由前面算法優(yōu)化可知,在進(jìn)行直方圖映射之前需要對累加直方圖的結(jié)果進(jìn)行乘法和除法運(yùn)算。若直方圖均衡圖像大小為1024×768像素,而像素級數(shù)為256級。所以代入前面算法可知,要對直方圖累加結(jié)果乘256再除1024×768。經(jīng)過簡化可以將累加結(jié)果向低位移10位再除以3,得到的結(jié)果便是直方圖映射后的像素值。根據(jù)上述分析,直方圖映射模塊可以由如下模塊實(shí)現(xiàn),如圖6所示。
圖6 直方圖映射模塊實(shí)現(xiàn)結(jié)構(gòu)
本文采用VHDL設(shè)計完成各個模塊后,在Quartu II中進(jìn)行編譯,并下載在ALTERA的開發(fā)板中進(jìn)行實(shí)驗(yàn)驗(yàn)證,使用Quartus II中SignalTap II邏輯分析儀對直方圖數(shù)據(jù)和均衡表的數(shù)據(jù)進(jìn)行觀察,表明了進(jìn)行直方圖統(tǒng)計的過程及均衡后的結(jié)果,圖7為直方圖統(tǒng)計的采樣波形,其中zfram1out和zfram1為寫入直方圖雙端口RAM中的地址和數(shù)據(jù),由實(shí)際采樣數(shù)據(jù)可以看出,當(dāng)寫入地址為連續(xù)3個196時,寫入的數(shù)據(jù)在進(jìn)行遞增,表明直方圖統(tǒng)計正確。 zframo和zframout分別是寫入直方圖緩存中的數(shù)據(jù)和地址,在zframin灰度地址為197時,讀出的像素數(shù)zframi為2693,經(jīng)直方圖統(tǒng)計模塊加一后輸出zframo像素數(shù)為2694。說明直方圖統(tǒng)計正確。
圖7 SignalTap II直方圖統(tǒng)計過程
在算法仿真驗(yàn)證正確后,將主機(jī)顯卡實(shí)時送出一副1600×1200的圖像,刷新率設(shè)置為60HZ,并將輸出連接至開發(fā)板的DVI輸入端口,輸出DVI端口連接另一顯示器,圖8分別為原圖和經(jīng)FPGA直方圖均衡增強(qiáng)后效果圖,與原圖相比可以看出,直方圖均衡增強(qiáng)后的圖像展寬了頻帶,圖像的細(xì)節(jié)更加豐富。
圖8. 原圖和經(jīng)FPGA直方圖均衡增強(qiáng)后效果圖
通過上述的設(shè)計與驗(yàn)證,采用FPGA實(shí)現(xiàn)了實(shí)時圖像的直方圖增強(qiáng)。并且結(jié)合FPGA高速并行特性,設(shè)計了基于FPGA的視頻數(shù)據(jù)流的直方圖增強(qiáng)算法。目前該算法支持分辨率最高達(dá)到1600×1200的高分辨率實(shí)時視頻處理,處理速度在60幀/S以上,可以滿足高清視頻的實(shí)時增強(qiáng)處理要求。該直方圖增強(qiáng)方法特別適合于在低照度條件下的視頻增強(qiáng)處理,以便獲得實(shí)時的增強(qiáng)效果。