宋大成, 張興媛, 王嘯偉, 陳 超, 李 達
(上海工程技術(shù)大學(xué) 航空運輸學(xué)院, 上海 201620)
圖像邊緣檢測是機器視覺的核心技術(shù),廣泛應(yīng)用于數(shù)字圖像處理和計算機視覺領(lǐng)域。圖像邊緣是圖像的主要特征之一,圖形邊緣檢測是圖像分析、識別的基礎(chǔ),是很多電子圖像處理技術(shù)的核心。圖像邊緣是不連續(xù)的灰度值,是有階躍型變化或屋頂型變化的像素灰度值的集合。其中計算圖像灰度梯度是邊緣檢測的主要方向,常用的邊緣檢測算子有Robert算子、Sobel算子、Prewitt算子等一階微分算子和LapLacian、Marr_Hildret等二階微分算子,微分算子通過模板和灰度圖像進行卷積,以提取邊緣,但提取中計算量較大,占用資源多,且過程較為粗糙,損失的邊緣信息較多。
在圖像邊緣檢測中,需滿足信噪比、定位精度和單邊響應(yīng)三個最優(yōu)原則[1],Canny[2]在1986年提出Canny邊緣檢測算法,而且在這3個原則中都有良好表現(xiàn),不僅有較大的信噪比,精度也很高,因此,被廣泛應(yīng)用于數(shù)字圖像處理領(lǐng)域。但隨著電子設(shè)備等的發(fā)展,傳統(tǒng)Canny算法的不足也逐漸顯露,主要表現(xiàn)在:計算量大、占用資源多、損失邊緣信息多和人為設(shè)定閾值,無法統(tǒng)一化等方面。近年來,很多學(xué)者提出了基于Canny算子的改善算法。文獻[3]提出自適應(yīng)閾值的流水線結(jié)構(gòu)改進型Canny邊緣檢測算法;文獻[4-5]提出采用自適應(yīng)濾波器代替?zhèn)鹘y(tǒng)Canny的高斯濾波器;文獻[6]采用小波變換增強圖像邊緣,消除傳統(tǒng)Canny算法對弱邊緣、不連續(xù)邊緣的信息損失,改善邊緣提取效果。文獻[7]提出采用迭代算法計算最佳高低雙閾值,可以有效地降低噪聲對選擇閾值的影響,從而取得最佳閾值。
基于傳統(tǒng)的Canny算法,針對傳統(tǒng)算法占用資源多、邊緣檢測效果不佳等問題,本文擬從梯度幅值的計算公式、方向角計算時劃分區(qū)域、單雙閾值的選取和用其它濾波代替高斯濾波這些內(nèi)容上進行改進。對此,可得研究論述如下。
傳統(tǒng)的Canny邊緣檢測算法的步驟可分述如下[8]。
(1)對輸入的圖像運用高斯濾波去除噪點。
(2)運用Sobel算子對每個像素點進行梯度幅值和方向角計算。
(3)運用非極大值抑制(NMS),剔除非最大值的像素點,進行圖像邊緣細化工作。
(4)確定高、低閾值,進行邊緣點的篩選。
對待研究的圖像采用高斯濾波進行去噪處理,高斯濾波時需用到如下數(shù)學(xué)公式:
(1)
其中,x和y是二維圖像的坐標,σ是高斯分布的標準差[9]。σ較小時,抑制噪聲效果較差,邊緣定位較精確;σ較大時,情況則相反。
計算梯度和方向角時采用Sobel算子,X和Y方向偏導(dǎo)數(shù)公式為:
Gx=[S(x,y+1)-S(x,y)+S(x+1,y+1)-S(x+1,y)]/2,
(2)
Gy=[S(x,y)-S(x+1,y)+S(x,y+1)-
S(x+1,y+1)]/2.
(3)
非極大值抑制為根據(jù)角度來對每個像素幅值和同方向兩個相鄰像素進行比較,如果小于其中一個則被舍棄,反之被保留。
針對傳統(tǒng)的Canny圖像邊緣檢測算法的不足,本文提出了如下改進:在計算梯度幅值時優(yōu)化了算法公式,減少了硬件資源的使用,方便在FPGA實現(xiàn);在方向角計算時,更加精細地劃分區(qū)域,提高邊緣細化的效果;閾值選取采用動態(tài)單閾值,很大程度上減少了資源占用;采用復(fù)合形態(tài)學(xué)濾波器代替高斯濾波器,去噪效果較好且保留更多的邊緣信息。
在圖像的邊緣檢測中,梯度方向表征了邊緣方向,梯度幅值表征了邊緣強度,因此在梯度方向上梯度強度最大的點就是邊緣點[10]。NMS 是非極大值抑制算法。在梯度幅值矩陣找到梯度方向上的最大值,并將其它的梯度幅值抑制為 0,可實現(xiàn)對圖像中目標的邊緣點定位及邊緣細化。
由于傳統(tǒng)NMS 采用式(4)計算梯度幅值需要進行平方和平方根計算,硬件實現(xiàn)相對復(fù)雜且占用資源較多,因此本文采用梯度水平分量和垂直分量絕對值的和近似替代式(4)的計算,如式(5)所示:
(4)
(5)
傳統(tǒng)的Canny邊緣檢測算法中計算方向角是將梯度劃分為4個方向,如圖1所示,分別為0°、45°、90°和135°[3,11]。按照這種劃分不夠細致,可能會漏掉部分圖像信息,因為圖像邊緣梯度不一定是沿著這四個方向分布,會導(dǎo)致邊緣細化程度較低。因此本文對圖像梯度方向進行更加細致的劃分,以便于達到更加細化邊緣的效果。
改進的梯度方向劃分如圖2所示,將傳統(tǒng)Canny算法中的2和4區(qū)域分別再劃分2個區(qū)域,由圖2可知,這樣總共將梯度方向角劃分成6個方向區(qū)域,對各個區(qū)域處理方法的分析描述見如下。
(1)當處于方向1和4時,處理方式與傳統(tǒng)Canny算法中的方向1和3相同。
(2)當處于方向2時,其梯度角與0°方向和45°方向緊密相鄰的4個像素點進行比較。
(3)當處于方向3時,其梯度角與45°方向和90°方向緊密相鄰的4個像素點進行比較。
(4)當處于方向5時,其梯度角與90°方向和135°方向緊密相鄰的4個像素點進行比較。
(5)當處于方向6時,其梯度角與135°方向和0°方向緊密相鄰的4個像素點進行比較。
其中,各個方向偏導(dǎo)數(shù)計算公式具體如下。
(1)當處于0°方向時,方向偏導(dǎo)數(shù)為:
G0°(x,y)=S(x+1,y)-S(x-1,y);
(6)
(2)當處于90°方向時,方向偏導(dǎo)數(shù)為:
G90°(x,y)=S(x,y+1)-S(x,y-1);
(7)
(3)當處于45°方向時,方向偏導(dǎo)數(shù)為:
G45°(x,y)=S(x-1,y+1)-S(x+1,y-1);
(8)
(4)當處于135°方向時,方向偏導(dǎo)數(shù)為:
G135°(x,y)=S(x+1,y+1)-S(x-1,y-1);
(9)
采用L2范數(shù)計算梯度幅值公式為:
G(x,y)=
(10)
梯度方向計算公式為:
θ(x,y)=arctan(Gy(x,y)/Gx(x,y)).
(11)
在比較過程中,只有當中心像素點的梯度幅值全部大于相鄰的2個方向上4個像素點梯度幅值,將該點梯度幅值置為255,判斷該點位邊緣像素點,其它情況下均為非邊緣像素點,梯度幅值置為0。本文這種改進的梯度方向角劃分方法相比于傳統(tǒng)Canny算法中的劃分方法更加細致,實驗證明可以有效地提高圖像邊緣細化的效果,且易于在各種應(yīng)用中實現(xiàn)。
圖1 傳統(tǒng)Canny算法梯度方向角劃分圖
Fig. 1 Gradient direction angle dividing graph of traditional Canny algorithms
圖2 改進算法梯度方向角劃分圖
Fig. 2 Gradient direction angle dividing diagram of improved algorithms
Canny邊緣檢測算法的高低閾值的大小直接決定著檢測到的邊緣信息的多少[12],傳統(tǒng)Canny邊緣檢測算法閾值選取時需要手動選取高低閾值,有很大的不確定性,文獻[7]提出采用迭代算法計算最佳高低雙閾值,但這種方法需要迭代計算,意味著需要占用與圖像分辨率成比例的資源。在很多應(yīng)用中,圖像的本身邊緣不像傳統(tǒng)圖像那樣復(fù)雜多變,真正的邊緣信息十分明顯。故本文提出采用動態(tài)單閾值的方式來減少電子硬件資源的使用,并且能夠在一定程度上保證圖像邊緣的完整性和精確性。動態(tài)單閾值在計算圖像時每一幀圖像都會計算一次,以保證選取的閾值適用于不同的圖像信息,同時也使其具有很好的魯棒性。計算步驟分述如下:
(1)求出整個圖像的梯度平均值Q0,去除圖像的背景信息,提取目標信息。
(2)將每個像素點的梯度幅值和Q0進行比較,將高于Q0的梯度幅值歸為一類,定義為D0,然后在D0中求出其平均值Q1。
(3)再將高于Q1的梯度幅值歸為D1,并求出Q1和D1的標準差δ。
(4)最后得出單閾值Q。數(shù)學(xué)計算公式如下:
Q=Q1+2*δ+T.
(12)
其中,T值為定值。
經(jīng)過大量的仿真實驗進行比較,T值選取為20,能夠達到理想的邊緣提取效果。經(jīng)過每一次的計算,Q值會隨圖像信息的變化而改變,達到可以適應(yīng)每幀圖像的目的,提高了單閾值的適應(yīng)性。
傳統(tǒng)的Canny邊緣檢測算法的第一個步驟是采用高斯濾波對圖像進行噪聲預(yù)處理(彩色圖片先進行灰度變換),但噪聲屬于高頻信號,邊緣信號也屬于高頻信號,高斯濾波處理后,相應(yīng)的邊緣信息也會減弱,有可能使得在后面的步驟漏掉一些需要的邊緣,特別是弱邊緣和孤立的邊緣。
針對傳統(tǒng)Canny邊緣檢測算法的不足,本文做了如下改進:用形態(tài)學(xué)濾波代替高斯濾波,進行降噪處理,解決因消除噪聲過程中把弱邊緣和孤立邊緣同時去除的問題;提高了Canny算法對圖片邊緣的細化程度,使得到的結(jié)果更加接近真實圖像邊緣。這里,對數(shù)學(xué)形態(tài)學(xué)擬做研究概述如下[8]。
數(shù)學(xué)形態(tài)學(xué)起源于數(shù)學(xué)的集合論,是一門建立在格論和拓撲學(xué)基礎(chǔ)之上的圖像分析學(xué)科,是數(shù)學(xué)形態(tài)學(xué)圖像處理的基本理論。其基本的運算包括:腐蝕和膨脹、開運算和閉運算等。對此,研究推得闡釋表述如下。
(1)腐蝕。設(shè)X為圖像集合,N為形態(tài)學(xué)結(jié)構(gòu)元素,腐蝕的數(shù)學(xué)定義為:
XΘN={n|N+x?X},
(13)
式(13)表示用N對X進行腐蝕,按每個n來位移X并把結(jié)果或(OR)運算。
(2)膨脹。其數(shù)學(xué)定義為:
X⊕N={x|N+x∪x≠φ},
(14)
式(14)表示用N對X進行膨脹,按每個n來負位移X并把結(jié)果并(AND)運算。
(3)開運算。其數(shù)學(xué)定義為:
X°N=(XΘN)⊕N,
(15)
式(15)表示X被N開操作,先腐蝕再膨脹。
(4)閉運算。其數(shù)學(xué)定義為:
X·N=(X⊕N)ΘN,
(16)
式(16)表示X被N閉操作,先膨脹再腐蝕。
形態(tài)學(xué)濾波的效果取決于結(jié)構(gòu)元素的尺寸和形狀。在Canny算法中引入形態(tài)學(xué)濾波去除噪聲,基本原理是使用一定尺寸和構(gòu)架的形態(tài)結(jié)構(gòu)元素對圖形進行開閉運算,選取的結(jié)構(gòu)元素尺寸需要介于噪聲信號和邊緣信號之間,平滑噪聲,保留邊緣,以達到邊緣信息不被平滑的效果,而常見的形態(tài)學(xué)濾波很難達到,故需要選取復(fù)合形態(tài)濾波。本次研究選取的形態(tài)學(xué)濾波結(jié)構(gòu)元素詳見如下。
設(shè)Y為去噪之后的圖像集合,則2種常見的形態(tài)學(xué)濾波算子為:
Y1=(X·N)°N,
(17)
Y2=(X°N)·N,
(18)
構(gòu)造復(fù)合形態(tài)學(xué)濾波器,需要將2種濾波算子結(jié)合起來。本文構(gòu)造的復(fù)合形態(tài)學(xué)濾波器為:
(19)
其中,如果S的尺寸結(jié)構(gòu)太大,運算過程中會去除更多的噪聲信息,去噪效果更好,但是會平滑掉部分圖片邊緣信息,在Canny算法的后續(xù)步驟中丟失的邊緣信息會更多;如果S的尺寸結(jié)構(gòu)太小,運算過程中會保持更多的圖片邊緣信息,邊緣會更加細化,但是去噪效果欠佳。綜合前述分析可知,如果想保留更多的邊緣信息且去噪效果較好,S結(jié)構(gòu)元素的尺寸結(jié)構(gòu)尤為重要。通過實驗仿真證明,本文構(gòu)造的復(fù)合形態(tài)學(xué)濾波器可寫為如下數(shù)學(xué)形式:
(20)
本文的實驗環(huán)境為:Intel 2.50 GHz雙核CPU,運行內(nèi)存8 GB,Matlab2016a。
圖像分為無噪聲情況A1和有噪聲情況A2,分別應(yīng)用傳統(tǒng)Canny邊緣檢測算法和改進后的邊緣檢測算法進行比較,實驗結(jié)果如圖3、圖4所示。
(a)原始圖像 (b)傳統(tǒng)Canny算法 (c)改進后的算法
(a) Original image (b) Traditional Canny algorithm (c) The improved algorithm
圖3 無噪聲情況下Lena圖像處理結(jié)果
Fig. 3 Lena image processing results without noise
(a)加噪圖像 (b)傳統(tǒng)Canny算法 (c)改進后的算法
(a) Noisy image (b) Traditional Canny algorithm (c) The improved algorithm
圖4 有噪聲情況下cameraman圖像處理結(jié)果
Fig. 4 cameraman image processing results with noise
由圖3(A1)的對比實驗結(jié)果可以看出,改進后的Canny算法比傳統(tǒng)Canny算法檢測出的邊緣信息更多,邊緣也更加細致和清晰,在運算過程中,相對于傳統(tǒng)算法,改進的算法運算時間大幅度縮短,占用的資源更少,運行更加迅速。
由圖4(A2)的對比實驗結(jié)果可以看出,改進后的Canny算法比傳統(tǒng)Canny算法去噪效果更好,運行時間更短,而運行占用資源也更少。
文獻[13]提出一種Canny邊緣檢測算法評價方法,即計算各種算法檢測出的邊緣像素總數(shù)、4連通域數(shù)和8連通域數(shù),并對其比值加以比較。研究得到,比值1為8連通域數(shù)和邊緣點數(shù)的比值,比值越小,表示邊緣連續(xù)性越好;比值2為8連通域數(shù)和4連通域數(shù)的比值,比值越小,表明單像素邊緣所占比例越大,越符合單一邊緣響應(yīng)準則。對圖3無噪聲情況下Lena圖像處理結(jié)果進行數(shù)據(jù)統(tǒng)計,統(tǒng)計結(jié)果見表1。
表1 Lena 邊緣圖像信息統(tǒng)計結(jié)果表
對圖4有噪聲情況下cameraman圖像處理結(jié)果的峰值信噪比進行統(tǒng)計,統(tǒng)計數(shù)據(jù)見表2。
表2 cameraman圖像PSNR峰值信噪比
分析表2中cameraman圖像PSNR峰值信噪比數(shù)據(jù)可知,改進后的算法信噪比提高了15.1%,去噪效果更好。
將圖3和圖4算法的運行時間進行對比研究,最終得到的結(jié)果數(shù)據(jù)見表3。
表3 算法程序運行時間對比
Tab. 3 Comparisons of running time of algorithmic programsms
算法傳統(tǒng)Canny算法本文改進算法Lena7856cameraman6451
由表3分析可知,對于Lena圖,改進后的算法運行時間減少了28.2%;對于cameraman圖,改進后的算法運行時間減少了20.3%,因此改進后的算法在相當程度上節(jié)省了算法占用的硬件資源。
針對傳統(tǒng)Canny邊緣檢測算法存在的缺陷,本文進行了改進,取得了良好的邊緣檢測效果。通過實驗表明,改進后的算法對圖像的邊緣檢測更加細化,且保留的邊緣信息更多;在去噪方面,提高了圖像的峰值信噪比,有著更好的去噪效果;通過對算法程序時間的統(tǒng)計,得知改進后的算法更加簡潔,占用資源更少。