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