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