基于FPGA的圖像預處理系統
由于獲取圖像的工具或手段的影響,使獲取圖像無(wú)法完全體現原始圖像的全部信息。因此,對圖像進(jìn)行預處理就顯得非常重要。預處理的目的是改善圖像數據,抑制不需要的變形或者增強某些對于后續處理來(lái)說(shuō)比較重要的圖像特征。
通常根據預處理目的的不同,把預處理技術(shù)歸為圖像增強技術(shù)和圖像分割技術(shù)兩類(lèi)。圖像對比度處理是空間域圖像增強的一種方法。由于圖像灰度范圍狹窄會(huì )使圖像的對比度不理想,可用對比度增強技術(shù)來(lái)調整圖像灰度值的動(dòng)態(tài)范圍。
圖像處理通常采用軟件或者DSP(數字信號處理器)來(lái)實(shí)現。如果利用軟件實(shí)現,運行時(shí)會(huì )耗費較多的PC資源,而且算法越復雜時(shí)耗費的資源就越多,對于需要高速處理的情況就不適用了;而如果采用DSP來(lái)實(shí)現,提高并行性的同時(shí)指令執行速度必然會(huì )提高,較高的指令速度可能導致系統設計復雜化,并增加功耗和成本。新一代的FPGA集成了CPU或DSP內核,可以在一片FPGA上進(jìn)行軟硬件協(xié)同設計,為實(shí)現SOPC提供了強大的硬件支持。本文介紹的是利用FPGA并行處理和計算能力,以Altera FPGA Stratix EP1S40為系統控制的核心實(shí)現的SOPC。
系統硬件平臺
采用基于PCI總線(xiàn)的FPGA開(kāi)發(fā)平臺,結構如圖1所示。板上主要硬件資源有:PCI橋、FPGA、SRAM和SDRAM等其他外設。
圖1 基于PCI總線(xiàn)的FPGA開(kāi)發(fā)平臺
PCI橋采用PCI9656橋接芯片實(shí)現,用來(lái)連接PCI總線(xiàn)與32位/50MHz的板級局部總線(xiàn);FPGA包括41 250個(gè)邏輯單元,14個(gè)DSP模塊,112個(gè)嵌入式乘法器,4個(gè)增強型PLL(鎖相環(huán))和4個(gè)快速型PLL等邏輯資源;SDRAM用來(lái)存儲圖像數據。Avalon總線(xiàn)模塊完成整個(gè)片上可編程系統組件之間的互連。Avalon總線(xiàn)是SOPC設計中連接片上處理器和其他IP模塊的一種簡(jiǎn)單總線(xiàn)協(xié)議,規定了主、從構件之間的端口連接以及通信時(shí)序關(guān)系,SOPC Builder來(lái)完成整個(gè)系統(包括Avalon)模塊的生成和集成。豐富的板級資源可以滿(mǎn)足圖像的高速預處理需求。
系統工作原理
設計采用DMA方式快速傳輸圖像數據,這樣數據的傳輸和處理可以并行起來(lái),使得系統的運行效率大為提高。PC與PCI板卡之間建立軟件環(huán)境,在該環(huán)境下利用DMA通道把圖像數據從主機通過(guò)PCI總線(xiàn)、PCI橋、板級局部總線(xiàn)和Avalon總線(xiàn)傳到SDRAM存儲起來(lái),然后送入算法邏輯模塊進(jìn)行處理,處理完成后再把圖像數據存儲到SDRAM中,最后再用DMA通道把圖像處理結果傳送回主機。
建立片上系統中的關(guān)鍵模塊
本文設計的圖像對比度增強系統是建立在Stratix EP1S40基礎上的SOPC。該設計在Quartus II 5.0中利用SOPC Builder將系統的工作頻率設為50MHz,器件系列設為Stratix,調用已經(jīng)建立的IP模塊和算法邏輯模塊,并設置各個(gè)模塊的時(shí)鐘和基地址,配置生成片上系統。根據任務(wù)要求,SOPC結構框圖如圖2所示。
圖2 SOPC結構框圖
圖2中,Avalon總線(xiàn)接口分為主(Master)和從(Slave)兩類(lèi),前者具有相接的Avalon總線(xiàn)的控制權,后者是被動(dòng)的。自定制的Avalon從外設根據對Avalon總線(xiàn)操作方式的不同分為兩類(lèi):一類(lèi)是Avalon從(Slave)外設,只是作為Avalon總線(xiàn)的一個(gè)從元件來(lái)處理;另一類(lèi)是Avalon流模式從(Streaming Slave)外設,需要使用Avalon總線(xiàn)的流傳輸模式,外設的設計更復雜。
● 板級局部總線(xiàn)與Avalon總線(xiàn)橋之間的通信模塊
在板級局部總線(xiàn)與FPGA內部Avalon總線(xiàn)橋之間建立通信模塊。由于SOPC內部各模塊之間的邏輯連接是由Avalon總線(xiàn)完成的,所以可以從主機通過(guò)PCI總線(xiàn)和板級局部總線(xiàn)訪(fǎng)問(wèn)SOPC組件。該模塊作為Avalon總線(xiàn)的一個(gè)主控接口,對其他Avalon從外設和Avalon流模式從外設進(jìn)行訪(fǎng)問(wèn)和控制。
● 控制模塊
控制模塊的工作時(shí)鐘獨立于系統時(shí)鐘,如圖3所示。包括兩個(gè)模塊的設計:(1)用于對SDRAM存儲資源做合理分配的流模式存儲管理器模塊,它作為Avalon流模式從外設,讀寫(xiě)端口的數量可配置,這些讀寫(xiě)端口可以以流傳輸模式把圖像數據讀出或寫(xiě)入SDRAM。(2)存儲器控制模塊,它作為Avalon總線(xiàn)的另一主控接口,對作為Avalon總線(xiàn)從控接口的SDRAM控制器進(jìn)行控制。
圖3 控制模塊
● 圖像對比度增強算法及VHDL實(shí)現
在圖像對比度處理方法中,可以設計出不同的轉換函數。本系統是針對鋸齒形函數轉換設計的,鋸齒形轉換可以把幾段較窄灰度區間拉伸到較寬的灰度范圍內,這種處理可以把灰度變化較平緩的區域也較鮮明地顯示出來(lái),從而增強圖像中感興趣的特征。
該設計對一幀30082000像素、數據寬度為8位的灰度圖像進(jìn)行處理,圖像共有2000行、3008列像素點(diǎn),行和列均從0開(kāi)始計起。在系統時(shí)鐘上升沿、行有效信號與數據有效信號均有效時(shí),把圖像數據讀入進(jìn)來(lái),對其做相應處理。每個(gè)系統時(shí)鐘上升沿讀入一個(gè)圖像數據,在第N行像素點(diǎn)處理完后,第N+1行有效信號與數據有效信號必須同時(shí)有效才能繼續處理,在對第1999行、3007列像素點(diǎn)處理完畢后,行有效信號與數據有效信號置為無(wú)效,此時(shí)整幀圖像處理完畢。算法邏輯模塊中需要幀有效計數器和行有效計數器各一個(gè),分別用來(lái)對幀和行進(jìn)行計數,還需要一個(gè)像素計數器對某行像素做計數統計。由于該算法邏輯模塊是基于SOPC技術(shù),能夠在SOPC Builder工具中作為自定制模塊調用,需設置兩個(gè)寄存器,分別是幀有效計數寄存器和行有效計數寄存器,它們根據Avalon總線(xiàn)地址的不同,同時(shí)作為Avalon總線(xiàn)的讀或寫(xiě)寄存器,從而使自定義模塊可以和Avalon總線(xiàn)進(jìn)行通信。每輸入一個(gè)像素點(diǎn)判斷其灰度值滿(mǎn)足設置的哪個(gè)區間范圍并做相應轉換,從而實(shí)現一幀圖像的對比度增強處理。根據算法需求,采用VHDL語(yǔ)言對算法邏輯建模,并以Avalon總線(xiàn)從外設的方式在SOPC Builder 中調用。VHDL實(shí)現如下。
entity enhancement is
port (iLVAL : in std_logic;
iDVAL : in std_logic;
iFVAL : in std_logic := '1';
iCLK : in std_logic;
iDATA : in std_logic_vector(7 downto 0);
oLVAL : out std_logic; oDVAL : out std_logic;
oFVAL : out std_logic;
oDATA : out std_logic_vector (7 downto 0)
);
end enhancement;
這里iFVAL被置為“1”,說(shuō)明是對一幀圖像進(jìn)行處理;iDATA與oDATA是圖像輸入、輸出二進(jìn)制數據,寬度為8位。
圖像預處理系統的實(shí)現
用標準化硬件描述語(yǔ)言VHDL建立FPGA模塊實(shí)現。按照自頂向下的設計方法生成各設計階層,將設計任務(wù)分解為不同的功能元件,每個(gè)元件具有專(zhuān)門(mén)定義的輸入輸出端口并執行各自的邏輯功能。該SOPC設計通過(guò)以下步驟實(shí)現。
(1)利用SOPC Builder工具編譯生成用戶(hù)自定制模塊,調用已建立的IP模塊并設置參數,配置生成片上系統;
(2)在頂層VHDL文件中調用模塊并示例化,進(jìn)行信號連接;
(3)對整個(gè)系統進(jìn)行管腳等約束設置,全編譯并進(jìn)行行為和時(shí)序驗證;
(4)下載和硬件調試完成。
結束語(yǔ)
該系統對實(shí)驗室在光線(xiàn)較弱情況下所拍的一幀30082000灰度圖像進(jìn)行對比度增強處理,處理前后如圖4、5所示。在SOPC系統時(shí)鐘為50MHz時(shí),對于輸入大小為30082000像素點(diǎn)的灰度圖像,每一幀的處理時(shí)間為T(mén)=(1/(50106))30082000=0.120 32s。
圖4 原圖像
圖5 處理后圖像
而在3GHz Pentium 4、256MB內存的PC上通過(guò)Matlab用代碼實(shí)現則需0.9850s。該設計采用FPGA實(shí)現圖像預處理系統,與利用軟件處理圖像的方法比較起來(lái),可以更快速地實(shí)現對圖像的預處理。同時(shí)系統構成靈活,設計中模塊的可重復開(kāi)發(fā)性降低了生產(chǎn)成本、縮短了生產(chǎn)周期,提高了工作效率。
評論