呂 立,姚拓中,宋加濤,肖江劍,王建軍
(1.寧波工程學(xué)院 電信學(xué)院,浙江 寧波 315211;2.中國(guó)科學(xué)院寧波工業(yè)技術(shù)研究所,浙江 寧波 315201;3.寧波江東泉拓電子有限公司,浙江 寧波 315040)
隨著硬件技術(shù)的發(fā)展和計(jì)算機(jī)處理能力的提高,場(chǎng)景三維模型的獲取技術(shù)越來越成熟。根據(jù)使用傳感器的不同將三維重建的方法分為2類:1)利用主動(dòng)距離傳感器,比如激光掃描儀、結(jié)構(gòu)光等;2)依賴于被動(dòng)距離傳感器,比如攝像機(jī)。視覺傳感器體積小,價(jià)格低,便于使用,能夠提供豐富的環(huán)境信息,因此,使用視覺傳感器實(shí)現(xiàn)場(chǎng)景三維重建是近年來的研究熱點(diǎn)。
目前,立體視覺技術(shù)廣泛應(yīng)用于視覺重建。文獻(xiàn)[1]通過兩個(gè)固定位置攝像機(jī)模擬人體視覺系統(tǒng)的方法恢復(fù)二維圖像丟失的深度信息。相比兩個(gè)攝相機(jī)視覺技術(shù),僅利用一臺(tái)手持式數(shù)碼相機(jī)實(shí)現(xiàn)三維場(chǎng)景重建的方法具有設(shè)備簡(jiǎn)單、適用方便以及成本低廉等優(yōu)點(diǎn),并且非常容易在其他領(lǐng)域得到推廣應(yīng)用。
自視覺幾何被提出以來,國(guó)內(nèi)外優(yōu)秀學(xué)者對(duì)視覺重建做出了巨大的貢獻(xiàn)。文獻(xiàn)[2]提出一種基于圖像序列的視覺重建方法,采用自標(biāo)定、圖像匹配、立體匹配、紋理渲染等技術(shù)實(shí)現(xiàn)重建,該算法雖然耗時(shí),但對(duì)視覺重建的研究和發(fā)展具有重大意義。文獻(xiàn)[3]提出基于無序互聯(lián)網(wǎng)圖像序列的視覺重建方法,但其基于無序圖像的重建需要對(duì)圖像進(jìn)行匹配關(guān)聯(lián),增加算法的復(fù)雜度。文獻(xiàn)[4]采用基于圖形處理器(Graphics Processing Unit,GPU)的尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)算法和多核光束平差法(Bundle Adjustment,BA),并結(jié)合PMVS(Patch-Based Muti-View)算法、CMVS(Clustering Muti-View Stereo)算法[5]稠密紋理渲染技術(shù),提高了算法的效率和精度,但采用無序圖像重建,存在一定的改進(jìn)空間。中國(guó)科學(xué)院自動(dòng)化研究所機(jī)器視覺課題組致力于視覺重建的發(fā)展和研究,通過多視角高分辨率的建筑物圖像自動(dòng)獲取建筑物三維化模型[6],并將該技術(shù)應(yīng)用在古建筑三維數(shù)字化的保護(hù),高分辨率圖像提高了重建的精確度卻帶來了算法過于耗時(shí)的問題。文獻(xiàn)[7]和文獻(xiàn)[8]在完成稀疏場(chǎng)景重建的基礎(chǔ)上對(duì)其進(jìn)行致密重建,從而獲得一個(gè)致密的三維場(chǎng)景,但算法計(jì)算量很大,且需要依賴GPU來完成加速。
針對(duì)上述研究,本文提出單臺(tái)手持式數(shù)碼相機(jī)恢復(fù)場(chǎng)景的三維重建方法。該方法采用匹配算法匹配圖像幀序列,使用對(duì)極幾何初始化相機(jī)位姿,運(yùn)用局部關(guān)聯(lián)幀的光束平差法實(shí)現(xiàn)攝像機(jī)位姿和三維點(diǎn)位置的優(yōu)化。
與無序圖像序列的三維重建相比,攝像機(jī)連續(xù)拍攝有序圖像使圖像具備良好的關(guān)聯(lián)性。因此,采用單臺(tái)手持式數(shù)碼設(shè)備連續(xù)拍攝恢復(fù)場(chǎng)景的三維模型結(jié)構(gòu),對(duì)數(shù)碼攝像機(jī)進(jìn)行內(nèi)參數(shù)標(biāo)定。場(chǎng)景重建的具體步驟如下:
1)用SIFT特征點(diǎn)匹配作為圖像關(guān)聯(lián)和重建的基礎(chǔ)。
2)用對(duì)極幾何的思路初始化相機(jī)位姿和初始化場(chǎng)景重建。
3)用改進(jìn)PnP算法計(jì)算新的攝像機(jī)位姿,并在使用策略上進(jìn)行改進(jìn),考慮新特征點(diǎn)的共視程度擴(kuò)建場(chǎng)景。
4)用基于局部關(guān)聯(lián)幀的光束平差法優(yōu)化位姿和場(chǎng)景。
單目視覺三維重建算法流程如圖1所示。
圖1 單目視覺三維重建算法流程
本文算法需要實(shí)現(xiàn)標(biāo)定攝像機(jī)的內(nèi)參數(shù)和畸變系數(shù)(攝像機(jī)自帶屬性)。在理想情況下,攝像機(jī)符合線性模型,攝像機(jī)內(nèi)參數(shù)由矩陣K表示:
(1)
其中,fx、fy是以圖像像素為單位,分別表示水平和垂直焦距,u0、v0表示圖像的像素中心(即焦點(diǎn))[9],通常把K稱為攝像機(jī)內(nèi)參矩陣,與攝像機(jī)本身有關(guān)。此外,由于攝像機(jī)制造工藝問題,因此大多數(shù)存在成像畸變。
本文采用比較經(jīng)典和穩(wěn)固的張正友標(biāo)定法標(biāo)定攝像機(jī)的內(nèi)參和畸變系數(shù)[10],從平面的單應(yīng)性質(zhì)著手,提出一種根據(jù)拍攝不同位置和朝向的平面棋盤格圖像模版求解攝像機(jī)的內(nèi)參數(shù)和畸變系數(shù)。
特征點(diǎn)是圖像中具有鮮明特性的點(diǎn),而特征匹配是在2幅甚至多幅圖像中找出相同特征的點(diǎn)。圖像特征點(diǎn)匹配可以獲得相同點(diǎn)在2幅圖像坐標(biāo)系上的相對(duì)位置關(guān)系,三維重建就是利用相對(duì)位置關(guān)系計(jì)算攝像機(jī)在三維空間上的運(yùn)動(dòng)變換??紤]到場(chǎng)景中存在弱紋理、或被光照和鏡面反射影響的區(qū)域,這些區(qū)域的特征點(diǎn)不容易被提取和匹配。因此,本文算法采用穩(wěn)固且高效的SIFT特征匹配算法[11]。
本文采用單個(gè)數(shù)碼相機(jī)環(huán)繞書包緩慢移動(dòng)(環(huán)繞約90°),拍攝一組圖像序列(簡(jiǎn)稱Bag序列)。圖2表示其中2個(gè)視角的圖像,圖3是對(duì)原圖進(jìn)行SIFT特征匹配的結(jié)果。其中,圓圈代表圖像特征點(diǎn),直線代表匹配點(diǎn)。從圖3可以看出,SIFT特征點(diǎn)匹配的結(jié)果存在大量的誤配點(diǎn),這些噪聲會(huì)影響計(jì)算結(jié)果。為了去除噪聲,在完成SIFT特征匹配后,本文使用隨機(jī)抽樣一致算法(Random Sample Consensus,RANSAC)[12]對(duì)誤配點(diǎn)進(jìn)行去除。圖4是經(jīng)過RANSAC剔除誤配點(diǎn)后的SIFT匹配結(jié)果。顯然,經(jīng)過RANSAC迭代剔除誤配點(diǎn)之后,大部分匹配點(diǎn)都是正確的,完成圖像間特征匹配后,可以計(jì)算攝像機(jī)位姿和場(chǎng)景重建。
圖2 2個(gè)視角下拍攝的書包
圖3 SIFT匹配結(jié)果
圖4 SIFT特征匹配經(jīng)過RANSAC優(yōu)化后的結(jié)果
1.3.1 攝像機(jī)位姿
場(chǎng)景三維重建的過程就是不斷求解攝像機(jī)位姿的過程。在拍攝過程中,攝像機(jī)可以在空間中的任意位置運(yùn)動(dòng),為了描述攝像機(jī)的移動(dòng)關(guān)系和場(chǎng)景三維坐標(biāo),需定義一個(gè)基準(zhǔn)坐標(biāo)系,該坐標(biāo)系稱為世界坐標(biāo)系。
(2)
其中,R為3×3單位正交矩陣,t為3×1平移向量。選定第一幀圖像攝像機(jī)坐標(biāo)系為世界坐標(biāo)系,因此,在場(chǎng)景重建過程中求解的位姿是當(dāng)前圖像幀與初始圖像幀的位置關(guān)系。
1.3.2 初始場(chǎng)景攝像機(jī)位姿估計(jì)及重建
在初始化場(chǎng)景時(shí),本文采用經(jīng)典的對(duì)極幾何[13]定理計(jì)算初始兩幀圖像攝像機(jī)位姿之間的關(guān)系。兩幀圖像匹配的對(duì)應(yīng)點(diǎn)Xn和XnT之間存在著如下極線約束關(guān)系:
(3)
其中,E為本質(zhì)矩陣。利用RANSAC算法從特征匹配中估計(jì)E,并對(duì)E進(jìn)行奇異值分解:
SVD(E)~U·diag(1,1,0)·Vt
(det(U)>0,det(V)>0)
(4)
AX=b
(5)
其中:
式(5)可以利用最小二乘法求得X,即對(duì)應(yīng)特征點(diǎn)的三維重建結(jié)果。
1.3.3 基于PnP算法的圖像攝像機(jī)位姿估計(jì)
當(dāng)新插入幀圖像加入時(shí),不能使用本質(zhì)矩陣E和SVD分解的方法來估計(jì)R和t,因?yàn)橛?jì)算結(jié)果會(huì)引入一個(gè)新的單位移動(dòng)尺度。為了能用初始化時(shí)的單位移動(dòng)尺度關(guān)聯(lián)新加入幀的位姿,本文采用一種魯棒的PnP(Perspective n Points)算法[14]求解R和t,并在使用策略上進(jìn)行改進(jìn)。
已知n個(gè)3D點(diǎn)的坐標(biāo)及對(duì)應(yīng)的2D投影坐標(biāo),求解該相機(jī)的位姿。初始化三維場(chǎng)景過程獲得3D點(diǎn),要在新加入幀圖像中找到3D點(diǎn)對(duì)應(yīng)的2D投影點(diǎn)。假設(shè)當(dāng)前重建場(chǎng)景包含N0個(gè)圖像記為I,新加入圖像為In+1,三維點(diǎn)云集合為SP,proji(X)(X∈SP)表示將三維點(diǎn)X投影到i上的一個(gè)投影變換。傳統(tǒng)PnP策略是將新圖像幀與已重建的圖像進(jìn)行特征匹配,但特征匹配比較耗時(shí),且隨著相機(jī)移動(dòng)圖像間的關(guān)聯(lián)性可能會(huì)變小(匹配特征點(diǎn)少)。因此,PnP算法的使用策略如下:
1)將In+1與前N個(gè)圖像幀特征點(diǎn)匹配,記特征點(diǎn)匹配集合為:
C={x|x∈I∩x∈In+1}
(6)
考慮到算法的耗時(shí)和魯棒性,N定義為:
(7)
2)在集合C與集合SP中找到對(duì)應(yīng)關(guān)聯(lián)的集合CSP,表示為:
CSP={X|X∈SP∩projN+1(X)∈In+1}
(8)
即獲得重建場(chǎng)景3D點(diǎn)與新加入圖像2D特征點(diǎn)的對(duì)應(yīng)集合。3D點(diǎn)與2D點(diǎn)需要一一對(duì)應(yīng),當(dāng)某一個(gè)3D點(diǎn)找到其在某一圖像上的2D對(duì)應(yīng)點(diǎn)后,將不考慮該3D點(diǎn)與其他圖像2D點(diǎn)的對(duì)應(yīng)關(guān)系。
3)使用2D和3D對(duì)應(yīng)點(diǎn)集合反求解出新加入幀圖像的位姿R和t。
1.3.4 新圖像幀魯棒特征點(diǎn)重建
傳統(tǒng)的重建方法在求得新圖像關(guān)鍵幀的位姿R、t后,將新圖像幀匹配點(diǎn)中的未被重建特征點(diǎn)加入到場(chǎng)景中,但存在誤配點(diǎn)被重建、特征點(diǎn)共視程度太低影響場(chǎng)景優(yōu)化等問題。因此,本文算法篩選出穩(wěn)定的、重建場(chǎng)景中未包含的特征點(diǎn)加入到三維點(diǎn)云中,不斷擴(kuò)充重建結(jié)果。在求解攝像機(jī)位姿的過程中,獲得了新圖像幀與前n個(gè)圖像幀匹配的特征點(diǎn)集合C。為了提高重建的精度,本文選取集合C中共視程度較高(特征點(diǎn)被加入幀圖像和多個(gè)已重建圖像同時(shí)觀察到)的特征點(diǎn)加入到重建場(chǎng)景中。具體場(chǎng)景點(diǎn)云擴(kuò)建算法如下:
1)在特征點(diǎn)匹配集合C中找到既存在于新圖像幀又能被至少K(K≥2)個(gè)已重建圖像同時(shí)觀察到的特征點(diǎn)集合Z。
2)如果集合Z的特征點(diǎn)被其他2幀以上的已重建圖像觀察到,則任選2幀已重建圖像的投影矩陣以及特征點(diǎn)坐標(biāo)用三角化的方法重建。
圖5和圖6分別表示部分Bag圖像序列多幀重建的正視圖和側(cè)視圖。書包的大體結(jié)構(gòu)比較明顯,但攝像機(jī)位姿出現(xiàn)偏移,場(chǎng)景結(jié)果中出現(xiàn)了許多雜亂無章的三維點(diǎn)(在側(cè)視圖下尤為明顯)。為了解決此問題,本文引入優(yōu)化方法約束攝像機(jī)位姿和三維點(diǎn)云的位置。
圖5 Bag重建結(jié)果正視圖
圖6 Bag重建結(jié)果側(cè)視圖
光束平差法是三維重建和SLAM領(lǐng)域中最基礎(chǔ)的優(yōu)化方法,用來優(yōu)化投影矩陣Pi和三維空間點(diǎn)Xj,使圖像中觀測(cè)到的特征點(diǎn)坐標(biāo)Xij和重投影后的特征點(diǎn)圖像坐標(biāo)PiXij間的誤差最小[15]。如果圖像誤差是零均值高斯,則光束平差法是一個(gè)最大似然估計(jì)器,代價(jià)函數(shù)為:
Xj∈X
(9)
其中,M=|X|,C={Ri,Ti|N-N02.2 局部關(guān)聯(lián)幀的光束平差法
在圖像序列較多,場(chǎng)景結(jié)構(gòu)較大,攝像機(jī)位姿較多的情況下,光束平差法的算法復(fù)雜度過高。在每次新加入圖像重建后將所有結(jié)構(gòu)和位姿進(jìn)行光束平差法較為耗時(shí)。本文提出一種基于局部關(guān)聯(lián)幀的光束平差法優(yōu)化方法,局部關(guān)聯(lián)幀是與當(dāng)前新加入圖像幀有緊密關(guān)聯(lián)的已重建圖像集合。當(dāng)圖像場(chǎng)景結(jié)構(gòu)較小時(shí),采用傳統(tǒng)的光束平差法優(yōu)化,在算法不過度耗時(shí)的情況下確保場(chǎng)景重建初始階段的結(jié)果較為精確,找出與當(dāng)前圖像幀有局部關(guān)聯(lián)的圖像幀集合,然后對(duì)攝像機(jī)位姿以及攝像機(jī)位姿關(guān)聯(lián)的三維點(diǎn)做光束平差法優(yōu)化。具體算法如下:
假設(shè)當(dāng)前場(chǎng)景包含圖像數(shù)為N,待優(yōu)化圖像幀數(shù)為Nt,局部關(guān)聯(lián)幀為M。當(dāng)N≤20時(shí),本文使用傳統(tǒng)的光束平差法優(yōu)化;當(dāng)N>20時(shí),采用基于局部關(guān)聯(lián)幀的光束平差法。則有關(guān)系式:
(10)
局部關(guān)鍵幀圖像M的確定方法如下:
1)假設(shè)當(dāng)前圖像幀的三維點(diǎn)云集合為S,遍歷點(diǎn)云S,統(tǒng)計(jì)該圖像幀與已重建圖像的共視三維點(diǎn)個(gè)數(shù),取共視程度最高的5個(gè)已重建圖像幀加入M。
2)對(duì)加入的5個(gè)圖像幀重復(fù)第1步的操作,如果找到的圖像幀已存在M中,則不考慮重復(fù)添加。
3)如果M中的圖像數(shù)量少于10,則取當(dāng)前新圖像幀的前10幀圖像作為局部關(guān)聯(lián)幀,否則,將M作為待優(yōu)化攝像機(jī),加入到光束平差法優(yōu)化。
本文在VS2013平臺(tái)下用C++開發(fā),CPU為i5-4200U,內(nèi)存為4G,使用單個(gè)數(shù)碼相機(jī)對(duì)一個(gè)書包拍攝Bag序列。該序列共有19幀,分辨率為600×800像素,保持場(chǎng)景不動(dòng),移動(dòng)手機(jī)從書包正面移動(dòng)到書包側(cè)面,每次移動(dòng)約4°到5°拍攝一張圖像,如圖7所示。
圖7 Bag序列
圖8和圖9分別表示Bag序列重建結(jié)果的主視圖和側(cè)視圖,能夠看到書包的三維重建結(jié)構(gòu),與圖5、圖6相比,書包的重建結(jié)構(gòu)更加完善和整齊,特別是側(cè)視圖。圖9去除雜亂的噪聲點(diǎn),且書包的凹凸結(jié)構(gòu)更加的分明。結(jié)果表明,本文方法能夠?qū)崿F(xiàn)簡(jiǎn)單場(chǎng)景的三維重建,但Bag序列圖像數(shù)量較少,不能體現(xiàn)局部關(guān)聯(lián)幀光束平差法優(yōu)化的效果。
圖8 Bag序列重建正視圖
圖9 Bag序列重建側(cè)視圖
為了驗(yàn)證方法的魯棒性和基于局部關(guān)聯(lián)幀光束平差法的優(yōu)勢(shì),本文采用從牛津大學(xué)VGG(Visual Geometry Group)網(wǎng)站上下載的標(biāo)準(zhǔn)測(cè)試集:Dinosaur序列。該圖像序列共36幀,恰好繞模型拍攝一圈(每10°拍攝一張),如圖10所示。
圖10 Dinosaur圖像序列
圖11和圖12表示重建結(jié)果的側(cè)視圖。從圖11可以看出,恐龍的三維模型基本比較清晰。從圖12可以看出,攝像機(jī)位姿移動(dòng)旋轉(zhuǎn)一周,基本擬合成圓。此外,本文將基于局部關(guān)聯(lián)的光束平差法與傳統(tǒng)光束平差法的方法進(jìn)行對(duì)比,結(jié)果如圖13和圖14所示,其中,實(shí)線代表傳統(tǒng)的光束平差法,虛線代表基于局部關(guān)聯(lián)幀的光束平差法。當(dāng)圖像幀數(shù)量大于20幀時(shí),本文方法縮短算法的耗時(shí),但兩者在重投影誤差上沒有區(qū)別。當(dāng)圖像幀數(shù)大于一定數(shù)量時(shí),隨著圖像幀數(shù)的不斷增加,算法的復(fù)雜度不會(huì)受到影響,因此本文方法不僅具有較強(qiáng)的魯棒性,而且能夠節(jié)約時(shí)間。
圖11 Dinosaur重建側(cè)視圖
圖12 Dinosaur重建俯視圖
圖13 不同方法耗時(shí)對(duì)比結(jié)果
圖14 不同方法誤差對(duì)比結(jié)果
本文通過2個(gè)實(shí)驗(yàn)驗(yàn)證了本文方法的有效性,但重建的場(chǎng)景頗小,不具有說服力,因此將本文方法應(yīng)用于更大、更高難度場(chǎng)景的三維重建。
該序列共有132幀圖像,圖15~圖18為部分圖像,該場(chǎng)景主要沿著草坪行走拍攝,草坪凹凸不平,使攝像機(jī)拍攝角度不穩(wěn)定。此外,草地顏色非常單一,紋理特點(diǎn)不明顯,可能增加特征匹配和除去誤配點(diǎn)的難度,但能夠驗(yàn)證本文方法的魯棒性。
圖15 草地圖像序列第1幀
圖16 草地圖像序列第30幀
圖17 草地圖像序列第60幀
圖18 草地圖像序列第90幀
草地場(chǎng)景的重建耗時(shí)5 min,其最終的重投影誤差小于0.25,圖19和圖20表示草地重建場(chǎng)景2個(gè)視角下的結(jié)果,圖20看出草地明顯存在跌宕起伏地形變化,但攝像機(jī)位姿變化趨于平穩(wěn),漂移不明顯。本文方法考慮了重建特征點(diǎn)的共視度,有效地去除了RANSAC階段遺留的誤配點(diǎn),增加場(chǎng)景重建的準(zhǔn)確度,具有較強(qiáng)的魯棒性。
圖19 草地場(chǎng)景重建1
圖20 草地場(chǎng)景重建2
針對(duì)視覺重建方法存在構(gòu)成復(fù)雜、精度低、耗時(shí)高等問題,本文提出一種基于單目視覺的三維重建方法。利用SIFT算法匹配圖像幀序列,使用對(duì)極幾何的原理初始化圖像的攝像機(jī)位姿,引入PnP算法進(jìn)行多幀重建,采用局部關(guān)聯(lián)幀的光束平差法重建精度,降低算法耗時(shí)。實(shí)驗(yàn)結(jié)果表明,本文方法不僅適用于小的物體,而且能夠完成復(fù)雜的大場(chǎng)景重建,具有較強(qiáng)的魯棒性。但本文方法在重建過程中丟失了圖像大部分的紋理信息,只能獲得稀疏的三維點(diǎn)云,場(chǎng)景過于稀疏,下一步將研究致密場(chǎng)景重建三維圖像。