熊厚旺,陳建政
(西南交通大學(xué) 牽引動力國家重點實驗室,四川 成都 610031)
線結(jié)構(gòu)光測量技術(shù)具有穩(wěn)定性高、抗干擾性強(qiáng)的特點,在三維圖像處理系統(tǒng)中運用廣泛[1]。其主要工作原理是激光器產(chǎn)生的線結(jié)構(gòu)光束投射在被測工件表面,利用CCD相機(jī)拍攝調(diào)制后的結(jié)構(gòu)光光帶圖像,再依據(jù)光帶中心位置的偏移信息計算求得目標(biāo)物體的三維幾何參數(shù)。其中快速、準(zhǔn)確地提取光帶條紋中心的位置是測量技術(shù)的關(guān)鍵。
常見的光條紋中心提取方法有極值法、曲線擬合法和灰度質(zhì)心法等。大多數(shù)算法經(jīng)過改進(jìn)后在精度上能夠滿足測量需求[2-3],但忽視了對提取速度的分析,而且光條中心提取速度影響著檢測系統(tǒng)的實時性。測量實時效果好才能帶來更好的使用體驗和實際應(yīng)用價值。如今,采用車載方式進(jìn)行動態(tài)巡檢是現(xiàn)代軌道交通基礎(chǔ)設(shè)施檢測及維護(hù)的發(fā)展趨勢,這需要車載檢測系統(tǒng)能夠迅速處理采集的數(shù)據(jù)并發(fā)送指令至執(zhí)行端,或?qū)⑻幚砗玫臄?shù)據(jù)發(fā)送至終端,讓相關(guān)人員了解檢測對象實時的情況。例如無人駕駛技術(shù)需要檢測系統(tǒng)的反饋及時并對周圍環(huán)境進(jìn)行實時的監(jiān)測。
目前越來越多研究重心放在提高光條中心的提取速度上。雷海軍等[4]提出了一種將閾值法和可變方向模板法相結(jié)合的快速檢測結(jié)構(gòu)光光條中心的方法;孫軍華等[5]利用卡爾曼濾波實時預(yù)測激光光條所在的區(qū)域,使用灰度最大值法和海森矩陣法相結(jié)合的方法提取光條中心亞像素坐標(biāo),使計算速度顯著提升。Steger算法具有精度高,魯棒性好的優(yōu)點,其缺點是運算量大,難以實現(xiàn)光條中心的快速提取。
本文將在Steger算法的基礎(chǔ)上進(jìn)行改進(jìn),引入光條骨架,將算法運算區(qū)域集中在光條骨架附近,同時利用IIR型高斯濾波器提高海森矩陣的運算效率,求得光條紋各點的法線方向,并在該法線方向?qū)ふ夜鈼l中心點。
Steger算法是對曲線擬合思想的改進(jìn),處理圖像時把圖像按二維函數(shù)進(jìn)行處理,尋找二維函數(shù)極值點,把像素點用二次泰勒公式展開,通過計算該多項式極值的方法來尋找光帶中心。
設(shè)圖像的任意一點的像素坐標(biāo)為(x0,y0),對圖像用二次泰勒公式展開:
(1)
由表達(dá)式可知,對圖像采用泰勒公式展開時,需要求解圖像的各項偏導(dǎo)數(shù)rx、ry,、rxy、rxx和ryy。圖像偏導(dǎo)數(shù)一般采用卷積模板的方法進(jìn)行求解。由于激光條紋的高斯分布特性,采用高斯函數(shù)的各項偏導(dǎo)數(shù)作為卷積模板,與圖像r(x,y)進(jìn)行卷積,得到各項偏導(dǎo)數(shù)。
泰勒二次展開公式第三項系數(shù)為海森矩陣,如下式所示:
(2)
式中g(shù)(x,y)為二維高斯函數(shù)。
由海森矩陣的性質(zhì)可知,H(x,y)的兩個特征值分別對應(yīng)圖像像素點(x,y)處的二階極大值和極小值,對應(yīng)特征向量描述了特征值方向。設(shè) (x0,y0)的法線方向為 (nx,ny),在(nx,ny)所指方向上尋找二階導(dǎo)數(shù)大于設(shè)定閾值的點即中心特征點,若求得特征點,則法線方向(nx,ny)與H(x0,y0)中最大絕對特征值的特征向量對應(yīng),r(x0,y0)在(nx,ny)方向上的二階導(dǎo)數(shù)與H(x0,y0)最大絕對特征值對應(yīng)[6]。
圖像像素點(x0,y0)沿上述法線方向(nx,ny)的泰勒展開可以表示為
(3)
式中:t為像素點(x0,y0)沿法線方向移動尋找特征點的步長系數(shù),(tnx,tny)為像素點在法線方向的偏移量。對于二維圖像r(x,y),因為結(jié)構(gòu)光截面呈高斯分布,則在光帶中心點處一階導(dǎo)數(shù)過0點,可認(rèn)為在法線方向(nx,ny)上一階導(dǎo)數(shù)為0,并且二階導(dǎo)數(shù)絕對值極大值所對應(yīng)點為光帶特征中心點,則將式(3)對t進(jìn)行一階偏導(dǎo)[6]:
(4)
聯(lián)立式(3)、式(4)求取能滿足光帶中心點條件的t:
(5)
則圖像灰度極值點為(px,py)=(x0+tnx,y0+tny)。
通過對Steger算法的原理分析可知,為了得到海森矩陣,該算法需要對圖像各個像素點進(jìn)行5次二維高斯卷積計算,若圖像大小過大會增加算法的運算量,很難實現(xiàn)中心線的實時提取。因此,需要從兩方面對該算法進(jìn)行優(yōu)化:1)光條邊緣部分大多數(shù)情況下并不是光條的理論中心位置,可以盡量避免光條的邊緣點參與算法的運算過程;2)若二維高斯模板的大小為n×n,則一次二維卷積的運算量為n2次乘加,圖像和高斯模板越大,卷積運算的運算量就越大,可以針對卷積運算過程進(jìn)行簡化,以減少運算量。
骨架是二維二值目標(biāo)的重要拓?fù)涿枋觯侵笀D像中央的骨骼部分,是描述圖像幾何及拓?fù)湫再|(zhì)的重要特征之一,同時具有較高的提取速度。將其應(yīng)用在結(jié)構(gòu)光中心提取領(lǐng)域,能夠快速地定位光條的中心區(qū)域,在對光條各行進(jìn)行算法運算時,優(yōu)先對骨架點所對應(yīng)的光條點進(jìn)行該點海森矩陣的求取,若所得結(jié)果不滿足判斷條件,則對該點相鄰位置的其他像素點進(jìn)行運算,直至求得滿足條件的光條中心點。
LI B C和MA S D[8]提出,任意形狀的濾波器都可以用遞歸的方法實現(xiàn),文獻(xiàn)[9]分析了高斯濾波器及其微分形式濾波器,并提出各形式濾波器的遞歸算法。這種濾波器稱為IIR(有限長單位沖激響應(yīng))型的高斯濾波器,也被稱為遞歸濾波器。本文將該遞歸優(yōu)化算法應(yīng)用在對圖像高斯卷積運算的優(yōu)化上,以提高傳統(tǒng)Steger算法的運算效率。
遞歸高斯濾波是在高斯函數(shù)基礎(chǔ)上的一個近似表達(dá)式:
(6)
式中a0、a2、a4、a6都是能算出的常數(shù)。
由于高斯函數(shù)的傅里葉變換仍為高斯函數(shù),用q代替σ,分子用A0代替,則在傅里葉域中,高斯函數(shù)的近似表達(dá)式為
(7)
用s=jw代入式(7),即可得拉普拉斯域高斯函數(shù)的近似多項式
(8)
將上式進(jìn)行因式分解并進(jìn)行Z變換將表達(dá)式由s域轉(zhuǎn)至z域,得到以下兩式:
(9)
(10)
最后利用Z變換的時域特性對式(9)求解差分方程:
?A1X(z)=b0Y(z)-b1z-1Y(z)-b2z-2Y(z)-b3z-3Y(z)
?A1x[n]=b0y[n]-b1y[n-1]-b2y[n-2]-b3y[n-3]
?y[n]=Bx[n]+(b1y[n-1]+b2y[n-2]+b3y[n-3])/b0
(11)
同理由式(10)求解差分方程:
y(n)=Bx(n)+[b1y(n+1)+b2y(n+2)+b3y(n+3)]/b0
(12)
式中B=1-(b1+b2+b3)/b0
式(11)為高斯濾波的前項遞歸輸出,式(12)為后項遞歸輸出。對圖像先后進(jìn)行這兩個差分方程計算就能實現(xiàn)高斯濾波。由于對圖像的高斯濾波就是利用高斯濾波器對圖像進(jìn)行高斯卷積的結(jié)果,假設(shè)輸入圖像為Pin[n],在對圖像進(jìn)行前向遞歸得w[n],再進(jìn)行后向遞歸后,得到高斯卷積結(jié)果Pout[n]為
(13)
式中:
b0=1.578 25+2.444 13q+1.428 1q2+0.422 205q3
b1=(2.444 13q+2.856 19q2+1.266 61q3)
b2=-(1.428 1q2+1.266 61q3)
b3=0.422 205q3
對圖像高斯卷積的一階微分、二階微分前項遞歸輸出和后項遞歸輸出為:
通過分析高斯卷積及其微分形式的遞歸式可發(fā)現(xiàn),該方法相對于傳統(tǒng)Steger算法,受高斯核σ的影響減小,傳統(tǒng)Steger法的卷積模板大小與高斯核取值有關(guān),而高斯核的取值又與光條寬度有關(guān),高斯核增大會造成高斯卷積模板增大,最終導(dǎo)致運算量的增加。而在本文方法中σ僅用于定義q值,b0、b1、b2、b3和B為與q有關(guān)的值,在對某一行光條進(jìn)行中心點提取時只被計算一次。因此高斯卷積結(jié)果求解過程的計算量固定,且本次的輸出結(jié)果能作為下一點計算的輸入值,這使得海森矩陣的計算效率大大提升,能有效提高結(jié)構(gòu)光中心提取速度。
對于一張光條圖像,用本文所介紹方法進(jìn)行中心線快速提取需進(jìn)行如下步驟:
1)提取光條骨架上一點p,并定位該點在光條圖像中的對應(yīng)點P;
2)得到點P所在行的光條寬度w,以w的值確定高斯核σ,再以高斯核σ確定遞歸算法的系數(shù)q、b0、b1、b2、b3和B;
3)利用高斯卷積及其微分形式的遞歸表達(dá)式計算各項偏導(dǎo)數(shù)rx、ry,、rxy、rxx和ryy;
4)求解點P海森矩陣的特征值和特征向量,得到P點的法線方向;
5)判斷法線方向一個像素范圍內(nèi)是否存在滿足條件的特征點。若存在,則該特征點為光條中心點,取骨架下一行點,重復(fù)步驟1),若不存在,則取點P相鄰點,重復(fù)步驟3)。
在提取完所有光條骨架點后,結(jié)構(gòu)光中心線提取流程結(jié)束。
為驗證改進(jìn)方法的可靠性,分別從提取效率、提取效果以及提取精度3個方面對改進(jìn)算法進(jìn)行實驗分析。實驗基于三角測量法的線結(jié)構(gòu)光測量系統(tǒng),模擬實際應(yīng)用場景,選取地鐵接觸軌測試模型作為測量對象,利用接觸軌檢測裝置對模型進(jìn)行試驗。實驗拍攝到的光帶圖像如圖1所示。由于相機(jī)拍攝角度問題以及被測物拍攝面存在深度差,導(dǎo)致4幅圖中光帶存在不同程度的偏折甚至斷連現(xiàn)象。骨架的提取采用ZHANG Z并行快速細(xì)化法[10],提取效果如圖2所示。
圖1 相機(jī)拍攝所得光條
圖2 光條細(xì)化所得骨架
由于Steger算法運算量大,將在該方法上所耗費的時間作為影響提取效率的指標(biāo),比較傳統(tǒng)Steger算法和本文改進(jìn)Steger算法運算時間,在Steger算法函數(shù)開始和結(jié)尾處增加計時函數(shù),記錄運行時間,改進(jìn)方法除了記錄遞歸算法運行時間外,還需記錄骨架細(xì)化的時間。在針對Steger法的優(yōu)化上使得運算量越小,運算時間越短,實時性就越好。表1為兩種算法對4種光條圖像進(jìn)行多次中心線提取所耗費的平均時間。
表1 兩種算法提取4幅圖像中心線所耗費時間對比 單位:ms
從表1可以看出,引入骨架后,在Steger法上所耗費的時長有了明顯的縮減,提取光條1和2的中心線所花費時間減少了58.6%和57.1%;提取光條3和4中心線時間減少更為明顯,分別減少了70.6%和76.9%。這主要是因為光條3和4像素點個數(shù)更多,在利用骨架對光條中心區(qū)域定位后,避免了邊緣位置的像素點參與到運算當(dāng)中,減少了計算量。為了驗證骨架的定位效果,對兩組遞歸算法進(jìn)行運算次數(shù)的統(tǒng)計,其中一組引入骨架,另外一組不引入骨架,統(tǒng)計結(jié)果如表2所示。在引入骨架后,像素點參與運算的次數(shù)大幅減少,且光條3和光條4原本運算次數(shù)較多,在算法改進(jìn)后,運算次數(shù)的減少尤為顯著,因此在時間優(yōu)化上的提升也更突出。
表2 4種光條像素點在兩種算法中參與運算的次數(shù) 單位:次
光條2、光條3中心線提取結(jié)果如圖3所示。因為兩種方法本質(zhì)上都是利用海森矩陣在法線方向求取光條中心,可見除上下端部及中間偏折位置有明顯區(qū)別外,其余區(qū)域無明顯區(qū)別。為了進(jìn)一步驗證改進(jìn)方法不僅能較少運算量,還能保證中心線的提取與原方法相同,采用圖像相減法驗證。
圖3 新老方法提取結(jié)果對比圖
圖4為經(jīng)過相減函數(shù)得到的結(jié)果圖,二者的區(qū)別主要表現(xiàn)在端部和光條有明顯中斷的位置。中斷處存在差別是因為原圖像偏折位置存在中斷導(dǎo)致骨架存在中斷,中斷位置無法提取中心點,所以改進(jìn)方法更符合實際情況;端部位置則是由于該處結(jié)構(gòu)光離散度大,傳統(tǒng)算法會提取出多個符合條件的中心點,這也是傳統(tǒng)算法存在的一個問題。此外端部和中斷位置點都不是檢測后續(xù)轉(zhuǎn)換計算的目標(biāo)點,因此改進(jìn)方法所求中心線符合提取要求。
圖4 新老方法結(jié)果相減圖
以光條3在兩種方法處理下得到的光條中心線為分析對象,在中心線不同位置提取10組對應(yīng)點,分析改進(jìn)方法的提取精度,對應(yīng)點的坐標(biāo)值及誤差值如表3所示。
表3 兩種算法所提取10組對應(yīng)點的坐標(biāo)值及誤差 單位:像素
通過觀察表3可發(fā)現(xiàn),10組對應(yīng)點在x或y方向坐標(biāo)差值在0.1像素左右。計算后求得x方向的RMS誤差為0.085,y方向的RMS誤差為0.063,說明改進(jìn)方法在利用高斯濾波器簡化運算過程中并未造成嚴(yán)重的精度損失,兩種方法提取精度接近。
在地鐵接觸軌與運行軌幾何參數(shù)檢測的實際應(yīng)用中,針對檢測需滿足實時性的要求,提出結(jié)合IIR高斯濾波和定位骨架方法,對現(xiàn)有仍存在運算量大的自適應(yīng)線寬的Steger法進(jìn)行改進(jìn)。該算法先利用光條骨架對光條中心區(qū)域進(jìn)行定位,再利用高斯濾波器的遞歸算法簡化傳統(tǒng)Steger算法的高斯卷積運算,實現(xiàn)光條中心線的快速提取。實驗結(jié)果表明:該算法能有效減少Steger法的運算時間,同時能提取得到與原方法相同的光帶中心,具有良好的測量精度,能夠幫助檢測系統(tǒng)實現(xiàn)實時檢測的功能。