李 潔,彭 琪,莊奕琪,蔣山平
(1.西安電子科技大學(xué) 微電子學(xué)院,西安 710071; 2.北京衛(wèi)星環(huán)境工程研究所,北京 100094)
空間目標(biāo)分為合作目標(biāo)和非合作目標(biāo),后者包括失效或者發(fā)生故障的航天器、脫離軌道運(yùn)行的航天器等。目前,在地球軌道中存在著已知信息的大型尺寸非合作目標(biāo)約2.2萬塊,而運(yùn)動(dòng)狀態(tài)與形狀信息完全未知的非合作目標(biāo)多達(dá)30多萬塊[1]。這些非合作目標(biāo)的形態(tài)特征與結(jié)構(gòu)尺寸難以快速準(zhǔn)確測量,因此目前無法對它們實(shí)現(xiàn)動(dòng)態(tài)追蹤與捕獲[2]。而它們長期占用空間軌道資源,對正常運(yùn)行的現(xiàn)役航天器造成嚴(yán)重的威脅,故應(yīng)盡快獲得其相關(guān)信息,以便進(jìn)行規(guī)避或予以清除。
對非合作目標(biāo)的信息獲取,目前國內(nèi)和國際上采用較多的是視覺與激光的測量方法。采用視覺的方法能更直觀地獲得場景的立體信息,且計(jì)算復(fù)雜度較低。雙目視覺測量系統(tǒng)目前主要應(yīng)用在機(jī)器人導(dǎo)航、三維模型構(gòu)建、高精度測量技術(shù)以及虛擬現(xiàn)實(shí)技術(shù)等領(lǐng)域,例如,利用雙目視覺與機(jī)器人的動(dòng)作姿態(tài)相結(jié)合,可根據(jù)拍攝到的場景圖片進(jìn)行障礙物檢測,為機(jī)器人規(guī)劃行走路線[3]。
本文基于雙目視覺的測量系統(tǒng),通過采集靜止?fàn)顟B(tài)下任意姿態(tài)的非合作目標(biāo)的左右圖像,對2幅圖像進(jìn)行立體匹配獲取被測目標(biāo)的點(diǎn)云數(shù)據(jù);并提出一種點(diǎn)云輪廓線的直接提取算法,其不需要對點(diǎn)云建立三角網(wǎng)格模型,從而降低了算法的復(fù)雜度;最終通過提取出的被測點(diǎn)云線性擬合得到被測目標(biāo)的結(jié)構(gòu)尺寸信息。
雙目立體視覺系統(tǒng)是基于視差的原理,通過對同一目標(biāo)物拍攝2幅或多幅圖像來重構(gòu)該目標(biāo)物的三維立體信息,也就是將被測物體的二維信息在相機(jī)平面上進(jìn)行投影,從而獲得被測物的結(jié)構(gòu)參數(shù)[4-5]。常用的理想化立體視覺模型有會(huì)聚式雙目立體視覺模型和平行雙目立體視覺模型,后者計(jì)算精度更高,應(yīng)用更廣泛。
平行雙目立體視覺模型的建立須首先選取2個(gè)參數(shù)一致、光軸平行的相機(jī),放置在同一條直線上,且相機(jī)的成像面在同一平面內(nèi)(參見圖1)。
圖1 平行雙目立體視覺模型Fig.1 The parallel binocular visual model
圖1中:兩相機(jī)光心距離為T,也稱為基線距離。空間點(diǎn)P在左、右成像面的投影點(diǎn)分別為Pl(xl,yl,zl)和Pr(xr,yr,zr),對應(yīng)的像素坐標(biāo)系坐標(biāo)分別為 (ul,vl)和 (ur,vr);左、右相機(jī)中心點(diǎn)的像素坐標(biāo)系坐標(biāo)分別為Ol(ul0,vl0)和Or(ur0,vr0)。定義ku,kv為像素坐標(biāo)系坐標(biāo)軸方向上的尺度因子,mm/像素。根據(jù)相似三角形原理可知:
式中f為相機(jī)焦距。
如果將世界坐標(biāo)系當(dāng)做左相機(jī)坐標(biāo)系,那么空間點(diǎn)的世界坐標(biāo)(xw,yw,zw)可以表示為
將式(2)代入空間點(diǎn)的三維坐標(biāo)計(jì)算公式可得:
現(xiàn)實(shí)中我們所用的雙目相機(jī)的參數(shù)存在差異,不能直接按照理想化模型來處理,須通過相機(jī)標(biāo)定得到相機(jī)焦距f、兩相機(jī)光心距T、圖像的主點(diǎn)坐標(biāo)、鏡頭的畸變參數(shù)以及兩個(gè)相機(jī)之間的外部參數(shù)等。若要得到空間點(diǎn)的三維坐標(biāo),還需要知道左、右圖像的視差,最終通過計(jì)算得到三維場景信息。
雙目立體視覺系統(tǒng)通過采集左、右相機(jī)的圖像,獲取相機(jī)的內(nèi)外參數(shù),進(jìn)行立體校正,利用雙目立體匹配算法獲取視差圖,以得到圖像深度信息,最終獲取目標(biāo)點(diǎn)云數(shù)據(jù)。
1.3.1 相機(jī)標(biāo)定與極線校正
本文采用視覺平行的雙目相機(jī),利用MATLAB標(biāo)定工具箱對相機(jī)進(jìn)行標(biāo)定。標(biāo)定原理是基于張正友的標(biāo)定法[6],標(biāo)定步驟參見圖2:采用8×9的黑白棋盤格,用左、右相機(jī)采集同一時(shí)間的棋盤格圖像20張;用MATLAB進(jìn)行左、右分別標(biāo)定以及立體標(biāo)定,獲取左、右相機(jī)的內(nèi)外參數(shù)、畸變參數(shù)以及相機(jī)之間的旋轉(zhuǎn)平移矢量。相機(jī)內(nèi)參數(shù)主要包括主點(diǎn)、實(shí)際焦距、尺度因子和畸變系數(shù)(徑向和切向);相機(jī)外參數(shù)主要包括旋轉(zhuǎn)矢量和平移矢量。表1為標(biāo)定后得到的相機(jī)內(nèi)、外參數(shù)。
圖2 相機(jī)標(biāo)定步驟Fig.2 Steps for camera calibration
表1 相機(jī)內(nèi)、外參數(shù)Table 1 Internal and external parameters of the cameras
在進(jìn)行雙極線校正之前要對左、右相機(jī)拍攝的2幅圖進(jìn)行去畸變。相機(jī)畸變分為徑向畸變和切向畸變。徑向畸變來源于透鏡本身的工藝問題;切向畸變來源于透鏡與圖像平面不平行。本文采用公式法進(jìn)行去畸變,坐標(biāo)(x,y)由圖像像素坐標(biāo)系轉(zhuǎn)換到相機(jī)坐標(biāo)系。在相機(jī)標(biāo)定這一步中我們得到徑向畸變系數(shù)k1、k2、k3,切向畸變系數(shù)p1、p2,公式如下:
采用雙極線校正的目的是使左、右兩個(gè)相機(jī)的光軸平行,像點(diǎn)在左、右圖像上的高度一致。雙極線校正時(shí)采用OpenCV提供的算法,實(shí)現(xiàn)步驟如下:1)將2個(gè)相機(jī)通過標(biāo)定得到的內(nèi)參矩陣換算統(tǒng)一;2)將2個(gè)圖像的像素坐標(biāo)分別乘以步驟1得到的共同內(nèi)參矩陣;3)對得到的新坐標(biāo)左乘旋轉(zhuǎn)矩陣R1和R2,其中R1和R2是對旋轉(zhuǎn)矩陣的分解,R1×R2=R;4)對新坐標(biāo)實(shí)現(xiàn)步驟2中的逆操作,得到新圖像;5)用原左、右圖像的像素值對步驟4中得到的新圖像分別進(jìn)行像素點(diǎn)插值。
1.3.2 基于特征點(diǎn)提取的 SIFT 立體匹配
SIFT(尺度不變特征轉(zhuǎn)換)特征點(diǎn)提取算法的關(guān)鍵是在不同的尺度空間上查找圖像的特征點(diǎn),并計(jì)算出特征點(diǎn)的方向。該算法提取出的特征點(diǎn)對圖像的旋轉(zhuǎn)和尺度變化具有不變性,對三維視角變化和光照變化具有很強(qiáng)的適應(yīng)性,局部特征在場景雜亂時(shí)仍保持不變,特征之間相互區(qū)分的能力強(qiáng),有利于實(shí)現(xiàn)不同尺度空間特征點(diǎn)之間的匹配[7]。SIFT算法所查找到的特征點(diǎn)基本都是角點(diǎn)、邊緣點(diǎn)等,不會(huì)因?yàn)楣庹兆兓?、放射變換而變化,因此該算法常被用在立體匹配中。圖3為SIFT算法的實(shí)現(xiàn)流程。
圖3 SIFT 算法流程Fig.3 Flowchart of SIFT algorithm
1.3.3 視差與點(diǎn)云獲取
視差的測量原理如圖4所示,其中Cl、Cr表示左、右圖像坐標(biāo)系。根據(jù)相似三角形原理很容易推導(dǎo)出視差d=xl-xr與圖像深度信息Z的關(guān)系。由圖4可知:
可見深度Z與視差d成反比,因此,只有當(dāng)目標(biāo)與相機(jī)相距較近時(shí)才會(huì)有精度較高的深度Z。
圖4 視差測量原理示意Fig.4 Principle of parallax measurement
要得到非合作目標(biāo)的點(diǎn)云數(shù)據(jù),須先計(jì)算出被測目標(biāo)的空間三維坐標(biāo),并由雙目立體視覺模型中的空間三維世界坐標(biāo)計(jì)算公式(式(3))轉(zhuǎn)換成視差和深度的形式:
通過雙目立體視覺獲得的空間點(diǎn)云是散亂的稀疏點(diǎn)云,可以利用這些點(diǎn)的三維坐標(biāo)來重構(gòu)物體的表面模型。目前廣泛采用的重構(gòu)方法是三角剖分算法或者基于網(wǎng)格生長的三角剖分算法[8],其原理是:由初始的點(diǎn)云數(shù)據(jù),按照一定的算法把這些點(diǎn)劃分成一個(gè)個(gè)三角網(wǎng)格,再將這些網(wǎng)格連接起來,形成最終的目標(biāo)物模型。其中,三角網(wǎng)格的生成是關(guān)鍵,它直接決定點(diǎn)云重建模型的質(zhì)量。點(diǎn)云密度非常大時(shí),三角剖分算法得到的模型曲面非常光滑,但是相應(yīng)的計(jì)算量也非常大,如此進(jìn)行目標(biāo)物結(jié)構(gòu)尺寸測量則實(shí)現(xiàn)速度較慢且計(jì)算復(fù)雜度高。而實(shí)際上,只需要獲得目標(biāo)的外形輪廓即可測量目標(biāo)物的結(jié)構(gòu)尺寸,沒必要對目標(biāo)物的表面進(jìn)行完全重構(gòu)。
因此,本文采用基于圖形輪廓的點(diǎn)云線性擬合方法,先對立體匹配后的圖像進(jìn)行輪廓提取,然后將圖像的輪廓與二維點(diǎn)云進(jìn)行重疊,提取出重疊部分的點(diǎn)的坐標(biāo),再利用最小二乘法原理對邊緣點(diǎn)云數(shù)據(jù)進(jìn)行線性擬合。
Canny算法用Canny邊緣檢測算子來實(shí)現(xiàn)對圖像的邊緣檢測,是先平滑后求導(dǎo)數(shù)的方法,其原理[9]如下:
1)先將圖像格式轉(zhuǎn)化成灰度圖像,再對灰度圖像進(jìn)行高斯濾波。濾波可以使用2個(gè)一維高斯核加權(quán)實(shí)現(xiàn),也可以直接使用二維高斯核一次實(shí)現(xiàn)。
2)計(jì)算梯度的幅值和方向。對x、y求一階偏導(dǎo)數(shù),得到梯度幅值M[i,j]以及梯度方向θ[i,j]的計(jì)算公式
3)對梯度幅值進(jìn)行非極大值抑制,即尋找像素點(diǎn)的局部最大值。為了排除掉非邊緣點(diǎn),將非極大值點(diǎn)所對應(yīng)的灰度值設(shè)置為0。其工作原理是:選定一像素點(diǎn)C,判斷其灰度值是否在8值鄰域內(nèi)為最大;求得C點(diǎn)的梯度方向,將其與C點(diǎn)鄰域像素的交點(diǎn)再與C點(diǎn)進(jìn)行灰度值比較——若C點(diǎn)灰度值小于其他兩點(diǎn),則判斷C點(diǎn)非局部極大值點(diǎn),即非邊緣點(diǎn)。
4)分別設(shè)置高閾值TH和低閾值TL。圖像中灰度值大于TH的點(diǎn)即為邊緣點(diǎn),可以連接成目標(biāo)輪廓;而灰度值小于TL的點(diǎn)可以直接舍棄;對于灰度值介于TL與TH之間的點(diǎn),則需在8值鄰域內(nèi)進(jìn)行比較以確定其是否為邊緣點(diǎn)。
獲得的點(diǎn)云數(shù)據(jù)中會(huì)存在一些噪聲點(diǎn)或者誤匹配點(diǎn),為了剔除這些點(diǎn),一般會(huì)通過構(gòu)建點(diǎn)云模型來提取邊緣輪廓,方法有2種:1)采用三角剖分算法構(gòu)建三角網(wǎng)格,從而逼近目標(biāo)物的模型;2)直接由點(diǎn)云進(jìn)行空間線性擬合和曲面擬合。通過構(gòu)建三角網(wǎng)格來提取輪廓的方法計(jì)算量非常大,而且凹邊形的邊緣上會(huì)存在狹長的三角形,進(jìn)行邊緣點(diǎn)提取時(shí)易產(chǎn)生較大誤差[10]。而直接提取法需要對點(diǎn)云數(shù)據(jù)進(jìn)行區(qū)域分割和曲率計(jì)算,計(jì)算復(fù)雜度較高,易增大誤差。本文采用輪廓邊緣提取法對點(diǎn)云數(shù)據(jù)的邊緣進(jìn)行提取,不僅可以有效排除這些噪聲點(diǎn),而且可有效降低計(jì)算復(fù)雜度。
將三維點(diǎn)云投影到xy平面,并與已提取的輪廓圖像進(jìn)行重疊,從中提取重疊部分的點(diǎn)云坐標(biāo)。具體實(shí)現(xiàn)步驟如下:1)通過二值圖像形態(tài)學(xué)處理將輪廓線圖像的噪聲點(diǎn)去除,并細(xì)化輪廓線;2)將點(diǎn)云坐標(biāo)系轉(zhuǎn)換到圖像像素坐標(biāo)系,將點(diǎn)云數(shù)據(jù)轉(zhuǎn)化為二維點(diǎn)云;3)對轉(zhuǎn)化后的二維點(diǎn)云數(shù)據(jù)進(jìn)行插值;4)提取輪廓線上的拐點(diǎn)位置,將輪廓線圖像上像素灰度值為255的點(diǎn)坐標(biāo)提取出來與二維點(diǎn)云圖像上的點(diǎn)進(jìn)行匹配,若坐標(biāo)點(diǎn)的灰度值小于閾值則將其提取出來。對于所有提取出來的點(diǎn)進(jìn)行線性擬合時(shí),需先結(jié)合提取到的拐點(diǎn)對輪廓點(diǎn)云數(shù)據(jù)進(jìn)行區(qū)域分割,本文采用自適應(yīng)閾值法進(jìn)行分割。
采用最小二乘法進(jìn)行直線擬合,對于已知的二維點(diǎn)云 (x1,y1)、(x2,y2)、···,要擬合的模型表達(dá)式為y=f(x),使誤差最?。蝗缓髮φ`差公式求偏導(dǎo),再將兩點(diǎn)的坐標(biāo)代入即得到方程f(x)的直線表達(dá)式。圖5所示為Canny算子邊緣檢測結(jié)果;圖6所示為輪廓點(diǎn)線性擬合結(jié)果。
圖5 Canny 算子邊緣檢測結(jié)果Fig.5 Edge detection of Canny operator
圖6 輪廓點(diǎn)線性擬合結(jié)果Fig.6 Linear fitting of contour points
搭建雙目視覺立體測量實(shí)驗(yàn)平臺(tái)如圖7所示,包括三維旋轉(zhuǎn)平臺(tái)、控制箱、雙目相機(jī)和計(jì)算機(jī)。利用三維旋轉(zhuǎn)平臺(tái)和控制箱來模擬非合作目標(biāo)在空間中的翻轉(zhuǎn)運(yùn)動(dòng)狀態(tài),雙目相機(jī)的最高有效像素為2560×960。本文采用一個(gè)立方體模擬非合作目標(biāo)模型進(jìn)行測量,所有算法的仿真均在MATLAB軟件平臺(tái)進(jìn)行,對立方體的外形輪廓尺寸測量結(jié)果與其實(shí)際尺寸的對比見表2。
圖7 雙目視覺立體測量實(shí)驗(yàn)平臺(tái)Fig.7 Hardware platform for binocular stereo vision measurement
表2中的關(guān)鍵尺寸用顏色來表示,以與圖6中擬合出來的不同顏色的直線相對應(yīng),并依次對應(yīng)立方體的左上橫邊、右上橫邊、中間豎邊、右豎邊、左豎邊、左下橫邊、右下橫邊。根據(jù)表中的結(jié)果可預(yù)估目標(biāo)物為體積約為 1 187.625 9 cm3的立方體。根據(jù)表2的對比結(jié)果可知,本文設(shè)計(jì)的雙目視覺立體測量系統(tǒng)對非合作目標(biāo)的關(guān)鍵結(jié)構(gòu)特征尺寸的測量誤差達(dá)到百μm級(jí)。
本文提出一種點(diǎn)云輪廓線的直接提取算法應(yīng)用于非合作目標(biāo)的結(jié)構(gòu)尺寸測量,打破了需先進(jìn)行目標(biāo)物的三維重構(gòu)再提取其輪廓的常規(guī),在保持測量精度的同時(shí)降低了算法的實(shí)現(xiàn)復(fù)雜度,提高了測量效率。在對被測目標(biāo)模型完全未知的情況下,采用視覺獲取點(diǎn)云數(shù)據(jù)的方法也可進(jìn)行目標(biāo)的位姿測量,從而為實(shí)現(xiàn)非合作目標(biāo)的動(dòng)態(tài)追蹤與捕獲奠定基礎(chǔ)。