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