段振云, 楊丹, 趙文輝
(沈陽工業(yè)大學(xué)機械工程學(xué)院,沈陽110870)
圖像的邊緣是圖像最基本的特征[1]。圖像的邊緣包含了圖像用于識別的有用信息。圖像中的邊緣類型通常可以分為階躍型邊緣、雙階躍邊緣、雙屋脊邊緣、斜坡邊緣、三角型屋脊邊緣、方波型屋脊邊緣、樓梯邊緣等[2]。在經(jīng)典的邊緣檢測方法中,一般根據(jù)模板的大小和元素值的不同可分為不同的微分算子。常用的微分算子有Sobel算子、Roberts算子、Prewitt算子等[3]。這些算子具有簡單、易于實現(xiàn)、實時性好的優(yōu)點,同時也具有對噪聲較敏感、抗噪聲性能差、邊緣的精度不高等缺點。和傳統(tǒng)的微分算子相比,基于最優(yōu)化算法的Canny算法[4],因具有良好的檢測精度和信噪比而被廣泛應(yīng)用[5],并成為評價其他邊緣檢測方法優(yōu)劣的標準[6-7]。但是傳統(tǒng)的Canny算法仍然不能滿足單像素級的檢測要求,因為被各種干擾因素影響,仍有誤檢、漏檢的問題。本文在分析了傳統(tǒng)Canny檢測算法的原理后,對Canny算法在計算梯度幅值和高、低閾值選取以及連接邊緣上做了一定的改進,提高了Canny算法的邊緣定位精度和準確度,并使算法具有了一定的自適應(yīng)性。
1)對圖像進行高斯濾波。
設(shè)所選高斯函數(shù)[8]為
其中,σ為高斯濾波器參數(shù),控制著平滑去噪的程度,因此要根據(jù)實際情況選取σ的值。
2)求解梯度的幅值和方向。濾波之后的數(shù)據(jù)陣列I(x,y)的梯度幅值及其方向,在原始的Canny算法中是使用2×2鄰域內(nèi)一階偏導(dǎo)數(shù)的有限差分來計算的[9]。
3)對梯度幅值采取非極大值抑制。
針對梯度幅值圖像G[i,j]上的全部像素點,使用插值法算出當前像素點的梯度方向上相鄰兩像素點的梯度幅值,若當前像素點的梯度幅值是它們中的最大值,那么當前像素點可能是邊緣點。反之,該點不是邊緣點,刪除。
4)用雙閾值檢測和連接邊緣。
選取高閾值Th和低閾值Tl。首先對每個圖像邊緣點(i,j)的梯度幅值 G(i,j)進行檢測,高于高閾值,該點判定為邊緣點。低于低閾值,該點判定為非邊緣點。當G(i,j)介于高、低閾值之間時,則根據(jù)該點和周圍點的聯(lián)通性來判斷,如果該點周圍的像素點中有邊緣點,該點也為邊緣點,否則認為該點為非邊緣點。
雖然在實際應(yīng)用中,Canny算法的檢測效果優(yōu)于Sobel算子、Log算子等邊緣檢測算子,但Canny算法也存在一些缺陷[10]。
1)原始Canny算子在2×2的鄰域范圍內(nèi),采用有限差分均值的方法來計算出各像素點的梯度幅值,雖然此方法能夠得到邊緣較為準確的位置信息,但是噪聲對其影響較大,比較容易檢測到不真實邊緣或丟掉一些真實邊緣細節(jié)方面的信息,實驗效果不佳。
2)傳統(tǒng)Canny算法在檢測邊緣時,兩個高低閾值Th和Tl完全由人為根據(jù)經(jīng)驗設(shè)定,不具有自適應(yīng)性,檢測效率較低,無法滿足大型圖像庫中圖像邊緣自動檢測的要求。
經(jīng)典Canny算子在2×2的鄰域內(nèi)求有限差分來計算出梯度幅值,本文采用3×3的Sobel邊緣算子模板計算梯度幅值。
圖 1(a)和圖 1(b)分別是 Sobel算子垂直方向和水平方向的兩個模板[11],圖2為一幅3×3的圖像區(qū)域。
當采用Sobel算子計算圖2所示的3×3區(qū)域的梯度時,可得U5像素點水平方向和垂直方向的梯度分量分別為式(2)和式(3)所示。
圖1 Sobel算子模板
圖2 3×3的圖像區(qū)域
梯度直方圖描述的是圖像邊緣的強度信息,本文利用梯度直方圖來獲取高閾值,以便解決原始Canny算法不能自動選擇高低閾值的問題。高閾值Th的選取原則:在一幅圖像中,非邊緣點的數(shù)目與總像素數(shù)目的比為H,依據(jù)圖像的梯度直方圖,按照從低到高的順序逐步累積圖像點個數(shù),當累積個數(shù)為像素總數(shù)的H倍時,該時刻的梯度值取為高閾值Th,根據(jù)大量實驗,H一般取0.7或0.8,本文取0.7,把高閾值與一個比例因子的積取為低閾值Tl,L代表該比例因子,低閾值Tl可表示為Tl=L·Th。本文L取為0.5。圖3為本文實驗圖像的梯度直方圖。
步驟1:在包含邊緣的圖像區(qū)域中,逐行掃描每個像素點的梯度值,若遇到某一像素的梯度幅值大于高閾值Th時,則把該點作為輪廓的起始點,開始追蹤同時對其進行標記,避免重復(fù)追蹤。追蹤過程如圖4所示,設(shè)輪廓起始點 P0的坐標為(i,j),G(i,j)為它的梯度值。
圖3 梯度直方圖
步驟2:比較該起始點周圍8鄰域內(nèi)像素點的梯度值,找出它們中的最大值,標記為下一邊緣點,并以此像素點為起點繼續(xù)跟蹤。在圖4中我們假設(shè)下一邊緣點的坐標為P1(i+1,j-1),根據(jù)現(xiàn)有的兩個邊緣點P0(i,j)、P1(i+1,j-1)和單像素邊緣的特點,可知下一邊緣點不可能為 P2(i,j-1)和P8(i+1,j),因此可以將這兩個點的梯度值清零,在以P1(i+1,j-1)為中心,比較其八鄰域內(nèi)像素點的梯度,找出最大值,并標記為下一邊緣點,這時只需比較P9至P13五個像素點的梯度值,大大減小了運算量。
圖4 邊界跟蹤示意圖
步驟3:當尋找到的像素點的梯度值小于低閾值Tl時,認為到了輪廓端點,結(jié)束搜索,跳至步驟1,否則繼續(xù)步驟2。
為了驗證本文算法的有效性,使用本文算法和傳統(tǒng)Canny算法分別提取20 mm量塊如圖5所示的部分邊緣,提取到的邊緣如圖6所示。
從對量塊部分邊緣的提取效果來看,傳統(tǒng)Canny算法提取出的邊緣有一些偽邊緣和不連續(xù)邊緣,且提取出的邊緣并非直線,而本文算法的處理結(jié)果輪廓清晰,邊緣連續(xù)且呈直線,可以提取單像素精度的邊緣輪廓,所反映的邊緣信息與實際物體邊緣的物理特性基本符合。從實驗結(jié)果可知,本文算法的檢測精確度、準確度、邊緣的細化程度等方面的性能都好于原始的Canny算法,并且對于不同的圖像不依賴人工設(shè)定高低閾值,就有很好的處理效果,具有一定的自適應(yīng)性。
圖5 量塊圖像
圖6 量塊部分邊緣提取圖像
本文針對傳統(tǒng)Canny算法的不足,對梯度幅值的計算、高低閾值的選取以及邊緣的連接部分做了改進。實驗結(jié)果表明,相比于傳統(tǒng)Canny算法,本文提出的改進自適應(yīng)Canny算法提取出的圖像邊緣是單一連續(xù)的,符合單像素級的要求,有效地實現(xiàn)了圖像真實邊緣的檢測,同時實現(xiàn)了高低閾值的自動化選擇,具有一定的自適應(yīng)性,為工業(yè)零件的邊緣檢測提供了參考。
[1] 厲丹,錢建生,蘆楠楠,等.圖像邊緣檢測技術(shù)的改進[J].計算機工程與應(yīng)用,2010,46(18):164-166.
[2] 靳鵬飛.一種改進的Sobel圖像邊緣檢測算法[J].應(yīng)用光學(xué),2008,29(4):625-628.
[3] 韓曉軍.數(shù)字圖像處理技術(shù)與應(yīng)用[M].北京:電子工業(yè)出版社,2009:43-47.
[4] Canny J.A computational approach to edge detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,8(6):679-698.
[5] 余洪山,王耀南.一種基于樹結(jié)構(gòu)的立體圖像特征提取算法[J].計算機應(yīng)用,2004,24(10):78-81.
[6] Panetta K A,Wharton E J,Agaian S S.Logarithmic edge detection with applications[J].Journal of Computers,2008,3(9):3346-3351.
[7] Zhang Y,Rockett P I.The Bayesian operating point of the Canny edge detector [J].IEEE Transactions on Image Processing,2006,15(11):3409-3416.
[8] 賈云德.機器視覺[M].北京:科學(xué)出版社,2002:556-560.
[9] 蘇恒陽,袁先珍.一種改進的Canny的圖像邊緣檢測算法[J].計算機仿真,2010,27(10):242-245.
[10] Wang Zhi,He Saixian.An Adaptive Edge-detection Method Based on Canny Algorithm[J].Journal of image and graphics,2004,9(8):957-961.
[11] 黃世震,郭光寶.基于Sobel邊緣檢測和雙線性算法的圖像縮放實現(xiàn)[J].中國集成電路,2013,9(9):45-49.