曹義親,何 恬,劉龍標
(華東交通大學軟件學院,江西 南昌 330013)
在鋼軌表面缺陷檢測時,采集到的全景軌道圖像包含大量碎石、道砟等信息[1],如果對整幅全景圖像進行處理,必然會降低后續(xù)缺陷識別與提取的性能;因此對鋼軌表面區(qū)域進行精準、快速地識別與提取尤為重要[2-3]。 鋼軌表面區(qū)域提取離不開鋼軌兩側邊緣的準確識別。
可將鋼軌表面兩側邊界看作2 條直線進行直線檢測。 Hough 變換是經(jīng)典的直線檢測算法[4],該算法魯棒性較好,但檢測精度不高[5],易產(chǎn)生誤檢,算法只能處理二值圖像且耗時較長。 針對上述不足,Xu 等[6]提出一種隨機霍夫變換算法(random Hough transform,RHT),但由于隨機采樣,對于復雜圖像會存在大量無效采樣。 朱正偉等[7]提出一種改進的RHT 算法,加快了RHT 算法速度,但算法結果易受擬合窗口大小影響。 刁燕等[8]提出一種改進的概率霍夫變換,雖能減少內(nèi)存,提高算法效率,但易檢測出重疊直線。Radon 變換也可用于直線檢測,處理非二值圖像,且其性能優(yōu)于傳統(tǒng)Hough 算法[9],在提取直線特征時,具有很強的抗噪能力,但在檢測線段時,不能識別起始與結束位置。彭凱飛等[10]提出一種結合二分查找法的Radon 直線檢測算法,大大降低了傳統(tǒng)Radon 檢測運行時間,但在檢測夾角較小的直線時容易出現(xiàn)誤檢。 文獻[11]提出一種直線檢測分割算法(line segment detector, LSD),算法運行時間短,在準確性與精確度方面較其他算法有較大提升,由于LSD 算法第一步只通過簡單設置閾值的方法剔除小像素點,容易造成邊緣處細節(jié)丟失。 文獻[12]結合LSD 算法和K-均值聚類,得到車道直線檢測結果,雖在復雜環(huán)境下能提取出車道,但在車道不連續(xù)時,識別效果不佳。孫俊鋒等[13]將局部對比度引入LSD 算法,提高了局部光照不均情況下直線檢測算法的穩(wěn)健性,但效率不高。游江等[14]在傳統(tǒng)LSD算法基礎上增加了對于候選區(qū)域邊緣包含像素點數(shù)的篩選,能去除偽邊緣,提高算法檢測性能,不足是容易產(chǎn)生過度分割。 王旭[15]將Edge-Drawing 算法與LSD 算法結合,在進行LSD 算法提取直線前,先利用Edge-Drawing 算法提取邊緣圖,提高了輪廓的完整性,由于Edge-Drawing 算法較為耗時,改進后的LSD 算法效率不高。
針對LSD 直線檢測算法不足,提出一種在邊緣圖像基礎上進行直線擬合的鋼軌表面邊界直線提取算法。 采用雙邊濾波代替Canny 邊緣檢測中的高斯濾波對圖像進行邊緣提取,將提取出的邊緣圖像作為LSD 算法的輸入進行鋼軌邊界直線檢測。
Canny 邊緣檢測由Canny[16]在1968 年提出,并建立了邊緣最優(yōu)化提取的三大準則[17-18],是圖像邊緣檢測算法中經(jīng)典且流行的算法之一, 傳統(tǒng)Canny算法分為以下4 步。
1) 圖像去噪:對輸入圖像進行高斯濾波,以濾除圖像噪聲。 高斯濾波原理如下
式中:σ 為控制濾波程度參數(shù); f(x,y)為原圖像;F(x,y)是去噪后新圖像。
2) 計算圖像像素梯度:利用Sober 算子獲得圖像像素梯度的幅值M 和方向θ,得到可能的邊緣集合
3) 非極大值抑制:抑制梯度小的像素點,保留最大梯度,細化邊緣。
4) 雙閾值檢測:通過設置高閾值和低閾值進行雙閾值篩選,進一步處理所得邊緣,讓邊緣更好地閉合,減少斷續(xù)。
LSD 算法由Grompone 等[19]2010 年在結合Burns所提算法基礎上提出,該算法結合圖像梯度和方向信息提取直線,主要包括3 部分。
1) 生成直線支持區(qū)域: 通過計算每個像素點的梯度,生成對應梯度場,將在一定閾值內(nèi)且具有相同梯度的像素相連成為直線支持區(qū)域,如圖1所示。
圖1 LSD 算法梯度場和直線支持域Fig.1 Gradient field and line support field of LSD algorithm
2) 直線支持區(qū)域的矩形擬合:對于每個直線支持區(qū)域我們可以觀察它的最小外接矩形,矩形的主軸表示直線支持域的主軸方向,且矩形要覆蓋整個區(qū)域,該最小外接矩形表示直線信息,如圖2 所示。
圖2 直線支持域矩形擬合Fig.2 Line support domain rectangle fitting
3) 直線確認:每個擬合的矩形都需要對應一個直線確認步驟, 根據(jù)Helmholtz 原則對擬合矩形進行判斷[20],驗證該矩形區(qū)域是否可以作為直線提取。Helmholtz 原則通過與一個假設的獨立分布值為[0,2π]的噪聲圖相比較,判斷是否為直線。在一個分辨率為m×n 的圖像中,可能出現(xiàn)(nm)5/2種直線支持域,直線支持域中像素總數(shù)為n,k 為與擬合矩形同方向的像素總數(shù),δ 為一個確定的精度, 直線區(qū)域的錯誤報警數(shù)QNFA定義如下
ε 為判定閾值,如果QNFA小于ε,則該直線支持域為直線,原算法中ε 取1 得到了較好效果,本文也取1。
LSD 直線檢測算法在提取輸入圖像的梯度模值圖和方向圖的基礎上搜索直線支持區(qū)域,單純通過閾值的篩選,剔除梯度值較小的像素點,從而進行直線支持區(qū)域搜索, 該方法需多次比較像素梯度,且容易丟失細小邊緣;因此,采用Canny 算法先進行邊緣圖像提取,在邊緣圖像上搜索直線支持區(qū)域,提高算法效率,同時可以有效保護圖像細節(jié)信息。 為此,提出基于Canny 提取邊緣圖像的LSD 直線檢測算法(Canny combined with LSD, CLSD)。
CLSD 算法流程圖如圖3 所示。
圖3 算法流程圖Fig.3 Algorithm flow chart
圖像邊緣檢測算法第一步通常都為濾波操作,以減少噪聲影響。 傳統(tǒng)Canny 邊緣檢測算法采用高斯線性濾波,在去除噪聲的同時,會模糊圖像邊緣,對邊緣提取產(chǎn)生不利影響[21];因此采用雙邊濾波,盡可能完整提取圖像邊緣。
雙邊濾波是一種非線性濾波,可以在降低噪聲的同時保護邊緣信息[22-23]。 雙邊濾波同時考慮了圖像像素值域差異與空間域信息[24]。 在圖像的平面區(qū)域,像素變化范圍小,對應值域權重約為1,相當于對輸入圖像做高斯模糊,此時主要由空間域權重起作用;在邊緣區(qū)域,像素變化范圍大,值域權重變大,可以保持輸入圖像的邊緣信息。
設Iq為輸入圖像,Ip為輸出圖像,p 為目標像素,q 為任意像素,σr表示值域標準差,σs表示空間域標準差,用Gr表示值域信息,Gs表示空域信息,則
式中:Wq為窗口內(nèi)值域權重和,用于權重歸一化。
基于雙邊濾波改進Canny 提取邊緣圖像的LSD 直線檢測算法(bilateral filter to improve Canny combined with LSD, BFCLSD), 在基于Canny 提取邊緣圖像的LSD 直線檢測算法的基礎上,用雙邊濾波代替原Canny 邊緣檢測的高斯濾波,得到圖像的邊緣圖,將邊緣圖像和像素梯度方向圖作為LSD 直線檢測算法的輸入進行直線提取。
BFCLSD 算法步驟如下。
1) 將彩色圖像轉為灰度圖像。
2) 雙邊濾波代替?zhèn)鹘y(tǒng)Canny 算法中的高斯濾波,得到結構較好的邊緣圖像[25],將該邊緣圖像作為輸入圖像。
3) 對輸入圖像進行高斯核采樣,為避免圖像出現(xiàn)鋸齒效應,縮放尺度取0.8。
4) 計算每個像素梯度方向的梯度值,水平方向梯度為gx,垂直方向梯度為gy。
式中:像素(x,y)的灰度值為i(x,y);梯度方向為θ;梯度模值為G(x,y)。
5) 對所有梯度值進行[0,1 023]排序,簡單分為1 024 個等級, 將梯度值最大的點作為種子結點往下搜索,直到遍歷完整幅圖像。
6) 小梯度值抑制,梯度值小于ρ 的像素將被拒絕歸入后續(xù)直線支持域中,直接設置為已使用。
式中:e 為梯度量化過程中出現(xiàn)的誤差邊界, 設定為2;τ 為后續(xù)算法中出現(xiàn)的角度容忍度。
7) 選擇一個像素作為種子節(jié)點, 將其作為起點,在閾值為[-τ,τ]內(nèi)的點中進行區(qū)域搜索,每擴散一個像素,就將該像素狀態(tài)設置為已使用,直至生成直線支持區(qū)域。 圖4(a)是原圖像,圖4(b)~圖4(d)分別是τ 取11.5°,22.5°,45°時的實驗效果。
圖4 從頂部中間像素開始的3 個角度容忍度實驗結果Fig.4 Experimental results of three angle tolerances starting from the top middle pixel
圖4 顯示角度容忍度τ 設置為22.5°,實驗效果更好,本算法τ 取22.5°。
8) 矩形擬合,上一步形成的直線支持區(qū)域為一系列離散點,需要將直線支持域包含在一個矩形框R 內(nèi),R 為包含直線支持域的最小矩形,矩形R 的方向就為直線支持域的主方向,矩形的中心(Gx,Gy)。
式中:G(j)是像素j 的梯度幅值;j 用于遍歷矩形區(qū)域內(nèi)的所有像素。
9) 計算QNFA,確認直線,如式(7),式(8)。
為驗證基于雙邊濾波改進Canny 提取邊緣圖像的LSD 直線檢測算法的有效性,將其應用到軌道圖像的軌面區(qū)域提取中,對鋼軌表面兩側邊緣直線進行提取,檢驗其實際應用效果。
采用MATLAB R2018a 軟件編程,在Win10 操作系統(tǒng)環(huán)境下進行實驗。 對LSD 直線提取算法、文獻[15]算法、CLSD 和BFCLSD 算法進行仿真實驗對比,實驗圖像選取采集到的兩類圖像,第一類圖像為正常鋼軌全景圖像,第二類圖像為生銹鋼軌全景圖像。
對正常鋼軌全景圖像圖5(a)分別進行LSD 算法直線提取、文獻[15]算法直線提取、CLSD 算法直線提取和BFCLSD 算法直線提取,為便于觀察,提取出的直線用紅色標出。 實驗結果如圖5(b)~圖5(e)所示。
原圖像直接進行LSD 直線檢測,所得結果如圖5(b),鋼軌表面兩側邊緣已大致識別出來,但對于右側鋼軌表面上方由于光照不勻產(chǎn)生的陰影邊緣,也當作直線識別出來,這樣容易造成最終鋼軌邊緣識別不準確;圖5(c)為文獻[15]中LSD 算法與Edge-Drawing 算法結合后的提取結果,鋼軌兩側直線提取較為完整,但碎石邊緣的檢測比鋼軌主體的檢測效果更好, 沒有突出鋼軌主體直線檢測效果;圖5(d)為CLSD 提取結果,可以看到該算法相比于LSD 算法對于鋼軌邊緣直線提取更加連續(xù),直線提取效果較好,不足的是該算法對于圖像的降噪效果不佳,可以看到軌面產(chǎn)生較多噪點;圖5(e)為BFCLSD 算法直線提取結果, 鋼軌表面兩側邊緣已基本識別出來,且直線較連續(xù),軌面也無其它誤檢,碎石、軌枕及扣件部分被檢測為直線的概率遠小于以上3 種算法,整體來說檢測效果較好。
圖5 不同算法對正常鋼軌全景圖像直線檢測Fig.5 Linear detection of normal rail panoramic image by different algorithms
分別采用LSD 算法、文獻[15]算法、CLSD 算法及BFCLSD 算法對生銹鋼軌全景圖像圖6(a)進行直線檢測,結果如圖6(b)~圖6(e)所示,檢測出的線段用紅色標出。
圖6 不同算法對銹跡鋼軌全景圖像直線檢測Fig.6 Linear detection of rusted rail panoramic image by different algorithms
圖6(b)為傳統(tǒng)LSD 直線檢測算法提取的線段,提取結果顯示檢測出的線段短而密集, 而且較粗,直線提取結果不準確;圖6(c)為文獻[15]算法提取結果,可以看出對于碎石和扣件的誤檢程度明顯比LSD 算法低,但對于鋼軌兩側識別效果較差;圖6(d)為CLSD 提取結果,在鋼軌軌面區(qū)域,產(chǎn)生很多噪點,對于碎石和扣件部分的誤檢程度明顯高于文獻[15]算法;圖6(e)為BFCLSD 算法實驗結果,對于碎石、扣件等無關區(qū)域的提取程度比以上3 種算法低,說明誤檢程度低,提取出的直線段較細,說明直線提取較精確,不足是雖然鋼軌表面右側邊緣提取較前兩種算法好,但左側邊緣直線提取改進效果不大。 綜合圖6 實驗結果, 對于灰度較低的生銹鋼軌兩側邊緣的提取,BFCLSD 算法效果最優(yōu), 但4 種算法實驗效果均有待提高,尤其對于鋼軌左側邊緣這種灰度變化緩慢的邊緣。
為客觀評價BFCLSD 算法有效性,將原圖轉換為灰度圖,采用峰值信噪比(PSNR)和均方差(MSE)2 個常用的圖像客觀評價指標對LSD 算法、 文獻[15]算法、CLSD 算法和BFCLSD 算法提取直線后的結果圖像進行比較。
峰值信噪比(PSNR)是使用最廣泛的一種圖像客觀評價指標,PSNR 值越大表示圖像失真越小,直線提取結果圖像整體質(zhì)量越好。 均方差(MSE)表示結果圖像與原圖像之間的均方誤差,MSE 值越小,說明結果圖像與原圖像在邊緣結構上越相似。
對圖7(a)和圖8(a)分別用LSD 算法、文獻[15]算法、CLSD 算法和BFCLSD 算法進行直線提取,提取結果如圖7(b)~圖7(e)、圖8(b)~圖8(e)所示。圖7(b),圖8(b)分別為傳統(tǒng)LSD 算法進行直線檢測后的二值圖像,圖7(c),圖8(c)分別為文獻[15]算法直線檢測結果,圖7(d),圖8(d)分別為CLSD 算法直線檢測結果,圖7(e),圖8(e)分別為BFCLSD算法直線檢測結果。
圖7 不同算法對正常鋼軌全景圖像直線提取結果Fig.7 Linear extraction results of panoramic image of normal rail with different algorithms
圖8 不同算法對銹跡鋼軌全景圖像直線提取結果Fig.8 Linear extraction results of rusted rail panoramic image by different algorithms
分別計算兩類圖像經(jīng)LSD 算法、文獻[15] 算法、CLSD 算法、BFCLSD 算法直線提取后圖像相應的PSNR 值和MSE 值取平均值,所得結果如表1 所示。
表1 不同算法客觀評價結果Tab.1 Objective evaluation results of different algorithms
從表1 可看出,第一類圖像(正常鋼軌全景圖像)經(jīng)BFCLSD 算法實驗過后的平均峰值信噪比較傳統(tǒng)LSD 算法提升了6.49%,第二類圖像(銹跡鋼軌全景圖像)經(jīng)BFCLSD 算法實驗過后的平均峰值信噪比較傳統(tǒng)LSD 算法提升了13.58%,BFCLSD 算法實驗后兩類實驗圖像的直線提取結果圖的平均峰值信噪比在4 種算法中均最大,說明該算法直線提取后的結果圖失真最小,圖像質(zhì)量較高;BFCLSD算法實驗結果圖的平均均方差最小,說明還原度較另外3 種算法都有較大提升,符合原圖像的直線軌跡,實驗結果較好。
因此,經(jīng)仿真實驗并結合主客觀評價,本文提出的基于雙邊濾波改進Canny 算法提取邊緣圖的LSD 直線檢測算法能較準確地提取鋼軌表面邊緣直線, 有效減輕后續(xù)軌道表面缺陷檢測工作量,對鋼軌表面缺陷檢測研究具有一定的實用價值。
為更準確地提取鋼軌表面區(qū)域,提出一種基于雙邊濾波改進Canny 算法提取邊緣圖的LSD 直線檢測算法并應用到軌面邊緣直線提取中,仿真實驗結合主觀和客觀評價表明:
1) 新算法對提取軌道圖像中鋼軌表面邊緣直線較相關算法有較好的效果提升,為后續(xù)鋼軌表面區(qū)域提取以及鋼軌表面缺陷的檢測、識別和分類奠定了基礎,具有一定的實際意義。
2) 實驗過程發(fā)現(xiàn),對于灰度較低的圖像和直線邊緣灰度變化緩慢區(qū)域, 直線檢測算法效果不佳。在后續(xù)研究中將對低灰度圖像中的直線檢測與提取作進一步研究。