陳浩瀚 謝仁平 魏文紅
(東莞理工學院 計算機科學與技術學院,廣東東莞 523808)
混凝土路面裂縫是道路病害最早期的標志之一,不僅影響路面的平坦度以及穩(wěn)定性,還存在著塌陷、破裂等安全隱患[1]。因此,道路維護部門需要及時根據裂縫的長度、寬度以及生長方向等情況,對路面的損害程度進行評估,制定相應的修復方案[2]。
傳統的檢測手段依賴于工作人員的現場實地測量,不但費時費力,且測量結果較主觀。隨著攝影設備及機器視覺算法發(fā)展,使得通過裂縫圖像以及邊緣提取算法來獲取裂縫的實際信息成為一種可能[3-4]。常見的裂縫提取算法首先會將圖像轉化為灰度圖,再利用其灰度特征將目標裂縫與背景色區(qū)分開。如大津法(OTSU),通過計算前景色與背景色的最大類間方差將裂縫與背景分割開,但此方法只適用于灰度直方圖具有雙峰特征的圖像[5-6]。當目標與背景色差異過大時,即灰度直方圖存在多峰時,分割效果則不盡如人意。Canny算法利用圖像的梯度信息提取裂縫,即根據合適的閾值將裂縫邊緣快速、完整地提取,但如果圖像留存了過多的噪聲,許多與物體無關的邊緣也會被提取出來[7-8]。盡管通過高斯平滑濾波可以濾除部分噪聲,但圖像中不平整、不規(guī)則的部分仍會被當成裂縫提取。區(qū)域生長算法則是利用一定條件下選擇的像素點作為初始種子,再根據設定的判斷準則判定周圍的像素是否屬于同一區(qū)域。合適的初始種子點和合理的判斷準則是生成區(qū)域連續(xù)且完整的關鍵,否則,不僅會使算法效率降低,還會生成許多不屬于裂縫的錯誤邊緣信息[9-10]。
基于對以上算法優(yōu)點與缺點的分析,本文提出一種基于區(qū)域生長和梯度閾值分割的裂縫提取算法,算法依據圖像的梯度信息合理選擇區(qū)域生長的種子點與判斷準則提取裂縫的邊緣信息,再通過梯度閾值分割去除錯誤的偽裂縫,實現快速、完整的路面裂縫提取。
對于裂縫檢測而言,無論是路面上的陰影、水漬或者污點,還是路面上不規(guī)則的紋理信息,都會對算法的檢測結果產生影響。因此,必要的預處理可減少背景色噪聲對后續(xù)算法結果的影響。預處理操作包括灰度化、平滑濾波和灰度閾值分割?;叶然蓪D像從三通道的彩色圖轉化為單通道的灰度圖,大大減少了圖片存儲的容量,且灰度化后裂縫的特征信息依舊明顯。平滑濾波選用5×5的高斯濾波器,消除圖像中的高斯噪聲,使圖像更加平滑[11]?;叶乳撝捣指罾脠D像中背景色與前景色差異,將圖像中灰度值大于給定閾值的部分劃分為白色,從而濾除大部分的背景色。
由于裂縫與背景的梯度信息存在明顯差異,利用梯度變化便可以分割出裂縫的初始邊緣信息。但裂縫周圍梯度發(fā)生突變的像素點不止一個,如果直接將所有梯度突變的像素點都識別為邊緣,那么所得到的邊緣會不夠準確。為了得到正確的裂縫邊緣,可采用非極大值抑制的思想進行優(yōu)化,即如果對于所識別的裂縫邊緣像素點其屬于梯度方向上的極大值,那么就認為其屬于邊緣點。Canny算法就包含了非極大值抑制的思想,通過選取合適的閾值分割點,便可獲取大致的裂縫邊緣[12]。
區(qū)域生長算法是經典的圖像算法之一,其中心思想是將一個區(qū)域中具有相似特征的像素點合并為一個區(qū)域。算法的主要步驟如下:
第一步:選取合適的初始種子點;
第二步:設定生長過程中種子點周圍像素是否具有相似特征并進行合并的判斷準則;
第三步:停止生長的判斷準則。
從區(qū)域生長算法的中心思想可以看出,裂縫檢測的關鍵在于初始點和判定準則應能很好的將前景色和背景色區(qū)分。一般而言,對于噪聲較少、裂縫圖像較為清晰的圖片,其裂縫邊緣的灰度值與背景色和裂縫內部區(qū)域具有明顯差異,通過灰度值大小確定初始種子點和判定準則具有很好的效果[13]。但實際的裂縫圖片可能存在陰影、黑點等灰度特征干擾,僅依靠灰度信息進行區(qū)域生長的算法缺乏很好的泛化性。文獻[14]考慮到裂縫邊緣像素的角度通常會大于90°,并以此作為判定準則合并周圍成鈍角的像素點,但該做法可能會漏掉裂縫的部分邊緣。
雖然上述方法存在一定的局限性,但通過邊緣像素的灰度值變化和梯度變化來確定初始種子點和判定準則仍具有一定可行性。以此為思路,作出裂縫邊緣區(qū)域的梯度方向圖(如圖1),其中,箭頭的方向代表了梯度的方向,箭頭的長度代表梯度幅值大小。觀察圖1中的裂縫邊緣的梯度方向,可以看到裂縫邊緣區(qū)域的梯度幅值和梯度方向具有明顯的變化。因此,以裂縫的梯度幅值大小和梯度方向特征作為判定周圍像素是否屬于同一區(qū)域的準則。要獲取圖像的梯度方向特征,首先要獲得圖像在水平方向和垂直方向的梯度矩陣,采用3×3的Sobel一階微分算子求取輸入圖像在橫縱方向的梯度矩陣,則圖像每個像素的梯度幅值可以表示為
圖1 裂縫邊緣區(qū)域的梯度方向
z=|gx|+|gy| ,
(1)
其中,gx表示水平方向的梯度,gy表示垂直方向的梯度。采用橫、縱坐標方向的梯度絕對值之和代替?zhèn)鹘y的歐氏距離,犧牲了部分的精度換取更短的運行時間。由于圖像中裂縫邊緣的灰度有明顯變化,而相鄰像素點的灰度變化越大,梯度幅值就越大,越有可能是裂縫邊緣區(qū)域的像素。因此,將梯度幅值矩陣按降序排序,并依次將每一點作為區(qū)域生長的起點。
圖像梯度方向矩陣可以表示為
(2)
由于裂縫邊緣相鄰像素之間的梯度方向不會有很大突變,因此將種子點與周圍8鄰域的梯度方向作為生長的判斷準則。當種子像素點的8鄰域梯度方向存在相同或相近的像素點時,將其作為新的種子起點繼續(xù)生長,直到所有的種子點生長完畢??紤]到裂縫生長可能存在多個方向,即一個像素點的8鄰域存在多個梯度方向相同的點,因此在第一輪種子點區(qū)域生長完成后,以相同的種子點重復一次相同的生長操作,獲得更加完整的邊緣鏈。具體偽代碼流程如下所示。
區(qū)域生長算法輸入:梯度幅值矩陣M,梯度方向矩陣O,將M按降序排列得到的初始種子點S,方向閾值θ,狀態(tài)標志I輸出:若干條邊緣鏈1.將S置于集合G,設置對應狀態(tài)標志I(S)=02.for (num=0; num<2; num++) do3. for each S∈G do4. for each N∈Neighbourhood(S) 且I≠0 do5. if O(N)-O(S)<θ6. 將N加入G,設置I(N)=0,設置N為新的種子S7. end8. end9. 保存生成的邊緣鏈10. end11.end
區(qū)域生長算法獲取的一系列邊緣鏈,需要進一步驗證其長度是否有意義,并且判斷其是否為裂縫邊緣,降低錯誤率。同時,對于長度過長的邊緣鏈,需將其分段,并重新驗證其長度的合理性和有效性。因此針對該問題,本文依據梯度閾值對所獲取的邊緣鏈進行再次驗證分類。
首先需要定義裂縫的最小有效長度。不同的拍攝焦點,圖像長度、寬度與裂縫長度存在一定的比例關系。選用文獻[15]的裂縫數據集原圖作為測試數據,該數據集由537張混凝土裂縫圖像和對應語義分割標簽圖組成。經過大量測試,將裂縫的最小有效長度定義為
(3)
其中a和b表示輸入圖像的長度與寬度,α和β為修正系數,經過大量數據測試與分析,實驗中選擇α和β值分別為7.5和8。當所獲得的邊緣鏈長度小于最小有效長度時,則將其視為偽裂縫邊緣并剔除。
當所得的邊緣鏈足夠長時,考慮到所得邊緣鏈中可能也存在長度無效的偽裂縫邊緣,因此需要進一步的驗證。由于裂縫具有梯度幅值明顯變化的特點,設定橫坐標步長為梯度幅值20,縱坐標為對應梯度幅值范圍內的像素數的梯度直方圖H,并定義如下表達式對長度過長的裂縫做進一步驗證
(4)
(5)
其中,t為實驗測試后的梯度幅值閾值,經測試后本文中設定為60;d為當前測試邊緣鏈的最小梯度幅值;ht和hd為梯度幅值為t和d時梯度直方圖H所對應的值;m為最小有效長度;n為當前測試的邊緣鏈長度。當P′>P時,認為該邊緣鏈為正確的;當P′
為驗證本文算法的有效性,將本文算法與Canny算法、LSD[16]進行實驗對比。其中,Canny算法的主要思想是通過灰度圖的梯度值進行非極大值抑制,再由梯度值進行雙閾值檢測和連接邊緣;LSD算法的主要思想是通過灰度圖的梯度值進行區(qū)域生長,獲取矩形框內滿足梯度條件的線段,最后由線段的特定點組成分割結果。三種算法的裂縫提取效果如圖2所示。
由圖2可以分析出,隨著縱向的原圖(a)中裂縫的輪廓變得逐漸復雜以及背景噪聲逐漸增多,不同算法的最終裂縫提取結果差異較大。LSD算法在應對輪廓較為簡單的裂縫時,可以較為完整的將裂縫的邊緣提取出來。但如果裂縫不太規(guī)律、平整,存在大量彎曲的轉折點,LSD算法提取的效果則不太理想,提取的裂縫邊緣會有斷開、不連續(xù)等缺陷。Canny算法在梯度特征明顯、背景噪聲較少的圖像檢測時,可以較好的提取出裂縫的邊緣。但如果圖像中梯度特征不明顯、背景噪聲較多,則圖像中不規(guī)則紋理、污點也會被當成裂縫提取出來,錯誤率較高,效果較差。本文算法在裂縫輪廓變得復雜以及背景噪聲逐漸增多的情況,仍能獲得較完整的裂縫邊緣。對比圖2中的(b)列和(d)列,不難發(fā)現,(b)中LSD算法得到的第三幅到第五幅圖中矩形框部分提取的裂縫邊緣有明顯斷開痕跡,與之相反,而本文算法提取結果(d)中的第三幅到第五幅圖的相應部分提取的邊緣都更為連續(xù)、完整。
圖2 裂縫提取算法對比
對圖2不同算法的提取結果分別求取了準確率,三種算法的準確率結果如表1所示。由表1不難看出,隨著原圖圖像裂縫的輪廓變得復雜以及背景噪聲逐漸增多,各個算法的準確率均有所降低,但對比LSD算法和Canny算法的結果,本文算法均能擁有更高的準確率。因此,本文提出的基于區(qū)域生長和梯度閾值分割的路面裂縫提取算法,能更好地提取路面裂縫的邊緣信息,并據此更準確地推算出檢測裂縫的長度、寬度、面積等信息。
表1 三種算法的準確率對比
算法的運行時間也是衡量算法優(yōu)劣性的重要指標之一。在主頻為2.90 GHz、內存16GB的臺式機上,選取了圖2中5張具有代表性的原圖像進行測試,其裂縫的形狀輪廓及背景噪聲不斷變得復雜和增多,分別測試其在LSD算法、Canny算法和本文算法下的運行時間,每張圖片各測試5次,并取5次結果的平均值作為最終運行時間。由于Canny算法和本文算法由C++語言實現,而LSD算法由MATLAB語言實現,因此LSD算法的運行時間相對較長。表2列出了各算法的運行時間。
表2 三種算法的運行時間對比 ms
從表2的算法執(zhí)行時間結果,并結合圖2的原圖可以看出,隨著圖片裂縫輪廓復雜程度和背景噪聲的提高,各個算法的執(zhí)行時間都會變長。其中,LSD算法耗費時間最長,且面對越復雜的圖片,執(zhí)行時間中增加的部分也遠大于Canny算法和本文算法。三種算法中執(zhí)行速度最快的是Canny算法,最復雜的裂縫原圖5只花了28.3 ms便執(zhí)行結束,但從圖2可以看到,其執(zhí)行結果充斥著大量噪聲,裂縫邊緣檢測效果不佳。而本文算法具有同Canny算法相同數量級的執(zhí)行時間,并且隨著裂縫復雜度和背景噪聲的提高,執(zhí)行時間增加的部分遠低于LSD算法。上述分析表明,本文算法能更好地提取路面裂縫邊緣的同時,具有與Canny算法近似的執(zhí)行效率。
針對傳統分割算法對路面裂縫信息提取時存在噪聲較多、檢測不完整等問題,筆者提出了一種將區(qū)域生長與梯度閾值分割相結合的路面裂縫提取算法。算法首先通過預處理和非極大值抑制來獲取裂縫的大致邊緣,再利用梯度幅值和梯度方向的區(qū)域生長算法來進一步優(yōu)化裂縫的邊緣信息,最后再通過梯度閾值分割算法去除掉不合理的裂縫。分析實驗結果表明,該算法對不同類型的裂縫圖像都可以獲得較為理想的邊緣信息,與現有的Canny算法和LSD算法相比,算法提取的邊緣鏈更加完整可靠,具有一定的抗噪聲能力和執(zhí)行效率。