楊 碩,原彤彤,童志波
(中北大學(xué) 信息與通信工程學(xué)院,太原030051)
(中北大學(xué) 電子測(cè)試技術(shù)國(guó)防科技重點(diǎn)實(shí)驗(yàn)室,太原030051)
(中北大學(xué) 信息探測(cè)與處理山西省重點(diǎn)實(shí)驗(yàn)室,太原 030051)
在設(shè)計(jì)基于FPGA的數(shù)字圖像處理系統(tǒng)時(shí),有兩種主要的實(shí)現(xiàn)方式: 一種是傳統(tǒng)的基于硬件描述語(yǔ)言(HDL)的開(kāi)發(fā)方法,另一種是基于圖形化設(shè)計(jì)工具的實(shí)現(xiàn)方法[1-3].傳統(tǒng)的開(kāi)發(fā)方式采用層次化和模塊化的設(shè)計(jì)思路,通過(guò)編寫HDL代碼和調(diào)用IP核來(lái)描述處理過(guò)程.這種設(shè)計(jì)方法需要編寫大量代碼,并且工作量很大[4].調(diào)試時(shí)間長(zhǎng),重復(fù)勞動(dòng)嚴(yán)重,對(duì)算法處理模塊仿真的結(jié)果也只能是時(shí)鐘沿和海量的數(shù)字信息組成的時(shí)序,若要得到直觀的圖像處理結(jié)果,還需要進(jìn)行預(yù)存數(shù)據(jù)、虛擬數(shù)據(jù)傳輸接口、數(shù)據(jù)結(jié)果分析等后續(xù)工作,導(dǎo)致系統(tǒng)開(kāi)發(fā)周期大大延長(zhǎng).而圖形化編程方式的出現(xiàn)為FPGA設(shè)計(jì)提供了新的設(shè)計(jì)思路,這種方法使用人們熟悉的圖標(biāo)表達(dá)設(shè)計(jì)內(nèi)容,使用連線來(lái)表示子系統(tǒng)之間的互動(dòng)關(guān)系,開(kāi)發(fā)者可以通過(guò)直觀的可視化操作完成處理算法的搭建[5].相比傳統(tǒng)的開(kāi)發(fā)方式,圖形化編程簡(jiǎn)單直接,易于理解,由計(jì)算機(jī)負(fù)責(zé)對(duì)代碼的編寫,避免了人為錯(cuò)誤的引入,大大提升了開(kāi)發(fā)效率.
常用的圖形化編程工具包括NI公司的LabView、若貝公司的Robei、Altera公司的Dsp Builder和Xinlinx公司的System Generator等[6,7].基于這些開(kāi)發(fā)工具,國(guó)內(nèi)外對(duì)FPGA的圖形化編程有過(guò)很多較為深入的研究.比如: 高靜等通過(guò)LabVIEW圖形化編程實(shí)現(xiàn)了增量式數(shù)字PID控制算法[8];馬濤,陳娟等利用系統(tǒng)工具DSP Builder給出了數(shù)字下變頻器的FPGA設(shè)計(jì)方法[9].郭俊位等針對(duì)USDR軟件無(wú)線平臺(tái)基于simulink環(huán)境設(shè)計(jì)了一套FPGA圖形化設(shè)計(jì)工具為算法工程師掃除了硬件編程的障礙[10].本文基于System Generator工具,Sobel算子作為圖像邊緣檢測(cè)中最重要的算子之一,在機(jī)器學(xué)習(xí)、數(shù)字媒體、計(jì)算機(jī)視覺(jué)等信息科技領(lǐng)域起著舉足輕重的作用[11,12],以Sobel邊緣檢測(cè)算法為例,在Matlab/Simulink平臺(tái)搭建了數(shù)字圖像處理系統(tǒng),完成了該算法的圖形化建模及在線仿真并對(duì)系統(tǒng)進(jìn)行了功能驗(yàn)證和測(cè)試結(jié)果分析.
System Generator是Xinlinx公司推出的一款基于Matlab/simulink平臺(tái)的圖形化設(shè)計(jì)工具,目的是為了簡(jiǎn)化傳統(tǒng)的FPGA開(kāi)發(fā)流程.它為硬件設(shè)計(jì)提供了合適的數(shù)字圖像處理建模環(huán)境,可以使得基于FPGA的數(shù)字信號(hào)處理系統(tǒng)硬件的設(shè)計(jì)開(kāi)發(fā)變的簡(jiǎn)單快捷[13-15].System Generator可以看作是Matlab環(huán)境下的硬件設(shè)計(jì)工具包,內(nèi)部提供了豐富的子模塊,用戶只需通過(guò)拖拽和連接子模塊就可以搭建數(shù)字系統(tǒng),最后把模型化的設(shè)計(jì)結(jié)果通過(guò)編譯器直接轉(zhuǎn)化為硬件描述語(yǔ)言,再通過(guò)ISE軟件綜合、布線等過(guò)程即可完成算法模塊的硬件設(shè)計(jì).這樣的設(shè)計(jì)方法已在許多大型復(fù)雜的系統(tǒng)中體現(xiàn)出巨大的優(yōu)勢(shì)和強(qiáng)大的潛能,借助于這個(gè)高層次的圖形化設(shè)計(jì)工具,我們可以對(duì)數(shù)字信號(hào)的處理算法進(jìn)行系統(tǒng)建模并將圖形化的設(shè)計(jì)模型直接編譯為硬件設(shè)計(jì)結(jié)果,從而成功連接了高層次的算法設(shè)計(jì)與硬件描述工具.
圖像邊緣檢測(cè)是計(jì)算機(jī)視覺(jué)和數(shù)字圖像處理研究領(lǐng)域的基礎(chǔ)概念,邊緣指的是數(shù)字圖像矩陣中灰度急劇變化的邊界.它是圖像分析和理解的重要基礎(chǔ),如區(qū)分目標(biāo)與背景,分析目標(biāo)紋理特征和形狀特征[16].研究者們根據(jù)圖像邊緣處灰度值突變的特點(diǎn)提出了多種以一階導(dǎo)數(shù)為基礎(chǔ)的梯度算子.
索貝爾算子(Sobel operator)是邊緣檢測(cè)中常用的算子之一,分別為橫向和縱向,它們的模版分別為:
這種離散型的差分算子,對(duì)圖像的每個(gè)像素以檢測(cè)像素點(diǎn)為中心,考察其3×3領(lǐng)域內(nèi)像素灰度的加權(quán)差,根據(jù)該點(diǎn)是否處于極值狀態(tài)進(jìn)行邊緣檢測(cè),其本質(zhì)上是一種梯度的幅度,通過(guò)選取適當(dāng)?shù)拈T限,當(dāng)大于門限時(shí)判定為邊緣點(diǎn)[17].
其中,Gx表示基于橫向算子的濾波結(jié)果,Gy表示基于縱向算子的濾波結(jié)果.A表示由檢測(cè)到的元素周圍的3×3陣列中的所有元素組成的矩陣[18].
設(shè)A矩陣中處于3×3矩陣正中間的元素為g(x,y),則A可以表示為:
將式(3)分別帶入(1),(2)得:
圖像的每一個(gè)像素的梯度的大小可由以下公式計(jì)算.
如果梯度值G或者G2大于某一閾值則認(rèn)為該點(diǎn)屬于邊緣點(diǎn).
基于System Generator的Sobel邊緣檢測(cè)算法仿真系統(tǒng)模型如圖1所示.
圖1 Sobel邊緣檢測(cè)算法仿真系統(tǒng)模型
數(shù)據(jù)源模塊(Image_In_1D)是圖像數(shù)據(jù)的輸入模塊,通過(guò)調(diào)用Simulink中Souce目錄下的From Workspace模塊并加載Matlab程序來(lái)實(shí)現(xiàn),其功能是讀入圖像并將二維矩陣數(shù)據(jù)轉(zhuǎn)化一維數(shù)據(jù)作為系統(tǒng)的數(shù)據(jù)源輸入.
圖像顯示模塊(Image_out)是圖像數(shù)據(jù)的輸出模塊,通過(guò)調(diào)用Simulink中Souce目錄下的To Workspace模塊并加載Matlab程序來(lái)實(shí)現(xiàn),用于把算法模塊輸出的一維數(shù)據(jù)流重新組合為二維矩陣并顯示為圖像.
Sobel邊緣檢測(cè)模塊的處理模型如圖2: 圖像數(shù)據(jù)經(jīng)過(guò)三行緩存后同時(shí)通過(guò)X方向和Y方向兩個(gè)濾波器,在這兩個(gè)濾波器中完成卷積運(yùn)算,對(duì)二者的運(yùn)算結(jié)果平方后求和,再經(jīng)過(guò)閾值判斷變?yōu)槎祱D像.
圖2 Sobel邊緣檢測(cè)模塊的處理模型
圖2中3LineBuffer子模塊的功能是緩存三行圖像數(shù)據(jù)并同時(shí)輸出,這個(gè)過(guò)程通過(guò)調(diào)用雙口RAM資源來(lái)實(shí)現(xiàn),將一塊RAM資源分成大小相等的兩部分,低地址部分實(shí)現(xiàn)一行緩存,其輸出經(jīng)過(guò)高地址部分實(shí)現(xiàn)第二行緩存,如圖3.
XSobelFilter子系統(tǒng)如圖4,該子模塊實(shí)現(xiàn)的功能是計(jì)算式(4),其中,濾波系統(tǒng)的2倍運(yùn)算是通過(guò)移位來(lái)實(shí)現(xiàn)的,系統(tǒng)中T,T1,T2的作用是屏蔽掉懸空引腳的報(bào)錯(cuò)信息.YSobelFilter設(shè)計(jì)結(jié)構(gòu)與之類似.
其中,兩個(gè)濾波系統(tǒng)的2倍運(yùn)算是通過(guò)移位來(lái)實(shí)現(xiàn)的.閾值判決子系統(tǒng)如圖5,該子模塊實(shí)現(xiàn)的功能是根據(jù)預(yù)設(shè)的閾值將圖像二值化.
對(duì)系統(tǒng)進(jìn)行在線仿真得到原圖和邊緣檢測(cè)后的處理效果圖,由圖6與圖7,可見(jiàn)系統(tǒng)較好地完成了邊緣檢測(cè)的任務(wù).
將System Generator的設(shè)計(jì)結(jié)果編譯為硬件描述語(yǔ)言并在ISE軟件上建立工程,進(jìn)行綜合得到RTL級(jí)視圖.對(duì)比圖8的RTL級(jí)視圖和圖2的Sobel邊緣檢測(cè)模塊的處理模型,可以發(fā)現(xiàn)基于Syetem Generator的設(shè)計(jì)結(jié)果與ISE軟件的綜合結(jié)果在結(jié)構(gòu)上是完全一樣的,從而進(jìn)一步證明了設(shè)計(jì)的正確性.
基于Matlab環(huán)境仿真Sobel邊緣檢測(cè)算法可知:對(duì)一副300×246的圖像執(zhí)行一次Sobel邊緣檢測(cè)大約耗時(shí)0.007 206 s.而使用該算法模塊完成一次運(yùn)算需要約74 100(300×246+300)個(gè)時(shí)鐘周期,如果以50 M的時(shí)鐘作為驅(qū)動(dòng),耗時(shí)約0.001 482 s,即每秒可處理約674幀圖片,處理速度提高了約7倍.
以Spartan6系列csg324型號(hào)FPGA內(nèi)部擁有的資源情況為基準(zhǔn),考察該設(shè)計(jì)資源消耗情況可以發(fā)現(xiàn): 該算法模塊消耗較少的資源,這為后續(xù)實(shí)現(xiàn)更為復(fù)雜的算法留下了很大的空間.
圖3 三線緩存模塊
圖4 X方向Sobel濾波計(jì)算模塊
圖5 閾值判斷模塊
本文在Matlab/Simulink平臺(tái)上實(shí)現(xiàn)了基于System Generator的Sobel邊緣檢測(cè)算法的圖形化建模.實(shí)現(xiàn)了對(duì)該算法的在線仿真并將設(shè)計(jì)結(jié)果編譯為硬件描述語(yǔ)言(HDL).相比傳統(tǒng)的基于HDL語(yǔ)言的設(shè)計(jì)方案,在實(shí)現(xiàn)同樣功能的前提下,本設(shè)計(jì)極大的縮短了開(kāi)發(fā)周期并支持在線查看圖像處理結(jié)果.文章最后還對(duì)算法模塊的設(shè)計(jì)結(jié)果進(jìn)行了分析,討論了圖像的直觀處理結(jié)果、RTL級(jí)視圖、實(shí)際消耗資源以及運(yùn)行速度等情況.
圖6 處理前圖像
圖7 處理后圖像
圖8 RTL級(jí)視圖
表1 資源使用情況表