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