郭運沖,李孟軍,劉名果,敖天勇
(河南大學(xué)物理與電子學(xué)院,河南 開封 475000)
建筑物裂縫檢測在建筑物健康監(jiān)測領(lǐng)域中具有重要的意義[1]。裂縫邊緣檢測的效果決定著建筑物裂縫寬度測量和建筑物健康程度判斷的準確性。隨著計算機視覺和數(shù)字圖像處理技術(shù)的快速發(fā)展和應(yīng)用,以圖像處理技術(shù)為核心方法進行建筑物裂縫檢測成為一種趨勢。張海明等人針對當前大型工程的檢測,提出一種基于圖像處理的非接觸式裂縫檢測方法[2]。李鵬等人針對非均勻背景中傳統(tǒng)分割算法復(fù)雜度等問題,提出一種裂縫的自適應(yīng)閾值分割算法[3]。肖鋒等人基于數(shù)字圖像處理技術(shù)對建筑物裂縫進行檢測[4]。Oliveira H等人提出一種裂縫自動檢測系統(tǒng)[5]。這些研究表明基于圖像處理技術(shù)的建筑物裂縫邊緣檢測正成為建筑物健康監(jiān)測重要手段之一。圖像邊緣檢測方法主要是從圖像的高頻分量中提取邊緣信息,主要手段是微分運算?;谔荻人阕幽0暹吘墮z測算法是邊緣檢測常用的手段,常見的算法有Roberts、Soble、Prewitt、Log、Canny等[6-8]。其中Canny算子具有較高的信噪比和檢測精度,是當前效果較優(yōu)的邊緣檢測算子,得到了廣泛的應(yīng)用[9-12],但是傳統(tǒng)的Canny算子中高斯函數(shù)的方差和高低閾值的選取均需要人為操作,自適應(yīng)性差,且梯度計算采用的是2×2鄰域中的有限差分均值,對含噪聲裂縫圖像比較敏感,同時提取的裂縫邊緣方向性較弱,具有局限性。
針對Canny算子的優(yōu)化,也有眾多研究。王海龍等人提出一種改進的Canny自適應(yīng)閾值選定方法[13],達到了良好的邊緣檢測效果。Marina 等人提出一種改進的Canny算法,用改進的中值濾波器替代高斯平滑濾波,有效地去除了散斑噪聲[14]。針對傳統(tǒng)Canny算子中高、低閾值難以選取的問題,Garima等人提出一種基于分水嶺算法和自適應(yīng)閾值的改進Canny算法,對圖像進行有效的自動分割[15]。DUAN Zhenyun等人為提高傳統(tǒng)Canny算法自適應(yīng)性,利用直方圖選取高低閾值[16]。
現(xiàn)有的研究結(jié)果多集中在濾波自適應(yīng)和閾值選取上,雖然在一定程度上能夠提高檢測精度,但是在面向建筑物裂縫的特殊場景中,仍然存在著一些邊緣信息會被處理掉,導(dǎo)致邊緣檢測結(jié)果中邊緣數(shù)量減少等問題,引起測量精度下降。針對Canny算子在建筑物裂縫圖像邊緣檢測上存在的不足之處,本文提出了一種改進Canny的邊緣檢測算法,采用雙邊濾波器和中值濾波器相結(jié)合的混合濾波器對建筑物裂縫圖像去噪,改進梯度方向的劃分,采用基于Otsu算法和梯度直方圖獲取最佳閾值的方式。該改進算法對含噪聲圖像的處理有明顯優(yōu)勢,能提高算法的適應(yīng)性。實驗結(jié)果表明,所提出的改進Canny的邊緣檢測算法在邊緣檢測和抗噪聲干擾方面有較好的效果。
Canny邊緣檢測算子是由John F.Canny提出的一種多級檢測算法[17]。其基本流程如圖1所示。
圖1 傳統(tǒng)Canny邊緣檢測算子基本流程圖
Canny邊緣檢測算法在進行處理前首先用高斯濾波器對輸入圖像進行平滑濾波去除噪聲,采用二維高斯函數(shù)的一階導(dǎo)數(shù)對圖像進行平滑,取二維高斯函數(shù)為
(1)
其梯度矢量為
(2)
為了提高Canny算子的運算速度,將?G(x,y)的二維卷積模板分解為兩個一維濾波器
(4)
然后將這兩個模板分別與圖像f(x,y)進行卷積得到
(6)
傳統(tǒng)的Canny算子從水平和垂直兩個方向上采用2×2鄰域內(nèi)的有限差分來求取數(shù)據(jù)陣列M(x,y)的梯度。點(x,y)處兩個方向的偏導(dǎo)數(shù)Nx(x,y)和Ny(x,y)分別為
Nx(x,y)=[M(x,y+1)-M(x,y)]/2
+[M(x+1,y+1)-M(x+1,y)]/2
(7)
Ny(x,y)=[M(x,y+1)-M(x+1,y)]/2
+[M(x,y+1)-M(x+1,y+1)]/2
(8)
導(dǎo)數(shù)的計算對噪聲非常敏感,從水平和垂直兩個方向?qū)D像進行邊緣檢測,其檢測結(jié)果容易出現(xiàn)漏檢的情況。
像素的梯度幅值和梯度方向用直角坐標到極坐標轉(zhuǎn)化公式來計算,采用二階范數(shù)來計算梯度幅值和梯度方向分別為式(9)與式(10)。
(9)
P[x,y]=arctan(Ny[x,y]/Nx[x,y])
(10)
如果像素點(x,y)的梯度幅值Q(x,y)大于或等于沿梯度方向P(x,y)兩個相鄰像素點的梯度幅值,則可以判定該點為可能的邊緣點。
僅僅計算得到建筑物裂縫圖像的全局梯度并不能夠準確得獲取到邊緣,因此為了得到比較準確的建筑物裂縫圖像的邊緣點,需要對其進行細分,找到幅值波動最突出的邊緣點。非極大值抑制的處理流程為:首先找出梯度強度的非零點,然后順著該點的梯度方向找到其相鄰的兩個點,如果這兩個鄰近點的幅值大于它們的起點,那么可以判斷該點并不在邊緣上,反之則可以把其作為候選的邊緣點。
雙閾值算法是對經(jīng)過非極大值抑制后的圖像分別使用高、低兩個閾值進行分割。如果點的邊緣強度值比高閾值大,那么將該點作為邊緣點進行標記;如果比低閾值小,則將其作為非邊緣點記錄下來;若處于高閾值和低閾值之間,需要判斷該像素點是否與之前得到的邊緣點八連通,如果連通則將該像素點標記為邊緣點,反之為非邊緣點。這樣不斷地標記邊緣點,就能把不閉合的邊緣點連接成邊緣輪廓,從而可以得到圖像的邊緣。
傳統(tǒng)Canny邊緣檢測算法是通過高斯濾波器來處理建筑物裂縫圖像,處理過程中常常因為參數(shù)選擇不合適,難以得到理想的去除噪聲的裂縫圖像。建筑物裂縫圖像平滑濾波的目的是消除噪聲、提高信噪比,但實際上在對建筑物裂縫圖像平滑濾波過程中,一些邊緣的信息會被處理掉,導(dǎo)致邊緣檢測結(jié)果中邊緣數(shù)量減少。因此可以采用雙邊濾波和中值濾波器級聯(lián)的混合濾波器對Canny算法中的濾波進行改進。雙邊濾波器能夠達到增強保邊的目的,且減少了邊緣的損失。中值濾波器在抑制噪聲的同時能夠保留邊界,對提取建筑物裂縫圖像邊緣的信息具有很大的優(yōu)勢。
Canny邊緣檢測算子中高斯濾波器只考慮了像素點之間的歐式距離。非線性的雙邊濾波器內(nèi)的核函數(shù)在此基礎(chǔ)上考慮了像素間灰度值的影響,即雙邊濾波器的加權(quán)系數(shù)由兩部分組成,一部分由像素間的空間距離之差確定,稱之為空間鄰近度因子;另一部分由像素間的灰度值之差確定,稱之為灰度相似度因子。雙邊濾波器濾波后的每個像素的灰度值等于鄰域像素的加權(quán)平均,雙邊濾波的權(quán)重等于空間鄰近度因子和灰度相似度因子的乘積。這樣確保了建筑物裂縫圖像中,只有空間距離近、灰度值差異不大的鄰域像素對中心像素點的濾波效果有很大影響。這樣不僅能完整地保存邊緣,還能完成圖像的噪聲去除。
設(shè)建筑物裂縫圖像I在坐標點p=(x,y)的灰度值為Ip,濾波后得到的建筑物裂縫圖像BI在坐標點P的灰度值定義為BIp,雙邊濾波的公式如式(11)、(12)所示。
(12)
式中,q=(u,v)為中心像素P的鄰域像素點,鄰域像素點集合為S,Wp為歸一化因子,Gσs為空間鄰近度因子,Gσr為灰度相似度因子,因子表達式由式(13)和式(14)給出
(14)
其中,σs是基于高斯函數(shù)的距離標準差,控制著空間域濾波核函數(shù)的徑向作用范圍;σr是基于高斯函數(shù)的灰度標準差,控制著灰度濾波核函數(shù)的徑向作用范圍。兩者決定著雙邊濾波器的性能,且能根據(jù)建筑物裂縫邊緣圖的實際情況進行人為的調(diào)整,從而調(diào)整雙邊濾波器的實際效果。
像素的加權(quán)值是由像素位置的相對空間和灰度變化范圍來調(diào)節(jié)的,在建筑物裂縫圖像中像素值無太大波動的區(qū)域,其像素范圍域權(quán)重相當于1,建筑物裂縫圖像中空間域權(quán)重起著關(guān)鍵作用,處理得到的效果和高斯濾波器處理建筑物裂縫圖像的效果類似。然而在建筑物裂縫圖像中像素值變化大的區(qū)域,像素范圍域權(quán)重會出現(xiàn)明顯的變化,從而雙邊濾波器能在消除噪聲的同時保留邊緣的信息。
中值濾波器在一維情形下是一個含有奇數(shù)個像素的滑動窗口,窗口正中間那個像素的值用窗口內(nèi)各像素值的中值代替。設(shè)輸入的序列為{Xi,i∈I},I為自然數(shù)集合或子集,窗口的長度為n,則中值濾波器的輸出結(jié)果為yi=Med{Xi}=Med{Xi-u,…,Xi,…,Xi+u},其中i∈I,u=(n-1)/2。本文使用3×3模板,需要處理以坐標(x,y)為中心的9個灰度值,這些灰度值以升序排列,第五個分量為中值,用此分量代替目標點的灰度值,結(jié)合雙邊濾波器有效地對裂縫圖像中的噪聲進行了抑制。
傳統(tǒng)的Canny邊緣檢測算法中計算方向角時是把梯度劃分成為4個方向,分別為0°、45°、90°、和135°。建筑物裂縫圖像邊緣的梯度方向不一定是沿著這四個方向分布。使用傳統(tǒng)劃分方法會導(dǎo)致邊緣的細化程度較低,可能會遺漏掉部分圖像的信息。因此,本文提出一種對梯度方向更加細致的劃分方法,解決傳統(tǒng)Canny邊緣檢測算法出現(xiàn)假邊緣和丟失一些真實邊緣細節(jié)的問題。
改進的梯度方向劃分如圖2所示,將梯度方向劃分成6個區(qū)間。
圖2 改進方向劃分圖
其中各個方向的偏導(dǎo)數(shù)計算公式如下:
1)處于0°方向的方向偏導(dǎo)數(shù)為
A0°(x,y)=I(x+1,y)-I(x-1,y)
(15)
2)處于45°方向的方向偏導(dǎo)數(shù)為
A45°(x,y)=I(x-1,y+1)-I(x+1,y-1)
(16)
3)處于90°方向的方向偏導(dǎo)數(shù)為
A90°(x,y)=I(x,y+1)-I(x,y-1)
(17)
4)處于135°方向的方向偏導(dǎo)數(shù)為
A135°(x,y)=I(x+1,y+1)-I(x-1,y-1)
(18)
將中心像素點的梯度幅值與其相鄰2個方向上的4個像素點梯度幅值比較,若前者比后者大則可將該點梯度幅值設(shè)置為255,并且標記該點為邊緣像素點,反之均為非邊緣像素點,并將其梯度幅值設(shè)置為0。這種方法能提高梯度計算的魯棒性,減少噪聲的干擾。
傳統(tǒng)Canny算法需要人為的設(shè)定固定的高低閾值,高閾值設(shè)置過高會導(dǎo)致建筑物裂縫圖像中的一些重要邊緣信息丟失,低閾值設(shè)置過低會導(dǎo)致檢測出較多的虛假邊緣。本文采用最大類間方差法(Otsu)與梯度直方圖結(jié)合的算法計算高閾值Th,并設(shè)定低閾值為Tl=Th/2。改進后的算法增強了Canny算子的自適應(yīng)能力。Otsu法是一種使類間方差最大的自動求取閾值的方法。假設(shè)圖像像素為N,灰度范圍為[0,L-1],對應(yīng)灰度級i的像素數(shù)為Ni,概率為
Pi=ni/N,i=0,1,2,…,L-1
(19)
把圖像中的像素按灰度值用閾值T分成兩類C0和C1,C0由灰度值在[0,T]的像素組成,C1由灰度值在[T+1,L-1]的像素組成,對于灰度分布概率,整幅圖像的均值為
(20)
則C0和C1的均值為
(21)
由式(20)與式(21)可得
uT=?0u0+?1u1
(22)
類間方差的定義為
-2(?0u0+?1u1)uT
=?1?0(u0-u1)2
(23)
通過Otsu法獲得閾值后,因為梯度直方圖表現(xiàn)了邊緣的強度等信息,為了減少丟失一些必要的裂縫邊緣點,采用梯度直方圖可以更確切的觀察當前取得的閾值是否會造成邊緣信息的丟失。設(shè)高閾值和低閾值分別為TH和TL,高閾值的選取方法為:根據(jù)建筑物裂縫圖像特征得到的梯度直方圖,從小到大逐漸累計像素點的數(shù)目并觀察效果,如果達到最佳效果后記錄下當前的級別值,將Otsu法處理后獲得的圖像與該方法處理后獲得的圖像進行對比,如果Otsu法處理后的像素點與梯度直方圖法處理后的像素點相差小于β,則可以認為此時的級別值為高閾值TH,求得高閾值后,將高閾值乘以一個比例因子即可得到其低閾值。
為了驗證本文提出算法的有效性,該實驗在Intel Core i7-6700 @3.40GHz CPU,8GB RAM的Windows7計算機上使用MATLAB R2016a平臺實現(xiàn)。
本文采用雙邊濾波器和中值濾波器的混合濾波器代替高斯濾波器,設(shè)雙邊濾波器邊長為5,σs與σr的值分別取3和0.1,對建筑物表面裂縫圖像進行濾波。圖3分別給出了本文算法、均值濾波、高斯濾波、自適應(yīng)濾波、排序濾波算法的實驗對比結(jié)果。
圖3 建筑物裂縫圖像濾波三組實驗對比結(jié)果
從圖3中三組實驗結(jié)果可以看出如下:均值濾波后的圖像變得模糊;高斯濾波方法邊緣會產(chǎn)生模糊,這主要是因為高斯核只考慮了空間分布,沒有考慮到像素值的差異;自適應(yīng)濾波在抑制部分噪聲的同時保留了邊緣信息;排序濾波的處理會造成部分裂縫特征信息的丟失,同時背景的噪聲未能很好的抑制去除;本文提出的改進型混合濾波器在平滑濾波的同時保留了邊緣的信息,這對于后期提取建筑物裂縫圖像邊緣信息具有很大的優(yōu)勢。
本文采用峰值信噪比(PSNR)和均方誤差(MSE)來對建筑物表面裂縫邊緣檢測效果進行評價。峰值信噪比越大,可得出處理過后的建筑物表面裂縫圖像的信息量相對較大,裂縫圖像表面噪聲相對較少,裂縫圖像相對清晰。均方誤差值越小,可得出處理過的表面裂縫圖像與原圖較接近。表1是三組原始表面裂縫圖像分別經(jīng)過均值濾波、高斯濾波、自適應(yīng)濾波、排序濾波與本文算法得到的峰值信噪比和均方誤差的實驗對比結(jié)果。表1中PSNR提高百分比和MSE減少百分比的定義見式(24)、(25)。
圖4 建筑物裂縫圖像邊緣檢測三組實驗結(jié)果
表1 建筑物表面裂縫圖像去噪效果對比
(24)
(25)
根據(jù)表1中的計算結(jié)果,本文改進算法相對于高斯濾波算法而言,三組實驗的峰值信噪比平均提高了7.95%,均方誤差減少了46.45%,本文算法得出的建筑物表面裂縫圖像信息量較大且與原圖像接近,有效的抑制了噪聲且保持了建筑物裂縫圖像邊緣的信息。
采用經(jīng)過本文濾波算法后的三組實驗結(jié)果圖像,對其進行采用Otsu法與梯度直方圖結(jié)合算法得到建筑物裂縫圖像中裂縫邊緣。圖4為建筑物表面裂縫圖像的邊緣檢測實驗結(jié)果。
從圖4d和圖4e可以得出,傳統(tǒng)算法檢測出的邊緣數(shù)少,且邊緣的完整性不高,本文提出的算法比傳統(tǒng)的Canny算法獲取了更多的建筑物裂縫邊緣細節(jié)信息,改進型的Canny算法檢測出的建筑物裂縫邊緣細節(jié)更優(yōu),裂縫邊緣的主體輪廓連貫性也有所提高。
對于邊緣檢測算法性能的評價,文獻[18]給出了一種基于邊緣像素總數(shù)、4連通域數(shù)和8連通域數(shù)的評價方法,該評價方法能很好地反映邊緣檢測的效果。其基本的思想是:首先計算該算法檢測出的邊緣像素總數(shù)A、4連通域數(shù)B和8連通域數(shù)C,然后分別計算8連通域數(shù)C與邊緣像素總數(shù)A的比值,8連通域數(shù)C與4連通域數(shù)B的比值。C/A表示建筑物表面圖像裂縫邊緣線的完整度,C/A的比值越小,表明建筑物圖像裂縫邊緣連續(xù)性越好。C/B表示建筑物圖像裂縫的單一邊緣性,該比值越小,表明單像素邊緣所占比例越大,越符合單一邊緣響應(yīng)準則。
對三組建筑物表面裂縫邊緣測試圖像分別采用傳統(tǒng)Canny算法和本文所提出的改進算法進行邊緣檢測計算,并對檢測的結(jié)果進行邊緣像素總數(shù)、4連通域數(shù)和8連通域數(shù)的計算統(tǒng)計。該實驗詳細的參數(shù)計算結(jié)果如表2所示。
表2 建筑物表面裂縫測試圖像信息統(tǒng)計結(jié)果
從表2中的統(tǒng)計結(jié)果能夠得出,采用本文提出的建筑物表面裂縫邊緣檢測算法處理過的表面裂縫圖的C/A值比傳統(tǒng)算法的值小,采用本文提出的算法對裂縫邊緣檢測后的C/B值小于傳統(tǒng)邊緣檢測算法,表明本文提出的改進算法在建筑物表面裂縫圖像提取的邊緣連續(xù)性和單一邊緣性上較好。
本文對傳統(tǒng)Canny算法在建筑物裂縫檢測中存在的不足之處進行了改進。采用雙邊濾波器和中值濾波器的混合濾波器對建筑物裂縫圖像進行去噪處理,并在梯度計算和閾值的選取方面進行了優(yōu)化。實驗結(jié)果表明,改進后的算法不僅很好地抑制噪聲對邊緣檢測的干擾,而且能有效地保護邊緣細節(jié),裂縫邊緣檢測整體效果得到了提升。