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