王 靜,唐文豪
(西安科技大學(xué) 通信與信息工程學(xué)院,陜西 西安 710054)
邊緣檢測(cè)是圖像處理與分析中的一項(xiàng)基本的計(jì)算機(jī)視覺處理技術(shù),許多學(xué)者提出了許多相關(guān)算法,如Robert、Prewitt、Kirsch、Gauss-Laplace、Canny等。其中,Canny算子具有很好的信噪比和檢測(cè)精度,在圖像處理領(lǐng)域得到了廣泛的應(yīng)用。
傳統(tǒng)Canny算子對(duì)噪聲比較敏感,高斯濾波使邊緣模糊,易丟失邊緣信息,為此許多學(xué)者提出了改進(jìn)的Canny算子,如梯度倒數(shù)加權(quán)濾波方法對(duì)圖像進(jìn)行斑點(diǎn)噪聲濾除的同時(shí)保持了圖像邊緣;利用形態(tài)學(xué)的開閉操作濾波抑制毛刺噪聲和橋噪聲,并且可以平滑圖像邊緣的邊界點(diǎn);通過圖像一階直方圖的統(tǒng)計(jì)特性自適應(yīng)地選取高斯濾波器的參數(shù),有效去除了噪聲。針對(duì)傳統(tǒng)的Canny算子閾值選取不具有自適應(yīng)的特點(diǎn),文獻(xiàn)[4]利用圖像的梯度方差作為判據(jù)對(duì)圖像進(jìn)行分塊,繼而對(duì)各子塊運(yùn)用最大類間方差法求得相應(yīng)的閾值;文獻(xiàn)[5]直接使用Otsu方法自適應(yīng)計(jì)算閾值;文獻(xiàn)[6]通過構(gòu)造梯度方向和SGD指標(biāo)自適應(yīng)確定閾值。本文用非線性濾波器雙邊濾波代替高斯濾波,通過調(diào)節(jié)雙邊濾波的參數(shù)達(dá)到保邊去噪的目的,接著提出一種差分梯度直方圖結(jié)合Otsu的方法,相比文獻(xiàn)[5]直接使用Otsu的方法,在自適應(yīng)確定閾值的同時(shí),大大減少了迭代次數(shù),加快算法運(yùn)行時(shí)間。最后通過一種遞歸邊界跟蹤邊緣連接方法將斷邊連接起來。
Canny提出了一種很有效的邊緣檢測(cè)算法,該算法的實(shí)現(xiàn)主要有如下四個(gè)步驟:
1)使用高斯濾波器對(duì)原圖像進(jìn)行濾波。
2)采用水平和垂直兩個(gè)方向的一階偏導(dǎo)數(shù)計(jì)算圖像的梯度幅值(,)和梯度方向(,):
3)對(duì)梯度圖像進(jìn)行非最大值抑制操作,以細(xì)化邊緣。
4)用高低雙閾值連接最后的邊緣,高、低閾值大小的選擇對(duì)最后邊緣連接有著至關(guān)重要的影響。若某一像素的梯度值大于高閾值,直接當(dāng)作強(qiáng)邊緣點(diǎn);若某一像素的梯度值小于低閾值,直接置0;若某一像素的梯度值介于高、低閾值之間,則通過尋找該像素點(diǎn)八鄰域內(nèi)有沒有強(qiáng)邊緣點(diǎn),有,則保留該像素,否則,被排除。
當(dāng)圖像中存在明顯的邊緣信息時(shí),通常的鄰域運(yùn)算必然會(huì)導(dǎo)致圖像中邊緣點(diǎn)的像素值發(fā)生變化,使圖像的邊緣變得模糊不清。而Canny算法中的高斯濾波只考慮了像素間空間位置上的關(guān)系,易造成邊緣模糊,以此造成邊緣信息的丟失,因此高斯濾波方法很難做到兼顧平滑噪聲和保護(hù)邊緣信息。為了改善這一現(xiàn)象,本文提出雙邊濾波的方法,雙邊濾波器模板的卷積權(quán)值的選取不僅取決于普通低通濾波的像素空間位置關(guān)系,同時(shí)考慮了像素間的相似程度,雙邊濾波可表示為:
式中:I(,)為輸出像素值;(,)為窗口內(nèi)各個(gè)像素點(diǎn)的值;ω為空間域高斯函數(shù);ω為像素間亮度高斯函數(shù)。
以Lena圖像為例進(jìn)行高斯和雙邊濾波實(shí)驗(yàn),如圖1所示。
圖1 高斯濾波與雙邊濾波對(duì)比結(jié)果
由圖1c)和圖1d)可以看出,高斯濾波圖像模糊,雙邊濾波比高斯濾波去噪效果更顯著,并且能保留更加完整的圖像邊緣信息。
傳統(tǒng)的Canny算子使用水平和垂直兩個(gè)方向Sobel算子計(jì)算梯度,即計(jì)算水平和垂直鄰域內(nèi)的差值,對(duì)于梯度變化相對(duì)緩慢的邊緣,只考慮兩個(gè)方向的模板計(jì)算易丟失梯度信息。因此本文增加45°和135°方向Sobel梯度模板計(jì)算,一方面解決只考慮兩個(gè)方向模板計(jì)算的局限性,另一方面,在一定程度上突出梯度差相對(duì)弱的邊緣。Sobel梯度模板如圖2所示。
圖2 Sobel梯度模板
則梯度幅值可表示為:
式中:G,G,,分別為四個(gè)方向模板卷積結(jié)果。
梯度方向?yàn)椋?/p>
2.3.1 Otsu算法
一幅大小×像素的數(shù)字圖像有個(gè)不同的灰度級(jí),n為灰度級(jí)為的像素?cái)?shù),歸一化的直方圖分量P=n(),選擇一個(gè)閾值()=,0<<-1,將圖像分為兩類和。由圖像中灰度值在范圍[0,]內(nèi)的像素組成,由灰度值在范圍[+1,-1]內(nèi)的像素組成。
像素分配到類中的概率()為:
類中像素的平均灰度值為:
同理,類中像素的平均灰度值為:
整幅圖像的平均灰度值為:
類間方差定義為:
式中,初始閾值的范圍為[0,],使最大的值作為Otsu的最佳閾值。
2.3.2 梯度直方圖的分析
Lena圖像經(jīng)過非極大值抑制后,得到一幅梯度直方圖,橫坐標(biāo)為梯度幅值,縱坐標(biāo)為各梯度幅值對(duì)應(yīng)像素點(diǎn)的頻率,如圖3所示。圖4為局部放大圖。
圖3 梯度幅度直方圖
圖4 局部放大圖
經(jīng)多次實(shí)驗(yàn),梯度直方圖具有以下特點(diǎn):
1)圖像的背景區(qū)域梯度幅值較小,占了大部分比例,梯度直方圖的曲線在背景區(qū)域急劇下降,隨后邊緣緩慢。
2)在急劇下降過渡到平滑區(qū)域的區(qū)間內(nèi)存在零點(diǎn),零點(diǎn)右側(cè)的尖峰代表一類邊緣強(qiáng)度像素點(diǎn)的集合,閾值選在平滑區(qū)域與尖峰之間才能更好地較少誤差。
通過對(duì)梯度直方圖的分析,閾值選取在平滑區(qū)域誤差最小,因此Otsu算法的迭代閾值應(yīng)包含此區(qū)間,而直接應(yīng)用Otsu需要遍歷所有的梯度值,通過一階差分梯度直方圖得到第一個(gè)過零點(diǎn)的值,作為Otsu算法初始閾值,通過計(jì)算二階梯度直方圖,定義參數(shù),使得二階差分小于時(shí)對(duì)應(yīng)的梯度值作為上限值,參數(shù)通過實(shí)驗(yàn)得到。
定義梯度直方圖為(),一階差分為diff,二階差分為diff′,則:
梯度直方圖一階差分diff、二階差分diff′計(jì)算結(jié)果如圖5所示。式(15)為,的約束條件,那么在[,]中應(yīng)用Otsu法得到的閾值作為Canny邊緣檢測(cè)的高閾值誤差最小,且減少了Otsu算法的迭代次數(shù),加快了算法的運(yùn)行時(shí)間。與文獻(xiàn)[5]算法運(yùn)行時(shí)間比對(duì),結(jié)果如表1所示。
圖5 差分圖
表1 算法運(yùn)行時(shí)間比對(duì)
傳統(tǒng)的Canny算法采用雙閾值連接,大于高閾值的值直接置為強(qiáng)邊緣,介于高、低閾值之間的值通過尋找其八鄰域內(nèi)有沒有強(qiáng)邊緣決定該值是否為邊緣點(diǎn),這種方式對(duì)于斷裂的邊緣沒有任何改進(jìn),圖像經(jīng)過非極大值抑制后,如圖6所示,大于highthreshold的邊緣圖像在輪廓上有斷裂。大于lowthreshold的邊緣圖像含有強(qiáng)邊緣、弱邊緣、偽邊緣,如圖7所示。
圖6 高閾值圖像
圖7 低閾值圖像
順時(shí)針遍歷搜尋高閾值圖像中所有端點(diǎn),將端點(diǎn)作為初始引導(dǎo)點(diǎn),找到差異圖中對(duì)應(yīng)的點(diǎn),如果差異圖(見圖8)的點(diǎn)滿足一定關(guān)系,則將邊緣存下,通過遞歸跟蹤算法在差異圖中搜集邊緣,斷裂的邊緣會(huì)得到很好的連接,且偽邊緣和噪聲點(diǎn)不會(huì)被連接。
圖8 差異圖
常用端點(diǎn)判別方式:經(jīng)非極大值抑制后的邊緣可以分為端點(diǎn)、邊緣點(diǎn)和孤立點(diǎn),即在八鄰域中有1個(gè)點(diǎn)相連為端點(diǎn);有2個(gè)及以上的點(diǎn)相連為邊緣點(diǎn);沒有點(diǎn)相連為孤立點(diǎn),如圖9所示。
圖9 邊緣點(diǎn)類別判斷圖
本文邊緣連接的思想為以高閾值圖像作為引導(dǎo),計(jì)算高閾值圖像和低閾值圖像之間的差異圖。尋找高閾值圖像中的端點(diǎn),在差異圖中對(duì)應(yīng)的點(diǎn)搜索其八鄰域中有沒有點(diǎn)與邊緣線相連,有,則將該點(diǎn)連接到高閾值圖像中,并將該點(diǎn)更新到端點(diǎn)集合中,直到將高閾值圖像中的斷邊連接起來。
本文邊緣連接的步驟如下:
Step1:非極大值抑制后得到高閾值邊緣圖像;
Step2:得到低閾值邊緣圖像;
Step3:遍歷高閾值邊緣圖像,根據(jù)判別方式得到端點(diǎn);
Step4:計(jì)算高、低閾值圖像的差異圖;
Step5:根據(jù)端點(diǎn)尋找鄰域內(nèi)滿足條件的點(diǎn),將該點(diǎn)連接到高閾值圖像,并將端點(diǎn)集合更新;
Step6:重復(fù)Step5,直至將斷裂邊緣連接。
整個(gè)算法流程圖如圖10所示。
圖10 算法流程圖
本文在Matlab 2014b上實(shí)驗(yàn),實(shí)驗(yàn)圖像分別為L(zhǎng)ena、Peppers和人像圖,如圖11所示。由圖中結(jié)果可以看出,相比傳統(tǒng)Canny算子,Lena圖像在臉龐處和頂端連接上了斷邊,Peppers在中部斷邊處也得到了很好的連接,人像圖在袖子處的邊緣更加完整且連續(xù)。
圖11 傳統(tǒng)Canny與改進(jìn)Canny實(shí)驗(yàn)結(jié)果
為驗(yàn)證邊緣檢測(cè)結(jié)果的性能,采用信噪比指標(biāo)和文獻(xiàn)[7]給出的指標(biāo)對(duì)傳統(tǒng)Canny和改進(jìn)Canny邊緣檢測(cè)結(jié)果進(jìn)行統(tǒng)計(jì)。信噪比(SNR)定義為:
式中:為邊緣檢測(cè)結(jié)果所有點(diǎn)3×3鄰域存在像素點(diǎn)個(gè)數(shù)大于3的總數(shù);代表邊緣檢測(cè)結(jié)果3×3鄰域像素點(diǎn)不大于3的總和。
指標(biāo)計(jì)算結(jié)果如表2所示。結(jié)果表明,改進(jìn)算法SNR指標(biāo)高于傳統(tǒng)算法,說明改進(jìn)Canny算法邊緣信息更豐富,邊緣連接性更好。
表2 SNR統(tǒng)計(jì)
第二種指標(biāo)統(tǒng)計(jì)結(jié)果如表3所示。其中:代表檢測(cè)出的邊緣像素總數(shù),代表4連通數(shù),代表8連通數(shù),評(píng)價(jià)方法為計(jì)算和的值,的值越小,說明檢測(cè)結(jié)果的單邊緣響應(yīng)越好,的值越小,說明算法檢測(cè)結(jié)果的連續(xù)性強(qiáng),邊緣間斷少。結(jié)果表明,改進(jìn)算法單邊緣響應(yīng)效果好,邊緣檢測(cè)的完整性和連續(xù)性也優(yōu)于傳統(tǒng)算法。
表3 邊緣結(jié)果圖像統(tǒng)計(jì)
本文對(duì)傳統(tǒng)Canny算子進(jìn)行了改進(jìn),采用雙邊濾波代替高斯濾波濾除噪聲的同時(shí)能夠保持邊緣信息,梯度計(jì)算增加45°和135°兩方向的模板以突出邊緣信息,接著對(duì)Canny算法進(jìn)行自適應(yīng)閾值計(jì)算,最后提出遞歸邊界跟蹤的邊緣連接方法。實(shí)驗(yàn)結(jié)果表明,改進(jìn)的算法邊緣連接性和完整性都優(yōu)于傳統(tǒng)Canny算法。