王 鵬,向厚振,張志杰
(中北大學(xué)信息與通信工程學(xué)院,山西 太原 030051)
通常情況下,對(duì)圖像的數(shù)字處理算法都是建立在馮諾依曼結(jié)構(gòu)的通用處理器的軟件上進(jìn)行,如果將其移植到幾十兆赫茲的微控制器運(yùn)行時(shí),運(yùn)行效果會(huì)非常不理想,根本無(wú)法達(dá)到實(shí)時(shí)處理的要求。隨著科技的發(fā)展,F(xiàn)PGA由于其高度的靈活性、現(xiàn)場(chǎng)可編程優(yōu)點(diǎn)以及高度的并行運(yùn)算能力,成為了工程師們?cè)O(shè)計(jì)的首選。利用FPGA的流水線操作可以解決數(shù)字信號(hào)處理時(shí)數(shù)據(jù)傳輸需要的高帶寬,利用其并行運(yùn)算提高運(yùn)算速度,尤其是其靈活性特點(diǎn)使得硬件實(shí)現(xiàn)的算法能夠支持大范圍數(shù)字信號(hào)處理應(yīng)用成為可能。
邊緣檢測(cè)在圖像處理領(lǐng)域有廣泛的應(yīng)用,Sobel算子屬于傳統(tǒng)邊緣檢測(cè)算子,對(duì)噪聲比較敏感,在硬件實(shí)現(xiàn)時(shí),效果并不理想,而高通濾波可以抑制低頻分量,凸顯邊緣,降低噪聲,因此,先對(duì)圖像進(jìn)行高通處理再進(jìn)行邊緣檢測(cè),可以獲得較好的效果。但缺點(diǎn)是兩種算法計(jì)算量都較大,消耗較多的硬件邏輯資源,造成浪費(fèi)??紤]到FPGA內(nèi)部構(gòu)造出的時(shí)序邏輯系統(tǒng),并非每個(gè)模塊都時(shí)刻在工作,而是依據(jù)邏輯功能要求,輪流工作[1],因此利用可重構(gòu)計(jì)算技術(shù)可以解決這樣的問(wèn)題。
依據(jù)以上論述而設(shè)計(jì)的邊緣檢測(cè)系統(tǒng),不僅提高芯片利用率,并且使得該算法系統(tǒng)易于擴(kuò)展,易于移植,擁有較好的性能效果。
早在20世紀(jì)60年代,可重構(gòu)計(jì)算技術(shù)已經(jīng)出現(xiàn),雖然比較粗糙,但為之后的研究奠定了基礎(chǔ)?;赟RAM的FPGA的出現(xiàn),使得可重構(gòu)計(jì)算技術(shù)得到更好的發(fā)展和應(yīng)用,并且使得傳統(tǒng)設(shè)計(jì)方法中隨著數(shù)字系統(tǒng)規(guī)模增大,單片F(xiàn)PGA資源利用率下降的問(wèn)題得到較好解決。
部分可重構(gòu)允許在不破壞FPGA其他資源繼續(xù)運(yùn)行的情況下聯(lián)機(jī)重配置FPGA的一部分,通過(guò)刪除在那一刻FPGA中沒(méi)有有效執(zhí)行的功能來(lái)提高有效的邏輯密度。
盡管基于SRAM的FPGA均可實(shí)現(xiàn)重構(gòu)功能,但是并非都可以實(shí)現(xiàn)動(dòng)態(tài)可重構(gòu)功能。Xilinx公司的Virtex-4系列芯片基于SRAM結(jié)構(gòu),且具有動(dòng)態(tài)重構(gòu)性能。本文使用該系列的SC4VSX25芯片,它內(nèi)部擁有1片32位MicroBlaze,4 個(gè) DCM 模塊,128 個(gè) Xtreme DSP Slice,9 個(gè)Bank,128個(gè)18 kbyte的Block RAM,23040個(gè)Logic Cells,10240個(gè) Slice,64 ×40 Array。
本文使用的CCD攝像機(jī)采集的視頻輸出信號(hào)是模擬信號(hào),要進(jìn)行進(jìn)一步處理,需要首先進(jìn)行A/D轉(zhuǎn)換。使用EDK工具中I2C核對(duì)TVP5150芯片配置,當(dāng)芯片上電工作時(shí),輸出的是 BT.656格式的視頻數(shù)據(jù),此時(shí)利用TVP5150的AVID管腳為高電平且VBLK管腳為低電平時(shí)輸出的視頻數(shù)據(jù)為有效數(shù)據(jù)的特點(diǎn),將1幀的576×720個(gè)有效灰度數(shù)據(jù)存入外部存儲(chǔ)器中。
Sobel算子的邊緣檢測(cè)程序比特流和高通濾波程序比特流分別存放在外部存儲(chǔ)器的的不同位置中,在嵌入式32位MicroBlaze控制下,從片外存儲(chǔ)器讀取配置數(shù)據(jù)寫(xiě)入內(nèi)部配置端口(ICAP),可以完成芯片的動(dòng)態(tài)重構(gòu)[2]。FPGA的系統(tǒng)架構(gòu)如圖1所示。
圖1 FPGA的系統(tǒng)架構(gòu)
在這個(gè)架構(gòu)中,硬件資源可分為兩部分:
1)動(dòng)態(tài)可重構(gòu)區(qū)域。高通濾波和邊緣檢測(cè)算法可以自動(dòng)在這里按照應(yīng)用要求重新配置。
2)靜態(tài)區(qū)域。包括32位的MicroBlaze,可重構(gòu)控制器,還有系統(tǒng)的其他部分。
其中,MicroBlaze充當(dāng)CPU,用于決定何時(shí)使用何種算法。可以利用Xilinx公司的EDK工具,生成MicroBlaze以及DDR控制器、DMA等資源,它們均通過(guò)OPB總線連接在一起,之后將EDK作為子模塊添加到ISE工程中[3]。DMA的作用是解放CPU,使得存儲(chǔ)在DDR中的圖像數(shù)據(jù),直接與動(dòng)態(tài)可重構(gòu)區(qū)域交互,以提高傳輸速度??芍貥?gòu)控制器主要負(fù)責(zé)將存儲(chǔ)在外部的比特流通過(guò)ICAP接口讀入內(nèi)部配置存儲(chǔ)單元。
對(duì)于動(dòng)態(tài)可重構(gòu)的模塊法和差別設(shè)計(jì)法,模塊法可以充分利用并行性特點(diǎn),且各模塊相互獨(dú)立便于優(yōu)化,提高整體性能和設(shè)計(jì)效率,因此選用模塊方法。需要注意的是,靜態(tài)模塊和動(dòng)態(tài)模塊之間不是相互獨(dú)立的,而是需要使用總線宏來(lái)進(jìn)行連接,以便各子模塊通信。
配置的流程如圖2所示。
圖2 配置的流程
CCD攝像機(jī)采集的數(shù)據(jù),通常情況有很多噪聲,而Sobel算子對(duì)噪聲比較敏感,如果不首先將這些噪聲濾除掉,勢(shì)必影響之后的檢測(cè)效果。雖然Sobel算子也具有一定的噪聲平滑作用,但是精度不高。
濾波算法一般都是用模板來(lái)進(jìn)行,而模板的尺寸均為奇數(shù),通常采用的是3×3,5×5,7×7。這里采用空間域3×3模板。所謂空間域?yàn)V波,就是將模板在待處理的原始圖像中逐點(diǎn)的滑動(dòng),預(yù)先定義的濾波器系數(shù)與濾波模板對(duì)應(yīng)的像素進(jìn)行特定的計(jì)算得出該點(diǎn)所需的響應(yīng)[4]。實(shí)現(xiàn)的步驟如圖3所示。
圖3 濾波算法實(shí)現(xiàn)步驟
這里所采用的高通濾波模板如圖4所示。
圖4 高通濾波模板
為了可以同時(shí)提取模板中的9個(gè)像素,本文采用了圖5所示的結(jié)構(gòu)。其中,每個(gè)FIFO使用的是片內(nèi)的BRAM,用CoreGenerator生成,容量為1 k×8 bit,存儲(chǔ)1行720個(gè)灰度數(shù)據(jù),SRi為8位的移位寄存器,用VHDL語(yǔ)言描述,這樣在FIFO和SR的輸出端口恰好構(gòu)成1個(gè)3×3的模板。值得注意的是,為了保證能夠有較穩(wěn)定的數(shù)據(jù),設(shè)置FIFO的讀時(shí)鐘較寫(xiě)時(shí)鐘晚半個(gè)周期。以上模板中的負(fù)數(shù),采用補(bǔ)碼方式進(jìn)行計(jì)算,并且預(yù)留進(jìn)位。經(jīng)過(guò)圖3的計(jì)算步驟,邊緣頻率分量得以保存[5]。
圖5 模板結(jié)構(gòu)
Sobel算子是通常用于水平和垂直邊緣的一個(gè)簡(jiǎn)單檢測(cè)子[6],能夠很好地處理灰度漸變且噪聲多的圖像。水平梯度Gx和垂直梯度Gy可以由下面公式計(jì)算得出
式中:S為強(qiáng)度,θ為方向。但在這里,只使用強(qiáng)度S。與高通部分相同的是,仍然要構(gòu)建3×3模板,只是模板內(nèi)系數(shù)不同,并且需要水平和垂直方向兩個(gè)模板分別對(duì)Gx和Gy進(jìn)行計(jì)算。詳細(xì)的構(gòu)建流程如圖6所示。
圖6 構(gòu)建流程圖
正如圖6所示,來(lái)自高通濾波器的數(shù)據(jù)流分別同時(shí)使用2個(gè)3×3模板進(jìn)行卷積處理,其中,Gx的模板如圖7所示,Gy的模板如圖8所示。
圖7 Gx的模板
圖8 Gy的模板
經(jīng)過(guò)運(yùn)算后的9個(gè)數(shù)據(jù)需要再經(jīng)過(guò)加法器(見(jiàn)圖9)求和,將和值送出,與Gy求得的和值進(jìn)行均方運(yùn)算。
圖9 加法器
對(duì)2個(gè)矩陣對(duì)應(yīng)像素求均方根,得到的數(shù)據(jù)即為該點(diǎn)的像素梯度強(qiáng)度值,最后判斷其與閾值的關(guān)系,滿足T1≤S≤T2,輸出235,否則輸出16。因?yàn)樵贐T.656格式中,色度信號(hào)被填充為128,代表無(wú)色度信號(hào),灰度信號(hào)被填充為16或235,分別代表黑色和白色??梢允褂肰HDL來(lái)構(gòu)造狀態(tài)機(jī),實(shí)現(xiàn)BT.656視頻格式,完成圖像在LCD上的顯示,亦可利用TVP5150的視頻輸出信號(hào),填充有效數(shù)據(jù),但需要注意時(shí)序問(wèn)題,否則會(huì)造成顯示的不同步。而閾值的選擇,需要根據(jù)不同背景不同光照來(lái)選擇。在這里,模板中的負(fù)數(shù),仍然采用補(bǔ)碼方式進(jìn)行計(jì)算,并且預(yù)留進(jìn)位。乘法器可以使用VHDL語(yǔ)言進(jìn)行編寫(xiě),也可以使用Xilinx自帶的CoreGenerator來(lái)生成,這里選擇后者。
當(dāng)然,由于Gx與Gy的計(jì)算方式僅僅是模板內(nèi)部系數(shù)不同,所以,可以在完成Gx結(jié)構(gòu)之后,將其復(fù)制并修改模板系數(shù)就可以完成Gy結(jié)構(gòu)。
本文采用合眾達(dá)公司的SEED-XDTK FPGA教學(xué)實(shí)驗(yàn)平臺(tái),截取視頻中一幅圖片,在LCD顯示器上顯示,實(shí)驗(yàn)結(jié)果如圖10所示。由圖10可見(jiàn),本文的設(shè)計(jì)初步達(dá)到要求,但與軟件處理的效果仍稍有差距。
本文首先利用Xilinx公司的EDK嵌入式開(kāi)發(fā)軟件完成了硬件平臺(tái)搭建,并將其作為子模塊嵌入到ISE工程中,之后,在ISE中完成算法模塊搭建,由于使用了大量FPGA自帶的硬件資源,避免了編寫(xiě)大量程序代碼,利用硬件平臺(tái)完成了高通濾波和Sobel算法的動(dòng)態(tài)重構(gòu),有效提高了硬件資源利用率并且方便算法擴(kuò)展,有較強(qiáng)的通用性和移植性。
[1]朱明程.FPGA動(dòng)態(tài)可重構(gòu)技術(shù)及其應(yīng)用[J].電子產(chǎn)品世界,2000(6):13-14.
[2]覃祥菊,朱明程,張?zhí)?FPGA動(dòng)態(tài)可重構(gòu)技術(shù)原理及實(shí)現(xiàn)方法分析[J]. 電子器件,2004,27(2):277-282.
[3]田耘,徐文波.Xilinx FPGA開(kāi)發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2011.
[4]趙磊.基于FPGA圖像增強(qiáng)技術(shù)的實(shí)現(xiàn)[D].昆明:昆明理工大學(xué),2008.
[5]王德勝,康令州.基于FPGA的實(shí)時(shí)圖像采集與預(yù)處理[J].電視技術(shù),2011,35(3):32-35.
[6]SONKA M,HLAVAC V,BOYLE R.圖像處理、分析與機(jī)器視覺(jué)[M].3版.艾海舟,蘇延超,等,譯.北京:清華大學(xué)出版社,2011.