基于FPGA器件的Sobel算法實(shí)現(xiàn)
0引言
邊緣檢測(cè)技術(shù)是圖像處理的一項(xiàng)基本技術(shù),在工業(yè)、航天、醫(yī)學(xué)、軍事等領(lǐng)域中有著廣泛的應(yīng)用。邊緣檢測(cè)算法的實(shí)現(xiàn)涉及復(fù)雜的計(jì)算步驟,故對(duì)處理速度有較高要求。采用FPGA器件實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)是一種純硬件的解決方案,該方案可以使系統(tǒng)具備較高的實(shí)時(shí)性,能比較好地解決軟件編程方式所導(dǎo)致的處理速度問(wèn)題。
1 Sobel算法
在眾多的圖像邊緣檢測(cè)算法中,Soble算法具有計(jì)算簡(jiǎn)便、檢測(cè)效果好等優(yōu)點(diǎn),是一種被廣泛應(yīng)用的算法。Sobel算法依據(jù)圖像邊緣的灰度值會(huì)產(chǎn)生突變的原理,來(lái)對(duì)像素的灰度值進(jìn)行處理。在圖1所示的3×3像素窗中,中間像素[i,j]為待檢測(cè)像素,Sobel算法分別對(duì)此像素窗進(jìn)行水平(H)、垂直(V)、左對(duì)角(L)、右對(duì)角(R)四個(gè)方向的灰度值濾波運(yùn)算,公式如下:
c=2。這里的H,V,L,R是為了計(jì)算梯度的大小和方向。梯度大小可由下式得到普遍估計(jì):
若此幅值大于給定的某閾值,則可判定像素點(diǎn)[i,j]為邊緣像素,否則為一般像素。梯度方向與四個(gè)濾波值中絕對(duì)值最大的方向一致。
2 系統(tǒng)設(shè)計(jì)
一個(gè)完整的圖像邊緣檢測(cè)系統(tǒng)主要包括以下三個(gè)功能模塊:像素窗生成模塊、邊緣檢測(cè)模塊以及輸出處理模塊,圖2所示是邊緣檢測(cè)系統(tǒng)示意圖。其中像素窗生成模塊主要負(fù)責(zé)生成供邊緣檢測(cè)模塊計(jì)算的3×3像素窗;邊緣檢測(cè)模塊采用Soble算法對(duì)此像素窗進(jìn)行處理,以判斷中心像素是否為邊緣像素;輸出處理模塊負(fù)責(zé)后續(xù)處理任務(wù)(如生成完整的邊緣圖像)。
2.1 系統(tǒng)設(shè)計(jì)思路
本文主要討論邊緣檢測(cè)模塊的設(shè)計(jì)。這里使用行為域建模的方式對(duì)系統(tǒng)進(jìn)行算法描述。該方法可以使系統(tǒng)行為與結(jié)構(gòu)相分離,設(shè)計(jì)者只需對(duì)系統(tǒng)的功能進(jìn)行算法描述而不必關(guān)心系統(tǒng)具體的硬件構(gòu)成方式。這種設(shè)計(jì)方法在設(shè)計(jì)過(guò)程中借鑒了軟件設(shè)計(jì)的靈活性?xún)?yōu)點(diǎn),而設(shè)計(jì)結(jié)果則是具有高運(yùn)算速度的硬件電路。
這種設(shè)計(jì)思路不必依次設(shè)計(jì)加法器、寄存器、比較器等功能單元。由于Sobel算法中的邊緣檢測(cè)主要包含兩個(gè)步驟:一是對(duì)像素窗進(jìn)行四個(gè)方向?yàn)V波;二是對(duì)濾波值進(jìn)行決斷。因此,可采用狀態(tài)機(jī)方式來(lái)描述系統(tǒng)功能。但這里需要三個(gè)狀態(tài):空閑態(tài)(IDLE)、濾波態(tài)(FILTER)和決斷態(tài)(JUDGE),圖3所示是其系統(tǒng)狀態(tài)圖。
圖3中的IDLE為邊緣檢測(cè)模塊默認(rèn)的初始狀態(tài),此狀態(tài)下不進(jìn)行任何處理動(dòng)作。如果模塊接收到有效的檢測(cè)啟動(dòng)信號(hào),則轉(zhuǎn)入FILTER狀態(tài)。在此狀態(tài)下,模塊對(duì)輸入的像素窗進(jìn)行四個(gè)方向的濾波處理。下一時(shí)鐘周期到來(lái)后則轉(zhuǎn)入JUDGE狀態(tài),此狀態(tài)下,模塊進(jìn)行邊緣判斷,并輸出相應(yīng)結(jié)果。經(jīng)過(guò)這樣一個(gè)過(guò)程后,即可完成一個(gè)像素窗的處理,之后,如果檢測(cè)啟動(dòng)信號(hào)繼續(xù)有效,則轉(zhuǎn)入FILTER狀態(tài)并處理下一個(gè)像素窗,否則轉(zhuǎn)入IDLE狀態(tài)待命。
2.2系統(tǒng)實(shí)體設(shè)計(jì)
依據(jù)上述設(shè)計(jì)思路,可以設(shè)計(jì)出如圖4所示的邊緣檢測(cè)模塊的頂層實(shí)體。其中START為來(lái)自外界的檢測(cè)啟動(dòng)信號(hào)輸入,用于啟動(dòng)邊緣檢測(cè);CLK為時(shí)鐘信號(hào)輸入,是狀態(tài)機(jī)的驅(qū)動(dòng)時(shí)鐘;數(shù)據(jù)輸入端口P0~P7分別接收像素窗中相應(yīng)像素的8位灰度值;POUT為檢測(cè)結(jié)果灰度輸出,輸出0表示非邊緣像素,輸出255表示邊緣像素;DIR為方向輸出;FINISH為檢測(cè)結(jié)束信號(hào)輸出,用于配合其它模塊協(xié)同工作。
2.3系統(tǒng)行為描述
由于設(shè)計(jì)采用行為建模,因此,系統(tǒng)描述不涉及任何硬件器件以及連接相關(guān),只需在結(jié)構(gòu)體中設(shè)置兩個(gè)進(jìn)程來(lái)描述狀態(tài)機(jī),并定義相關(guān)變量和函數(shù)就可以完成對(duì)此系統(tǒng)的描述。
為描述系統(tǒng)行為,首先應(yīng)定義如下信號(hào):
其中,信號(hào)ST表示狀態(tài)機(jī)狀態(tài);HF、VF、LF、RF分別用于存儲(chǔ)四個(gè)方向?yàn)V波值;MAG存儲(chǔ)依據(jù)四個(gè)濾波值得出的梯度幅度值。
進(jìn)程CHANGESTATE可完整描述狀態(tài)圖中各狀態(tài)間的轉(zhuǎn)移關(guān)系。此進(jìn)程由敏感信號(hào)CLK進(jìn)行驅(qū)動(dòng),并在時(shí)鐘上升沿到來(lái)時(shí),可通過(guò)判斷當(dāng)前狀態(tài)以及相關(guān)轉(zhuǎn)移條件來(lái)確定狀態(tài)機(jī)的次狀態(tài)。其完整的代碼如下:
進(jìn)程STATEBEHAVIOR主要負(fù)責(zé)處理狀態(tài)機(jī)特定狀態(tài)下的行為輸出。此進(jìn)程由狀態(tài)信號(hào)ST作為敏感信號(hào)進(jìn)行驅(qū)動(dòng)。在空閑態(tài)(ST=IDEL)時(shí),系統(tǒng)初始化相應(yīng)輸出;而在濾波態(tài)(ST=FILTER)時(shí),系統(tǒng)則調(diào)用四個(gè)函數(shù)H_FILTER ()、V_FILTER()、L_FILTER()和R_FILTER()并依照Soble算法進(jìn)行濾波計(jì)算;決斷態(tài)(ST=JUDGE)時(shí),則調(diào)用函數(shù)MAGNITUDE ()和PHASE ()來(lái)計(jì)算梯度的大小和方向,并通過(guò)決斷后輸出處理結(jié)果,同時(shí)使檢測(cè)結(jié)束信號(hào)有效(FINISH='1')。其完整代碼如下:
以上全部代碼中使用的數(shù)據(jù)類(lèi)型和函數(shù)均已在PIXEL_PROCESSING.vhd文件中定義,因此,設(shè)計(jì)時(shí)只需在本VHDL文件中使用use子句將其作為設(shè)計(jì)庫(kù)中的包進(jìn)行引用即可,其代碼如下:
use work.PIXEL_PROCESSING.all;
通過(guò)采用以上VHDL語(yǔ)言行為域進(jìn)行描述,即可完成基于Soble算法的圖像邊沿檢測(cè)模塊的設(shè)計(jì)。
3仿真分析
采用兩個(gè)數(shù)據(jù)窗可對(duì)系統(tǒng)進(jìn)行功能仿真。從圖5所示的仿真時(shí)序中可以看出,兩個(gè)時(shí)鐘周期可完成一個(gè)數(shù)據(jù)窗的處理,第一個(gè)時(shí)鐘周期生成濾波值VF、VH、VL和VR,第二個(gè)時(shí)鐘周期生成幅值MAG并產(chǎn)生判決結(jié)果POUT。當(dāng)用40 MHz時(shí)鐘時(shí),若能以此時(shí)鐘二分頻的速度連續(xù)產(chǎn)生數(shù)據(jù)窗,則處理一個(gè)像素只需50 ns,也就是說(shuō),處理一個(gè)800×600的圖像只需24 ms。此時(shí),系統(tǒng)處理速度的瓶頸已不在邊緣檢測(cè)模塊,而由其它模塊,如像素窗的生成速度所決定。
除此之外,第二個(gè)時(shí)鐘周期所產(chǎn)生的有效檢測(cè)結(jié)束信號(hào)(FINISH)既可以作為前端模塊的數(shù)據(jù)窗發(fā)送信號(hào),也可以作為后端模塊的檢測(cè)結(jié)果接收信號(hào)。該信號(hào)對(duì)模塊間的協(xié)同工作具有重要的意義。
4結(jié)束語(yǔ)
采用FPGA器件實(shí)現(xiàn)Soble算法的圖像邊緣檢測(cè)具有設(shè)計(jì)過(guò)程簡(jiǎn)單,處理速度快等優(yōu)點(diǎn)。該方法將前端的像素窗生成模塊、后端的圖像處理模塊以及其他功能模塊集成至同一FPGA器件中,從而大大提高了系統(tǒng)的集成度。