胡韻松,王軍民,付嘉瑋,李雄軍,劉 威
(1.長江大學(xué) 油氣資源與勘探技術(shù)教育部重點實驗室, 武漢 430100;2.賀州學(xué)院,廣西 賀州 542899)
激光線性結(jié)構(gòu)光傳感器具有結(jié)構(gòu)簡單,體積小等特點,廣泛用于焊接的焊縫追蹤,軌跡規(guī)劃等,稱為焊接過程自動化的關(guān)鍵技術(shù)之一。而在結(jié)構(gòu)光條定位中,為了提高定位精度,提出了亞像素的概念,是指在相機得到的像素和像素之間還有幾十到十幾個微米的距離。而通常我們計算出的坐標(biāo)都是正整數(shù),這表示的是我們是在對像素進行操作,而亞像素計算出來的坐標(biāo)是實數(shù),能夠極大地提高算法的精度。
多年來,國內(nèi)外學(xué)者就光條中心問題提出了多種方法,比較常見的主要有極值法、幾何中心法、灰度重心法和 Steger 法等;特征點檢測常見有Harris角點檢測、FAST角點檢測,以及一些局部圖像特征,如SIFT,SURF,ORB等[1]。焊縫特征識別的一般步驟是圖像濾波、中心線提取、對線性特征進行擬合、特征點的識別。但是這些算法都只是依賴于像素單元進行處理,算法的識別精度并不夠高。更有學(xué)者使用深度學(xué)習(xí)、機器學(xué)習(xí)的方法[2]對焊縫進行處理,在涉及到小目標(biāo),神經(jīng)網(wǎng)絡(luò)在網(wǎng)絡(luò)深層差一個像素,在網(wǎng)絡(luò)淺層會差8或者16個像素,這對小目標(biāo)的跟蹤影響巨大,也難以做到亞像素定位。文中將利用基于Hessian矩陣的Steger亞像素光條定位算法,再通過經(jīng)過亞像素精度優(yōu)化后的Shi-Tomasi角點檢測算法,在提取光條中心線以及特征點檢測兩個重要流程中,都在亞像素精度下進行圖像處理,并且考慮到了算法的實時性,經(jīng)過實驗表明,算法的精度和效率能夠滿足要求。
實驗裝置包括計算模塊,成像系統(tǒng)模塊。文中使用開源,體積小,相對廉價的樹莓派用作計算模塊,使用工業(yè)相機進行圖像信號的采集,采用線性的主動激光提取激光照射后的特征。考慮到圖像處理中的實時性要求,要求圖像采集速度要高于檢測對象的檢測速率,即相機的幀率要高,同時得保證計算要足夠快。因此,采用了一塊基于1.4 GHz 64位4核 ARM Cortex-A53 CPU的樹莓派3B+作為計算模塊。成像系統(tǒng)采用了一塊像素為200萬的工業(yè)相機,同時使用一塊 650 nm的低通濾光片過濾,限制鏡頭的進光量。
圖1 焊縫提取系統(tǒng)設(shè)備和工作環(huán)境
系統(tǒng)采用主動激光和工業(yè)相機來采集圖像,在主動激光接通電源后,能夠發(fā)出特定波長的光,產(chǎn)生一個平面的線激光,線激光照射在焊件上會產(chǎn)生固定形狀的光條[3]。經(jīng)過特定波長的濾光片和相機中的透鏡成像后,能夠正好拍攝到一條包含焊縫輪廓信息的條紋。通過對主動激光照射在焊件上產(chǎn)生的圖像進行處理,可以提取到焊縫的中心線以及焊縫坡口的位置,以便于以后通過圖像處理得到偏移的距離,然后采用輸出指令的方式來糾正焊槍的位置。
本提取系統(tǒng)后續(xù)需要在一秒內(nèi)向伺服電機輸出5或6條指令。因此進行圖像處理的計算要求較高,故采用C++進行程序設(shè)計,在樹莓派的Raspbian操作系統(tǒng),編譯OpenCV庫,作為主要的圖像處理工具。
在機器視覺的應(yīng)用中,相機得到的圖像往往會產(chǎn)生畸變,這些畸變一般分為徑向畸變和切向畸變。徑向畸變往往是由于透鏡的形狀引起的,見公式。
xcorrect=x(1+k1r2+k2r4+k3r6)
(1)
ycorrect=y(1+k1r2+k2r4+k3r6)
(2)
式中,x和y為像素橫縱方向的像素距離,r為該點距離成像中心的距離,得到的結(jié)果為校正后的新位置。對于畸變較小的中心區(qū)域,主要是k1起作用,對于畸變較大的邊緣,主要是k2起作用。普通的相機一般用這兩個參數(shù)就可校正,而工業(yè)相機一般會使用到更多參數(shù)。
而切向畸變是因為在相機的組裝過程中,由于不能使透鏡嚴(yán)格和成像平面平行,會引入切向畸變,給出計算公式。
xcorrect=x+2p1xy+p2(r2+2x2)
(3)
ycorrect=y+p1(r2+2y2)+2p2xy
(4)
聯(lián)立四式,得到畸變參數(shù)k1、k2、p1、p2、p3。
我們需要利用標(biāo)定算法同時求出相機的內(nèi)參和畸變參數(shù),來校正圖像。最常見的算法是張正友標(biāo)定算法,在OpenCV和Matlab中均已經(jīng)實現(xiàn)該算法。本系統(tǒng)中采用玻璃底板、棋盤格寬度為1 cm的棋盤格進行標(biāo)定。如圖3,是15張640×480分辨率的棋盤格圖像,標(biāo)定生成的成像模式示意圖。
圖2 標(biāo)定圖像成像示意圖
對標(biāo)定后的數(shù)據(jù),使用5個畸變參數(shù)與相機內(nèi)參數(shù)實現(xiàn)校正,校正結(jié)果如圖3。
圖3 原始圖像和校正圖像對比圖
在沒有主動激光的情況下,提取焊縫多要使用LED光源、鹵素?zé)簟⒏哳l熒光燈等常見機器視覺光源。但在采用主動激光的條件,周圍光照一定不能超過激光的強度,所以可以不需要再采用其他機器視覺光源進行輔助。埋弧焊鋼管焊接中圖像的噪聲多為椒鹽噪聲,這里采用高斯濾波進行圖像處理,可以一定程度上去除噪聲干擾,并對后一步光條中心線的提取做好了前置工作。
2.3.1 光條中心線的提取方法
光條細(xì)化中心的提取,對后續(xù)進行焊縫坡口以及特征點的提取具有重要意義。需要對光條進行處理,得到一條單像素寬的中心線。并且光條細(xì)化中心的提取速度和精度,會影響整個焊縫處理系統(tǒng)。目前,光條中心線的提取方法主要包括骨架細(xì)化法、幾何中心法、灰度重心法、基于Hessian矩陣的Steger算法等,國內(nèi)外學(xué)者也對其做了大量的研究[4]。
骨架細(xì)化法是一種形態(tài)學(xué)算法,通過不斷剝離二值圖像的邊界像素,最終得到細(xì)化的光條,但是剝離的過程要花費大量的時間,不滿足實時性。
幾何中心法,則是通過Roberts算子,Sobel算子、Canny算子等先做邊緣檢測,得到光條的兩邊邊界,再將兩邊界的中線,取做中間線。該方法簡單,速度快,但是要求圖像的光條邊界必須十分精確,生產(chǎn)實際中的噪聲會對邊緣檢測造成非常大的影響,算法的魯棒性不高。
灰度重心法,是對圖像中的所有像素進行遍歷,在一列線激光中,先采用極值法求取光強最大的一點max,然后確定一個閥值K=max-△l(l一般取10~20),在閾值兩邊判斷大于K的元素,對中間的每一行提取灰度重心作為光條紋的中心位置。灰度重心法需要對閾值進行選取,也易受環(huán)境噪聲影響。
基于Hessian矩陣的Steger算法,是一種亞像素中心定位算法。圖像中的點性結(jié)構(gòu)具有各項同性,而線性結(jié)構(gòu)具有各向異性。因此我們可以利用Hessian矩陣對圖像中的線性結(jié)構(gòu)進行增強,濾去點狀的結(jié)構(gòu)和噪聲點。Steger算法首先通過Hessian矩陣最大特征值對應(yīng)的特征向量,得到光條的法線方向,然后在法線方向上進行泰勒展開,求出的多項式極大值就是光條紋中心的亞像素位置[5]。Hessian矩陣是由多元函數(shù)的二階偏導(dǎo)數(shù)組成的矩陣,定義如式(5)。式中rxx為圖像沿x方向的二階偏導(dǎo)數(shù),其它的值類似。
(5)
而對于二維圖像內(nèi)某一點的Hessian矩陣,它的最大特征值和其對應(yīng)的特征向量,對應(yīng)其鄰域二維曲線最大曲率的強度和方向??偨Y(jié)來說,圖像某點的Hessian矩陣特征值大小和符號決定了該點鄰域內(nèi)的幾何結(jié)構(gòu)。該算法具有處理精度高,魯棒性好等優(yōu)點,本系統(tǒng)采用了這種方法,但是計算量相對較大,為了保證實時性需要進行實驗和注意程序設(shè)計時算法的復(fù)雜度。處理結(jié)果見圖4。
圖4 增加濾光片焊縫圖像與Steger算法處理效果圖
2.3.2 特征點提取
一般圖像的特征類型可以被分為邊緣、角點、感興趣區(qū)域。焊縫特征點的提取可以依賴于角點特征的提取。角點的具體描述一般可以分為灰度的梯度局部最大所對應(yīng)的像素點;兩條或兩條以上邊緣的交點;圖像中梯度值和梯度變化率高的點。角點提取算法有很多,例如Harris角點,F(xiàn)AST角點,以及學(xué)者們又設(shè)計了很多局部圖像特征,如SIFT,SURF,ORB等,但是在生產(chǎn)實際中,SIFT以及SURF都有專利保護。故此采用一種對Harris角點的進行改進的算法,Shi-Tomasi角點檢測算法,在很多情況下可以得到比Harris算法更好的結(jié)果。
用(w,x)表示窗口函數(shù),(u,v)為窗口平移量,可以求得像素在窗口內(nèi)的變化量,再對灰度變化進行泰勒展開,可以得到式(6)。
(6)
Au2+2Buv+Cv2=E
(7)
即為橢圓方程,橢圓的長短軸表示了矩陣的特征值,反應(yīng)了兩個垂直方向的變化情況,兩個特征值都大的情況。Harris 角點檢測是用C來評價角點的強度,見式(7)。檢測的結(jié)果與k值有關(guān),k是一個經(jīng)驗值,需要多次試驗才能找到最佳值。
C=det(H)-ktrace(H)
(8)
C=λ1λ2-k(λ1+λ2)2
(9)
式中,det(H)為窗口矩陣的行列式,trace(H) 為窗口矩陣的跡,λ1,λ2為特征值。而在Shi-Tomasi算法中間,直接用較小的那個特征值作為C來判斷角點的強度,這樣就不需要調(diào)整K值了[5]。見公式(9)。和Harris 角點檢測算法一樣,C大于設(shè)定的閾值,我們就認(rèn)為它是一個角點。
C=min(λ1,λ2)
(10)
基于Shi-Tomasi算法與Harris角點檢測算法一樣,只能達到像素級別,可以使用cornerSubPix亞像素角點檢測作進一步的優(yōu)化操作,可以使角點的精度達到亞像素的級別。算法的主要思想,是要對正交向量的點乘進行迭代。
圖5 cornerSubPix算法示意圖
如圖5,q為待求取的亞像素點,pi是q周圍的點,坐標(biāo)已知,可以自行選取,圖像中實線的箭頭表示梯度方向。求取亞像素點需要兩個正交向量才可求解,設(shè)(pi-q)為第一個向量,pi位置的灰度設(shè)為Gi,為第二個向量??紤]兩種情況,如圖5中po表示,位于白色區(qū)域,此時的梯度為0;如圖5中的pi表示,位于邊緣區(qū)域,向量(pi-q)與Gi垂直,即點乘為0。都可以得到式(11)。
Gi*(pi-q)=0
(11)
再將式(10)轉(zhuǎn)換為最小二乘法的矩陣形式。
(12)
(13)
所以當(dāng)點q固定時,若有足夠多的向量(pi-q)滿足式(11),將每個向量看成一個方程,對方程組求解,可求得亞像素點的位置。但是點q只有一個,pi點有多個,需要對式(13)加上求和符號。但是在采用多點計算后,各點離中心距離不一致,需要引入權(quán)重,這里引入高斯權(quán)重,假設(shè)pi處權(quán)重系數(shù)為wi,式子最終可以修正為式(14)。
(14)
即cornerSubPix亞像素角點檢測優(yōu)化,是以一個初始的角點q0為中心,選取一個窗口,對窗口中各點的梯度進行求和,因為各點離中心距離不一,引入了高斯權(quán)重,用最小二乘法求解,即可得到一個亞像素點(qx,qy),再以q為中心,不斷迭代,通過設(shè)置結(jié)果精度確定迭代次數(shù)。于是,對得到的特征點進行篩選,考慮到坡口處的橫坐標(biāo)遠大于非坡口處的橫坐標(biāo),就能過濾掉非坡口處的坐標(biāo),選取坡口部分的特征點坐標(biāo)。對坡口處的特征點坐標(biāo)進行均值處理,最后能夠得到我們需要的特征點坐標(biāo)。
為了驗證算法的有效性和準(zhǔn)確性,實驗基于標(biāo)定后的線結(jié)構(gòu)光測量系統(tǒng),選取了兩塊不銹鋼鋼板作為測量對象,尺寸大小為 300 mm×160 mm×4 mm,分別對其表面進行焊縫提取。試驗中,傳感器距離焊件表面約100 mm,所檢測的焊縫寬度約為 2 mm??紤]算法執(zhí)行時間和CPU的頻率有關(guān),在分辨率為320×240、640×480、1 024×768、1 280×960圖像分辨率下對算法所用的執(zhí)行時間進行測算,執(zhí)行的平臺為樹莓派。 但是算法執(zhí)行的時間和操作系統(tǒng)調(diào)度有關(guān),如果在輕負(fù)載情況下,可以通過多次運行消除操作系統(tǒng)調(diào)度的影響。且近10年來的處理器都支持動態(tài)頻率調(diào)整,會根據(jù)負(fù)載的情況會調(diào)整頻率。故采用多次測量時間求均值消除影響。測量時間如圖6,橫坐標(biāo)的單位為圖像像素,縱坐標(biāo)單位為毫秒。
圖6 不同分辨率下求取10次算法時間統(tǒng)計圖
對所做實驗的結(jié)果求取均值,可以得到算法在不同分辨率時間的預(yù)測。
要求在1秒內(nèi)輸出至少五幀,則每一幀的總時間不超過200 ms。在不開啟圖像顯示時(人機交互),可以使用640×480分辨率的圖像;在開啟圖像顯示后,會拖慢圖像處理的速度,這時在樹莓派的算力下需要采用用320×240分辨率的圖像。
表1 不同分辨率下圖像處理時間
利用Harris角點檢測對以及細(xì)化處理的圖像進行檢測,觀察放大后的圖像,提取的角點位置多為離散像素點的角點,而不是焊縫坡口處的角點,檢測出的精度不高。
圖7 增加濾光片焊縫圖像與Harris算法處理效果圖
如圖8,顯示了直接使用Shi-Tomasi算法和經(jīng)過亞像素精度優(yōu)化后的結(jié)果、根據(jù)圖像顯示,找到的角點位置更加清晰,通過對角點的顯示,角點和角點的位置之間沒有更多粘粘,可以得出經(jīng)過亞像素優(yōu)化后的角點的位置更加準(zhǔn)確。
圖8 Shi-Tomasi算法與優(yōu)化后的算法處理效果圖
1) 針對常見焊縫提取算法精度不高的問題,文章利用樹莓派和工業(yè)相機搭建主動激光焊縫提取系統(tǒng),通過Steger算法以及對Shi-Tomasi角點檢測算法進行精度優(yōu)化,做到了亞像素精度級別的焊縫識別,能夠得到了坡口處的位置信息,為下一步進行伺服電機控制焊槍提供了幫助。
(2) 經(jīng)過試驗表明,該算法實時性能夠達到要求,算法精度高,實際可行[6-13]。