李 凌
圖像邊緣是圖像的主要特征之一,邊緣檢測是圖像分析、識別的基礎(chǔ).圖像邊緣在灰度上表現(xiàn)為不連續(xù)性,是像素灰度值有屋頂變化或階躍變化的像素值的集合.灰度圖像的梯度研究是目前邊緣檢測的主要方向.灰度圖像的梯度在數(shù)學(xué)上表現(xiàn)為微分,常用的邊緣檢測算子有Robert、Sobel、Prewitt等 一 階 微 分 算 子 ,LapLacian、Marr_Hildret等二階微分算子,這些算子通過把灰度圖像與一定大小的模板進(jìn)行卷積,以提取圖像邊緣,這種方法易于運行,具有較好實時性,但是提取的邊緣粗糙,容易受噪聲的干擾.
John F.Canny于1986年提出Canny邊緣檢測算子.在檢測邊緣時,Canny算子可滿足信噪比、定位精度和單邊響應(yīng)[1]3個最優(yōu)準(zhǔn)則.Canny算子是基于最優(yōu)化算法的檢測算子,與傳統(tǒng)微分算子相比,不僅具有較大的信噪比,還具有相當(dāng)高的精度,因此,廣泛應(yīng)用于數(shù)字圖像處理領(lǐng)域,但是Canny邊緣檢測對噪聲非常敏感,易受光照變化影響,檢測過程中,利用固定參數(shù)的高斯濾波器平滑圖像,易造成過度平滑,模糊圖像邊緣,造成細(xì)節(jié)信息丟失;沒有統(tǒng)一標(biāo)準(zhǔn)選取高低閾值,通常是人為設(shè)定[2],算法的適應(yīng)性受到限制.近年來,許多學(xué)者提出了基于Canny算子的改善算法.文獻(xiàn)[2]采用根據(jù)圖像的均值與方差確定高低閾值,文獻(xiàn)[3]和文獻(xiàn)[4]采用自適應(yīng)濾波器代替?zhèn)鹘y(tǒng)Canny算法中的高斯濾波器,文獻(xiàn)[5]采用小波變換增強圖像的邊緣,消除傳統(tǒng)Canny算法對弱邊緣、不連續(xù)邊緣圖像邊緣檢測效果不好的弱點.
本文提出一種改進(jìn)的Canny邊緣檢測算法,用形態(tài)學(xué)濾波代替高斯濾波平滑圖像,借鑒Sobel算子并拓展45°和135°方向梯度模板,計算梯度和幅值,根據(jù)圖像的灰度均值與方差自動計算高低閾值,改進(jìn)算法在邊緣檢測和抗噪聲方面效果良好.
方差σ的取值決定圖像平滑的程度,若σ較大,圖像信噪比較高,邊緣定位精度較低;σ取值較小,情況與之相反,因此,σ的合理取值是圖像邊緣定位精度和信噪比的關(guān)鍵因素.
(2)計算梯度幅值與方向.傳統(tǒng)Canny算法采用2×2鄰域一階偏導(dǎo)有限差分計算濾波后圖像I(x,y)的梯度幅值和方向.計算x和y方向的偏導(dǎo)數(shù)Ex(x,y)、Ey(x,y)方法分別如式(2)、式(3)所示:
計算梯度幅值和方向的方法分別如式(4)、式(5)所示:
Canny邊緣檢測算法的基本思想是:首先,采用高斯函數(shù)的任意方向的一階導(dǎo)數(shù)平滑圖像;然后,計算平滑后的圖像的梯度幅值和方向,采用非極大值抑制技術(shù)來抑制局部區(qū)域的干擾值;最后,設(shè)定高低閾值去除虛假邊緣,連接真邊緣.算法實現(xiàn)如下:
(1)高斯濾波平滑圖像.用高斯濾波器平滑圖像,以抑制噪聲.二維高斯函數(shù)如式(1)所示:
(3)非極大值抑制.非極大值抑制其實質(zhì)就是保留幅值局部變化最大的點,抑制局部區(qū)域內(nèi)的干擾值,以更加準(zhǔn)確定位邊緣.它的基本思想是:圖像I(x,y)上點(i,j)的梯度幅值E(i,j)與沿著梯度線方向上的兩個相鄰像素點的梯度幅值進(jìn)行比較,若小于,則認(rèn)為該像素點為不是邊緣點,將其E(i,j)置為零.
(4)雙閾值提取邊緣.Canny算法使用高低閾值Th和Tl對非極大值抑制過的圖像進(jìn)行分割.首先,根據(jù)先驗知識選用Th和Tl;然后,掃描候選邊緣圖像,對于候選邊緣圖像中的(x,y),若E(x,y)大于Th,則認(rèn)定 (x,y)是邊緣點,若E(x,y)小于Tl,則認(rèn)定(x,y)不是邊緣點,對于梯度值介于高低閾值之間的候選邊緣點,即Tl<E(x,y)<Th,則需依據(jù)邊緣的連通性進(jìn)一步判斷,連成輪廓[6].
針對傳統(tǒng)Canny邊緣檢測算法的不足,本文進(jìn)行了如下改進(jìn):用形態(tài)學(xué)濾波代替高斯濾波,進(jìn)行降噪處理,解決方差σ不能自適應(yīng)的問題;采用x,y,45°,135°四個方向Sobel算子計算梯度和幅值,解決傳統(tǒng)Canny算法因采用有限差分計算梯度和幅值而對噪聲敏感,易丟失一些真實邊緣的問題;根據(jù)圖像的灰度均值與方差自動計算高低閾值,解決人工選用閾值,靈活性低的問題.
灰度圖像形態(tài)學(xué)包括膨脹、腐蝕、開、閉運算,各個運算的定義如下:
①膨脹運算:
③開運算:
④閉運算:
其中:F(x,y)為灰度圖像,B(s,t)為形態(tài)學(xué)結(jié)構(gòu)元素.
形態(tài)學(xué)濾波的關(guān)鍵是選取合適的結(jié)構(gòu)元素,構(gòu)造形態(tài)學(xué)濾波算子.在Canny算法中引入形態(tài)學(xué)濾波平滑圖像,其實質(zhì)是用某種尺度的結(jié)構(gòu)元素對圖像順序進(jìn)行開運算、閉運算,去除噪聲.開運算通常用于去除比結(jié)構(gòu)元素小的亮細(xì)節(jié),閉運算通常用于去除比結(jié)構(gòu)元素小的暗細(xì)節(jié)[7].②腐蝕運算:
設(shè)C為平滑后的圖像,兩種常見的形態(tài)學(xué)濾波算子可以表示為:
將以上兩種濾波算子結(jié)合起來,構(gòu)造出一種復(fù)合形態(tài)學(xué)濾波器[8].本文采用式(12)所示的復(fù)合形態(tài)學(xué)濾波器.
當(dāng)結(jié)構(gòu)元素B的尺度太小時,開運算可以去除比其更小的明亮細(xì)節(jié),能夠有效保持圖像邊緣的細(xì)節(jié)信息,當(dāng)B尺度較大時,閉運算可以去除比其更好的暗細(xì)節(jié),會模糊掉許多細(xì)節(jié)信息,但是去噪能力較強,因此使用開、閉交替運算,既可以有效去除噪聲,獲得很好的平滑效果,也能保持邊緣細(xì)節(jié)信息.
本文構(gòu)造的多結(jié)構(gòu)元素的復(fù)合濾波器如下:
傳統(tǒng)的Canny算法使用2×2有限差分計算梯度值[9],該方法對邊緣定位較好,但是對噪聲敏感.學(xué)者們對此進(jìn)行了相關(guān)研究,文獻(xiàn)[5]提出計算3×3的8鄰域內(nèi)x方向、y方向、45°和135°四個方向的一階導(dǎo)數(shù)差分計算梯度值,文獻(xiàn)[6]針對8鄰域內(nèi)的45°或135°旋轉(zhuǎn)可變的缺點,對x方向、y方向的差分進(jìn)行了改進(jìn),兼顧了邊緣定位和抗噪要求,但是計算復(fù)雜.本文在傳統(tǒng)Sobel算子的水平、垂直兩個方向模板的基礎(chǔ)上,加入45°和135°方向模板來計算梯度幅值,Sobel算子四個方向的模板如圖1所示.
將圖1中的模板分別與濾波后的圖像進(jìn)行卷積,可得到四個方向的梯度分量Px(x,y)、Py(x,y)、P45°(x,y)、P135°(x,y),梯度幅值由式(14)求出:
圖1 Sobel算子四個方向的模板
Canny邊緣檢測算法的高低閾值的大和小直接決定著檢測到的邊緣信息的少和多,高閾值越大,保留的邊緣信息越少,可有效抑制偽邊緣,但是丟失一些邊緣信息[2];相反,若閾值越小,保留的邊緣信息越多,但是偽邊緣也會相應(yīng)增加.為檢測出圖像的更多邊緣細(xì)節(jié),在選取高閾值時不僅應(yīng)考慮圖像的整體特點,也應(yīng)該考慮圖像的局部特點;圖像的平均方差能夠反映圖像的整體變化情況,局部方差反映的是局部變化情況.因此,在選取閾值時,綜合考慮圖像的灰度變化(平均方差Eave)和圖像本身的灰度信息(平均灰度Fave),這樣可以檢測到更多的邊緣信息,本文獲取高閾值的方法如式(15)所示:
引入系數(shù)k是為了解決Eave與Fave直接比值所造成的偽邊緣信息過多的問題,實驗表明,k∈(0.2,0.5)時,檢測效果最好.
首先采用復(fù)合形態(tài)學(xué)濾波器平滑圖像,去除噪聲,采用Sobel算子計算梯度和幅值,進(jìn)行非極大值抑制,根據(jù)圖像灰度信息確定高低閾值,檢測、連接邊緣.
算法描述如下:
①將欲檢測的灰度圖像F與形態(tài)學(xué)結(jié)構(gòu)元素進(jìn)行開閉運算,去除噪聲,得到濾波后圖像F′;
②根據(jù)Sobel算子的四個方向梯度模板計算梯度和幅值;
③對圖像F′進(jìn)行非極大值抑制;
④根據(jù)圖像灰度平均方差Eave和平均灰度Fave確定閾值;
⑤檢測并連接邊緣.
為了驗證算法的有效性,分兩種情況在軟硬件環(huán)境為:Intel 2.5GHZ雙核CPU,4GB內(nèi)存,M atlab2012B的條件下進(jìn)行仿真實驗:無噪聲情況,加入噪聲情況,將本文的算法與傳統(tǒng)的Canny算法進(jìn)行比較.
圖2 無噪聲情況下Lina圖像
圖3 加入均值為0、方差為0.1椒鹽噪聲Lina圖像
對比實驗結(jié)果可以看出,傳統(tǒng)算法對邊緣表現(xiàn)得籠統(tǒng),而本文算法可檢測出更多的邊緣細(xì)節(jié);圖2和圖3的(b)中,左邊的長桿出現(xiàn)斷裂情況,臉龐有明顯斷裂;由于對灰度緩慢變化的區(qū)域檢測到的信息少,連續(xù)性差,導(dǎo)致冒頂和頭發(fā)細(xì)節(jié)部分也不好;而從圖2和圖3的(c)中可看出,左邊的長桿、臉龐、頭發(fā)檢測的情況明顯比傳統(tǒng)算法好;對比圖2和圖3可看出,本文算法受噪聲影響較小,定位更準(zhǔn)確,比傳統(tǒng)算法的邊緣清晰,邊緣檢測效果較好.
針對傳統(tǒng)Canny邊緣檢測算法的效果易受噪聲、光照等因素的影響,人工選擇參數(shù),自適應(yīng)性差等不足,對傳統(tǒng)的Canny算法進(jìn)行了改進(jìn),用復(fù)合形態(tài)學(xué)濾波器代替高斯濾波器,降低噪聲影響;采用拓展方向模板的Sobel算子計算梯度,提高邊緣定位效果;根據(jù)圖像的灰度均值和方差選取閾值,避免人為選擇閾值的局限.實驗結(jié)果表明:改進(jìn)算法比傳統(tǒng)Canny算法具有更好的檢測效果和抗噪性能.