李國民,曹隆,朱代先
(西安科技大學(xué)通信與信息工程學(xué)院,陜西西安 710054)
當(dāng)今社會,人們在追求高品質(zhì)生活的基礎(chǔ)上,更加注重安全問題,特別是房屋居住安全。但是近年來,人們在房屋安全問題上產(chǎn)生了一些質(zhì)疑,墻面出現(xiàn)裂紋問題尤為突出。
圖像分割能夠準(zhǔn)確地把裂紋區(qū)域從背景中提取出來,而且能夠保留裂紋邊緣特征。邊緣檢測是圖像分割中的一種常用方法,其原理是提取圖像中灰度發(fā)生變化大的區(qū)域,由此確定裂紋區(qū)域的位置。經(jīng)典的邊緣檢測算子一般有以一階微分和二階微分為基礎(chǔ)的兩種類型[1],一階微分算子主要有Kirsch 算子、Roberts 算子和Sobel 算子等,特點是運算速度快,但是邊緣定位不精準(zhǔn);二階微分算子主要有LoG 算子、Laplacian 算子和Canny 算子等,特點是彌補了一階微分算子邊緣定位不精準(zhǔn)的問題,但是出現(xiàn)了對噪聲敏感的問題[2-3]。在此背景下,文中提出了一種動態(tài)閾值檢測和形態(tài)學(xué)綜合算法,該算法能在抑制噪聲的同時較好地檢測到裂紋圖像的邊緣。
房屋墻面裂紋檢測是利用HALCON 軟件中的圖像處理方法進(jìn)行編程實現(xiàn)的。HALCON 是德國Mvtec 公司研發(fā)的一款機器視覺軟件,擁有廣泛的機器視覺集成開發(fā)環(huán)境,便于對圖像進(jìn)行分析處理。墻面裂紋檢測流程如圖1 所示。
圖1 墻面裂紋檢測流程圖
為了方便后期進(jìn)行圖像處理,在圖像采集過程中規(guī)定采集環(huán)境為自然光,在垂直于墻面高度約為40 cm 處完成采集。
在采集圖像前需要在裂紋附件貼5 cm 長黑白格進(jìn)行標(biāo)定,貼黑白格的目的有以下兩方面:首先是圖像畸變之后進(jìn)行校準(zhǔn);其次是進(jìn)行開裂大小的計算,利用黑白格長度與像素進(jìn)行換算。
由于采集環(huán)境的影響,不便設(shè)立一個固定機位進(jìn)行圖像采集,所以由操作人員進(jìn)行手持相機進(jìn)行拍攝。這種方式在采集圖像的過程中有一定的不確定性,特別是手的抖動和采集角度改變?nèi)菀自斐蓤D像畸變。如果不及時進(jìn)行圖像校正,就會使處理結(jié)果產(chǎn)生誤差[4]。經(jīng)研究發(fā)現(xiàn),采用投影變換對畸變圖像進(jìn)行校正的效果最優(yōu)。
在變換過程中,直線映射后仍然是直線,但不一定保持原有的平行度,投影變換是將產(chǎn)生畸變的圖像投影到一個新的視平面,其變換公式如下[5],
也可以將上述四對點代入式(2),得到八個方程,聯(lián)立之后可得變換矩陣。
圖像校正流程圖如圖2 所示,其中包含了圖像校正過程所用的方法和算子。
圖2 圖像校正流程圖
圖像校準(zhǔn)過程的第一步是對目標(biāo)圖像進(jìn)行邊緣檢測,由于黑白格與背景色差異較大,因此根據(jù)灰度值和形狀進(jìn)行提取區(qū)域并生成輪廓,對應(yīng)算子為threshold、shanpe_trans 和gen_contour_region_xld;第二步對提取到的邊緣輪廓進(jìn)行分離,并對分離之后的輪廓進(jìn)行分類,對應(yīng)算子為segment_contour_region_xld 和select_shap-e_xld;第三步是邊緣擬合,使用算子fit_line_contour_xld,其目的是對整理好的輪廓xld 進(jìn)行計算[6];第四步是使用算子intersection_lines 求出四個點,經(jīng)過上述一系列操作之后便可得到變換前后的四對點;最后將得到的點代入到投影變換算子hom_vector_to_proj_hom_mat2d 中,得到最終的校正圖像。畸變圖像如圖3(a)所示,校正后圖像如圖3(b)所示。
圖3 圖像校正
2.2.1 圖像濾波
采集到的圖像由于外界環(huán)境或者是相機的問題,會存在一定的噪聲。為了去除這些噪聲,以達(dá)到更好的處理效果,在預(yù)處理時進(jìn)行圖像濾波操作。圖像濾波其實就是在盡量保留圖像細(xì)節(jié)特征的條件下,對圖像噪聲進(jìn)行抑制。常見的濾波方式有中值濾波、均值濾波、高斯濾波和導(dǎo)向濾波,而不同的濾波方式處理后的圖像效果也不相同,處理效果的好壞直接影響到后續(xù)圖像處理和分析的有效性和可靠性[7]。
1)中值濾波是非線性的圖像處理方法,在去噪的同時可以保留邊緣信息,它將臨近像素的灰度值按照大小排列,取中間位置的值作為中值濾波后像素點的灰度值。中值濾波對圖像中孤立的噪聲點消除效果好,尤其是椒鹽噪聲,對應(yīng)的算子為median_image。
2)均值濾波是典型的線性圖像處理方法,對圖像內(nèi)部的噪聲有很好的抑制作用。它將臨近的像素灰度值進(jìn)行取平均值,用該平均值代替原來的像素值,因此降噪后圖像的清晰度不理想,對應(yīng)的算子為mean_image。
3)高斯濾波是一種線性平衡濾波,高斯濾波器的高斯核內(nèi)各系數(shù)是根據(jù)二維高斯分布函數(shù)得到的[8],可用于圖像模糊化(去除細(xì)節(jié)和噪聲)。
式中,G(x,y)是高斯函數(shù)值,x、y是橫縱坐標(biāo)值,σ是高斯函數(shù)標(biāo)準(zhǔn)差。
4)導(dǎo)向濾波不僅能實現(xiàn)雙邊濾波的邊緣平滑,而且在邊緣檢測方面有很好的效果[9]。濾波器的數(shù)學(xué)公式為:
式中,p是輸入圖像,I是引導(dǎo)圖像,q是經(jīng)過濾波后的輸出圖像,i、j分別表示像素下標(biāo),Wij是和引導(dǎo)圖像I相關(guān)的濾波核。
導(dǎo)向濾波器的一個重要假設(shè)就是認(rèn)為濾波后的結(jié)果圖q和引導(dǎo)圖像I在濾波窗口內(nèi)存在線性關(guān)系:
式中,wk是以k為中心像素的窗口,ak和bk都是該窗口對應(yīng)的線性系數(shù)。
需注意的是,文中引導(dǎo)圖像就是原圖像,此時導(dǎo)向濾波器就變成了保邊濾波器(Edge Preserving Filter)。
使用以上四種圖像濾波方法,對墻面原始圖像進(jìn)行濾波操作,原始圖像與濾波圖像如圖4 所示。
圖4 原始圖像與濾波圖像
考慮到所要處理的圖像受環(huán)境影響較大,噪聲也較大,因此為保留圖像中裂紋細(xì)節(jié),通過對比處理效果,優(yōu)先選取導(dǎo)向濾波。
2.2.2 圖像增強
經(jīng)過濾波去除掉噪聲后,進(jìn)行圖像增強,圖像增強的目的是增強圖像高頻區(qū)域(邊緣和拐角)的對比度,為后續(xù)的特征提取做準(zhǔn)備[10]。圖像增強后的效果如圖5 所示。
圖5 圖像增強后的效果
2.3.1 動態(tài)閾值檢測和形態(tài)學(xué)綜合算法
閾值分割是圖像分割中的一項技術(shù),是直接對被檢測圖像目標(biāo)區(qū)域進(jìn)行分割的方法[11]。設(shè)定不同的閾值,根據(jù)閾值將像素強度不同的區(qū)域分開,進(jìn)而選取ROI(Region of Interest),即感興趣區(qū)域。閾值分割可以用式(6)表示[12]:
式中,f(x,y)是輸入圖像,g(x,y)是輸出圖像,T為閾值,“1”表示選中區(qū)域,“0”表示背景區(qū)域。
由式(6)可知,選取適當(dāng)?shù)牡拈撝礣是至關(guān)重要的,文中主要針對全局閾值分割(算子threshold)和動態(tài)閾值分割(算子binary_threshold)這兩種方法進(jìn)行閾值的選取。全局閾值分割利用直方圖進(jìn)行分析,根據(jù)波峰和波谷的關(guān)系,選取出一個中間閾值;而動態(tài)閾值分割相對于全局閾值分割的優(yōu)勢是不用人為設(shè)置閾值,適用范圍更廣,其原理是對原圖像和處理后的圖像做差,選取亮色區(qū)域或暗色區(qū)域即可,特點是抗干擾性強,不會隨光照變換而變換。圖像灰度直方圖以及處理效果如圖6 所示。
圖6 閾值分割圖
全局閾值算法中根據(jù)灰度直方圖選取閾值為130,圖像中裂紋像素在分割的同時包含了一部分背景像素;動態(tài)閾值算法相對于全局閾值,在處理裂紋像素的精度上更高,且在適用廣泛性上要優(yōu)于全局閾值分割算法,因此優(yōu)先選取動態(tài)閾值算法。
利用形態(tài)學(xué)方法,對細(xì)小裂紋處產(chǎn)生的斷裂采用閉運算,它的運算過程是先對圖像進(jìn)行膨脹再進(jìn)行腐蝕的過程[13],數(shù)學(xué)表達(dá)式如下:
式中,⊕代表膨脹運算,Θ 代表腐蝕運算。
對提取到的裂紋進(jìn)行分析,對裂紋數(shù)量(密度)、裂紋的面積和裂紋的最大寬度進(jìn)行讀取。通過2.1 章節(jié)中所述黑白格進(jìn)行像素和尺寸的換算,進(jìn)而可以得出裂紋的面積和寬度[14]。該方法提取到的裂紋數(shù)量為3,裂紋面積為439.29 mm2,最大寬度為2.48 mm。
2.3.2 Roberts算子
Roberts 算子是一階導(dǎo)數(shù)邊緣算子,類似于Sobel算子和Prewitt 算子,采用2×2 模板求相鄰對角的像素之差,但忽視了水平和垂直方向,導(dǎo)致漏檢,適合用于邊緣灰度變化明顯的圖像分割[15],其卷積模板如圖7 所示,處理效果如圖8(a)所示。
圖7 Roberts算子模板
2.3.3 Sobel算子
Sobel 算子是在Roberts 基礎(chǔ)上改進(jìn)的3×3 算子,對圖像像素進(jìn)行微分求導(dǎo),計算圖像梯度值,對生成像素的灰度值做閾值計算,從而求得邊緣信息,計算過程如下:
式中,Gx、Gy分別表示對原始圖像在x和y方向上求導(dǎo),I是輸入圖像,三階矩陣分別是垂直方向和水平方向上的模板。
求出圖像近似梯度值如下:
處理效果如圖8(b)所示。
2.3.4 Kirsch算子
Kirsch 算子是R.Kirsch 提出的一種邊緣檢測算法,在保持圖像細(xì)節(jié)和去除噪聲方面有很好的效果,但存在邊緣判定不精準(zhǔn)、選取邊緣較粗等缺點[16]。
采用代表八個方向的模板對圖像中的像素點進(jìn)行卷積并求導(dǎo)數(shù),取結(jié)果中最大值作為圖像的邊緣輸出,處理效果如圖8(c)所示。
2.3.5 LoG算子
LoG 算子是二階微分算子,是在拉普拉斯算子基礎(chǔ)上改進(jìn)的一種邊緣檢測算子。在圖像進(jìn)行拉普拉斯邊緣檢測之前使用高斯濾波對圖像進(jìn)行降噪[17],正是這一過程導(dǎo)致在降低噪聲干擾的同時也會把尖銳的邊緣變得平滑。該算子的缺點是弱邊緣檢測效果并不理想,處理效果如圖8(d)所示。
圖8 裂紋檢測效果圖
為驗證所設(shè)計方法的檢測效果,利用HALCON軟件與2.3 節(jié)所述方法進(jìn)行對比。由于裂紋面積和寬度不便于計算,所以用黑白格進(jìn)行對比,面積誤差檢測結(jié)果如表1 所示,寬度誤差檢測結(jié)果如表2所示。
表1 面積誤差檢測結(jié)果
表2 寬度誤差檢測結(jié)果
分析表1 和表2 可知,所提方法檢測裂紋面積和寬度的誤差率明顯低于其他四種方法,用所提方法檢測裂紋結(jié)果如表3 所示。由于個別裂紋距離太近,因此檢測出裂紋的數(shù)量(密度)因檢測方法的不同會產(chǎn)生很小的差異,這里沒有列出,而裂紋的面積實質(zhì)上也是數(shù)量的另一種表達(dá)。
表3 裂紋檢測結(jié)果
針對墻面裂紋的檢測,文中提出了一種動態(tài)閾值檢測和形態(tài)學(xué)綜合算法,該算法能夠有效降低圖像噪聲,并提取特征信息,達(dá)到了預(yù)期的處理效果。通過對比LoG 算子、Sobel 算子、Kirsch 算子和Roberts算子,證明提出的算法在裂紋面積和寬度誤差方面有明顯的優(yōu)勢。但是房屋安全問題不僅僅是裂紋這一個問題,還有力學(xué)等各方面知識交匯在一起,所述方法將來可以與其他學(xué)科知識進(jìn)一步改善交融,以獲得更滿意的處理效果。