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