張萍萍,李 童,李 茹,盧勝男
(西安石油大學(xué) 計算機(jī)學(xué)院,陜西 西安 710000)
邊緣是圖像最基本的特征。邊緣圖像[1]是利用微分算子對原有的圖像進(jìn)行邊緣提取,是圖像識別和分析的主要特征提取工具。邊緣圖像包含了很多有用的信息,在諸多領(lǐng)域有著十分重要的作用。常見的邊緣檢測算子可分為一階微分算子和二階微分算子。其中,一階微分算子包括Sobel 算子、Roberts 算子及Prewitt 算子等;二階微分算子包括Laplace 算子、canny 算子、及Log 算子等。其中,Sobel 算子具有抗噪聲強(qiáng)、不漏檢邊緣、不誤檢邊緣以及定位準(zhǔn)確的優(yōu)點,因此常用于圖像邊緣檢測中。
一些普通的圖像處理軟件不能滿足圖像檢測實時性要求。隨著集成電路和圖像傳感器工藝的不斷發(fā)展,現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)[2]的出現(xiàn)解決了這個問題。FPGA 利用自身的特點,可以實時處理大量的圖像數(shù)據(jù),滿足實時性要求。傳統(tǒng)的Sobel算子原理計算簡單,通俗易懂,但是傳統(tǒng)的Sobel 算子只有垂直和水平這兩個方向模板的檢測,易出現(xiàn)邊緣定位不夠精細(xì)、邊緣檢測效果不佳等問題[3]。因此,本文擬在傳統(tǒng)Sobel 算子基礎(chǔ)上,提出一種基于多方向的改進(jìn)的Sobel 算子,通過拓展方向模板,提高邊緣檢測精度,以適應(yīng)具有更多形狀特性的目標(biāo)的邊緣檢測應(yīng)用,進(jìn)一步提高檢測效果。
Sobel 算子是圖像邊緣檢測最重要的算子之一,屬于一種離散差分算子,主要用于獲取數(shù)字圖像的階躍,是在Prewitt 算子的基礎(chǔ)上改進(jìn)而來的。通過Sobel 算法的運(yùn)算,可以得到圖像的灰度近似值來監(jiān)測圖像的邊界位置。Sobel 是一個梯度的計算,通常用梯度Δf來表示一幅圖像f在(x,y)位置處的邊緣強(qiáng)度的方向。梯度的定義如式(1)所示,梯度向量的幅值用g(x,y)表示,計算如式(2)所示;方向用θ(x,y)表示,如式(3)所示。
式(1)中:grad(f)表示f在任意(x,y)處的梯度,即求函數(shù)在X軸和Y軸方向的一階偏導(dǎo)數(shù)。式(2)中:為了簡化運(yùn)算,梯度的幅值約等于函數(shù)在X、Y軸方向一階偏導(dǎo)數(shù)的絕對值之和。式(3)中:梯度的方向θ(x,y)即在Y方向和X方向偏導(dǎo)之比的反正切函數(shù)值。
Sobel 算子使用垂直方向和水平方向的3×3 算子模板進(jìn)行圖像邊緣檢測,方向模板如圖1 所示。
圖1 Sobel 算子模板
算法的具體原理[5]是:首先計算從上至下、從左至右的兩個方向分別在X和Y軸上的卷積函數(shù);其次,令模板的中心與圖像的某個像素在同一位置,將該像素周圍的點和模板上的系數(shù)相乘相加;再次,將卷積函數(shù)計算出來的最大值作為該像素新的灰度值,取代圖像中模板中心位置的像素值;最后,根據(jù)設(shè)置的閾值,將灰度值與閾值進(jìn)行比較,來判定哪些點為邊緣點。
Sobel 算子計算方法簡單,使用加權(quán)平均算法能夠有效地抑制圖像的隨機(jī)噪聲。然而,只利用兩個方向的模板[6]對圖像進(jìn)行邊緣檢測,檢測邊緣很不完整。
Sobel 算子通過卷積公式計算出每個像素在水平和垂直方向的一階導(dǎo)數(shù)。當(dāng)一階導(dǎo)數(shù)為0,可以求出像素的最大值和最小值。計算卷積函數(shù)的過程分為以下3 個步驟[7]。
(1)設(shè)定滾動窗口的尺寸,作為數(shù)字圖像算法的輸出窗口,滾動窗口一般選擇3×3,5×5 等奇數(shù)窗口??紤]到算法的執(zhí)行效率和FPGA 芯片的資源消耗,本文選擇3×3 的奇數(shù)窗口。
(2)確定卷積系數(shù)表。本文將方向模板由原來的2 個擴(kuò)展到8 個,變成0°,45°,90°,135°,180°,225°,270°及315°共8 個方向,其算子模板如圖2 所示。
圖2 八方向Sobel 邊緣模板
(3)根據(jù)Sobel 算子計算出每個方向的梯度值,并且將其與閾值[9]進(jìn)行比較。
傳統(tǒng)的軟件方法在進(jìn)行邊緣檢測系統(tǒng)的設(shè)計時,很難達(dá)到較高的實時性要求。FPGA 具有很強(qiáng)的動態(tài)配置靈活性,能在設(shè)計上實現(xiàn)硬件并行和流水線技術(shù),具有處理速度快、處理系統(tǒng)通用性以及可移植性強(qiáng)的明顯優(yōu)勢,在底層硬件中直接實現(xiàn)算法的運(yùn)算及數(shù)據(jù)的處理,具有較好的實時性。因此,本文將采用FPGA 實現(xiàn)邊緣檢測系統(tǒng)的實時采集及顯示功能。利用FPGA 的并行處理以及流水線操作的優(yōu)勢[8],使各個模塊可以同時運(yùn)行,在一個時鐘下進(jìn)行多級流水線的操作,大大提高圖像處理速度。
整個系統(tǒng)設(shè)計如圖3 所示,主要包括攝像頭采集及驅(qū)動模塊、存儲模塊、邊緣檢測模塊、VGA 顯示及驅(qū)動模塊。為了實現(xiàn)圖像的實時采集與顯示,本設(shè)計首先完成對攝像頭的初始化和寄存器配置,并將實時讀取的圖像數(shù)據(jù)存入SDRAM 存儲器中,在FPGA 芯片內(nèi)部并行實現(xiàn)邊緣檢測算法,最后通VGA 顯示器進(jìn)行檢測結(jié)果的顯示。整個FPGA 設(shè)計采用自頂向下的設(shè)計思想,使用全局復(fù)位和跨時鐘域處理。
圖3 基于FPGA 的圖像采集及邊緣提取系統(tǒng)原理圖
為了驗證提出的改進(jìn)Sobel 算子的邊緣檢測功能,本文在Quartus II 平臺上,采用Verilog 語言對該系統(tǒng)進(jìn)行實現(xiàn)。FPGA 為Altera 公司的Cyclone IV 系列EP4CE10E17C8N 芯片,攝像頭型號為OV5640。VGA 模式下,分辨率為1 280×1 024,處理速度為30 f·s-1。本文采用傳統(tǒng)的Sobel 算子及改進(jìn)的Sobel 算子兩種邊緣檢測算法進(jìn)行實時圖像的邊緣檢測,動態(tài)畫面流暢清晰,邊緣檢測圖像能夠?qū)崟r、清晰地顯示圖像邊緣,檢測結(jié)果如圖4 所示。
圖4 基于FPGA 的實時邊緣檢測系統(tǒng)效果圖
通過對比可以看出,傳統(tǒng)的Sobel 算子對邊緣的提取不夠完整和精確,而改進(jìn)后的算法明顯地彌補(bǔ)了該算法對邊緣提取的不足之處,對圖像邊緣的提取更加完整,信息更加豐富。
本文基于Sobel 算子在圖像邊緣檢測中存在的缺陷,對傳統(tǒng)的Sobel 算子做出了改進(jìn),提出了一種基于八方向模板的改進(jìn)Sobel 算子。實驗結(jié)果證明了新Sobel 算子在圖像邊緣檢測中的有效性。此外,提出的系統(tǒng)利用FPGA 的優(yōu)勢,滿足了實時性的要求,提高了檢測效率。