張健
(四川大學(xué)計算機(jī)學(xué)院,成都610065)
目前,單目三維重建領(lǐng)域的研究已經(jīng)比較成熟,主流的方法都是先通過效果比較好的特征匹配算法(如SIFT)對圖集進(jìn)行特征計算,然后根據(jù)計算的特征點進(jìn)行特征匹配、用RANSAC 算法進(jìn)行誤匹配剔除,然后對匹配好的特征點通過三角化計算空間中三維點的坐標(biāo)。整個過程配以非線性優(yōu)化計算,對內(nèi)參、外參、路標(biāo)點進(jìn)行非線性優(yōu)化[1]。多圖集的重建過程中,主要是采用兩種重建方法,一種是增量式重建,另一種是全局重建。目前主流的還是增量重建。在單目三維重建領(lǐng)域有很多優(yōu)秀的開源庫可以使用,并提供了全面的文檔注釋,方便自定義擴(kuò)展。在SFM(Structure From Motion)生成點云領(lǐng)域的常見開源庫有:Bundler、MVE、openMVG、VisualSFM。在表面構(gòu)建和紋理生成領(lǐng)域常用的開源庫有:openMVS、MVE、MeshLab 等。學(xué)習(xí)研究這些優(yōu)秀的開源庫,能有效提高對三維重建領(lǐng)域成熟實現(xiàn)方案的理解,對提高算法和工程水平大有裨益。本文將基于openMVG+openMVS 開展研究。
在三維重建開源庫中,openMVG+openMVS 雖然有配置繁瑣,代碼量過大的缺點。但其功能強(qiáng)大且全面,支持多種自定義的拓展選擇,具有完備的代碼注釋,重建效果優(yōu)秀等優(yōu)點使其成為業(yè)界非常成熟的重建方案。本文將在此開源庫的基礎(chǔ)上開展工作。
openMVG 主要用來做SFM,通過多視角拍攝得到圖集,構(gòu)建出稀疏點云或稠密點云。openMVS 在open-MVG 的基礎(chǔ)上,對生成的點云進(jìn)行表面和紋理重建,得到真實的模型?;谏鲜隽鞒炭梢詫崿F(xiàn)從拍攝物體得到圖集到最后得到物體的三維模型的轉(zhuǎn)變。簡要流程如圖1 所示。
圖1
如圖1 所示,在單目多視角拍攝的三維重建中,特征提取與匹配起著至關(guān)重要的作用,但是球幕系統(tǒng)有其特殊性,球幕整體上是一個不規(guī)則的半球型幕布,通過多通道投影儀投放相同的圖像到幕布上后進(jìn)行校正處理,得到所要顯示的圖像。所以,如果直接對球幕進(jìn)行單目拍攝,則只能拍攝到?jīng)]有任何特征點可以提取的白色光滑幕布,無法進(jìn)行特征提取,也自然無法進(jìn)行單目拍攝重建工作。解決辦法也比較直接,在光滑幕布上投影出一些圖案,這樣拍攝到圖像就會是投影出的圖案,而圖案顯然具有大量特征信息,可以用于特征匹配和單目多視角拍攝的三維重建。此時,一個新的問題自然顯現(xiàn)出來:“應(yīng)該給球幕投影什么樣的特征圖案能獲得最好的重建效果呢?”。顯然,投影不同的圖案會拍攝到不同的特征,不同的特征會產(chǎn)生不同的重建效果,針對這個問題的研究的內(nèi)容,放到了本文后面的第二節(jié)討論,此節(jié)著重講解重建流程。
首先,通過多視角拍攝物體得到了一系列球幕圖片的圖集,得到原始數(shù)據(jù)。
然后,ImageListing 處理需要對圖集進(jìn)行處理,主要包括:①獲取相機(jī)信息和圖片信息,②構(gòu)建sfm_data的數(shù)據(jù)結(jié)構(gòu)并完善圖片集views 的信息與內(nèi)參intrinsics 的信息。
對于相機(jī)信息,主要需要確定相機(jī)的畸變模型和焦距。相機(jī)都會存在畸變,主要來自于兩方面,一是由于相機(jī)都會采用透鏡,而透鏡會對光線傳播造成影響,引發(fā)畸變,這種畸變稱為徑向畸變。二是由于相機(jī)在組裝過程中必然存在著機(jī)械誤差,造成透鏡與成像平面不是完全平行的現(xiàn)象,也會產(chǎn)生畸變,此類畸變稱為切向畸變。一般在考慮相機(jī)畸變時,只考慮徑向畸變。徑向畸變主要分為兩種,一是桶形畸變,二是枕形畸變,此處不做詳細(xì)解釋。由于透鏡基本都成中心對稱,所以通常徑向畸變會呈現(xiàn)徑向?qū)ΨQ。常用如下多項式函數(shù)進(jìn)行徑向畸變的校正。
如不考慮畸變,則為經(jīng)典的Pinhole 相機(jī)模型;圖像中心區(qū)域的畸變,畸變小,主要是k1項起作用,而對于畸變稍大的邊緣區(qū)域,則主要是k2項起作用,如只考慮k1和k2項的畸變,則為Pinhole radial 1 相機(jī)模型,普通相機(jī)一般采用這種相機(jī)模型;對于畸變非常大的攝像頭,例如魚眼攝像頭,則需要加入k3系數(shù)來糾正畸變,此為Pinhole radial 3 相機(jī)模型,本文采用此種相機(jī)模型,能最大限度糾正畸變。在IncrementalSFM 處理過程中采用非線性優(yōu)化的方法來計算k1、k2、k3三個系數(shù)是本文采用的畸變校正方法。
對于圖片信息,主要為獲取圖片EXIF 信息計算相機(jī)內(nèi)參,通過EXIF 信息可知,圖片分辨率為5184×3456,物理焦距為18mm。查閱資料可知,Canon EOS Rebel T2i 型號的相機(jī)的傳感器寬度為22.3。綜上可知,內(nèi)參Cx和Cy分別為2592.0、1728.0。內(nèi)參fx和fy可通過如下公式計算得出:
自此,內(nèi)參矩陣的四個未知數(shù)均已知。
對于構(gòu)建sfm_data 的數(shù)據(jù)結(jié)構(gòu)并完善圖片集views 的信息。本文的過程中有4 種重要的數(shù)據(jù)需要保存在sfm_data 中,分別為views 圖集信息、圖集對應(yīng)的內(nèi)參信息、圖集對應(yīng)的外參信息、3D 路標(biāo)點以及能觀測到該路標(biāo)點的各個2D 圖像點信息。在ImageListing 中,負(fù)責(zé)完善圖集的路徑設(shè)置,編號,與內(nèi)參外參編號對應(yīng)的相關(guān)信息,并計算好內(nèi)參信息。
之后,computeFeatrues 主要負(fù)責(zé)計算各個圖片的特征子和描述子。因為本文不在乎特征計算的實時性,所以應(yīng)選取效果最好的特征匹配算法。主流可選的方法通常為SIFT 與AKAZE,這兩種方法各有優(yōu)劣,本文采用使用面比較廣的SIFT 特征匹配算法來開展工作[2]。
SIFT 特征匹配的實現(xiàn)原理此處不做贅述,對圖集中的每張圖片進(jìn)行SIFT 特征計算生成feats 文件和descs 的描述子文件。
然后,computeMatches 主要利用計算好的feats 和descs 計算特征匹配。對于數(shù)量為n 的圖集,兩兩配對會有次配對計算,為保證重建結(jié)果的準(zhǔn)確性,不采用NNS、KNS 等臨近匹配算法,直接采用Brute force 暴力法計算歐氏距離,然后采用RANSAC 算法剔除誤匹配的數(shù)據(jù),將所有兩兩圖片計算出來的匹配信息通過特征點id 對的方式表示,統(tǒng)計成match 數(shù)據(jù)[3]。
最后,綜合以上各種信息,進(jìn)行incrementalSFM 增量重建。增量重建是一個比較復(fù)雜的過程,是整個重建過程的核心。大致可以分為以下四步:
(1)利用并查集建立軌跡數(shù)據(jù),具體做法為將所有圖片的feats 數(shù)據(jù)<imageid,featid>全部放入一個set 集合中,建立并查集初集,然后遍歷match 數(shù)據(jù),若兩個圖片對應(yīng)的feat 匹配,則將這兩個feat 數(shù)據(jù)在并查集中并起來,遍歷過程中不斷更新并查集。最后并查集一個根下的所有子節(jié)點構(gòu)成了一個track,不同子節(jié)點代表了觀測到了同一個空間點的不同圖片的二維觀察點。一個track 就對應(yīng)一個空間點的所有位于不同圖片的二維觀測數(shù)據(jù)。
(2)建立初始點云,通過五點法或八點法初步計算每副圖像的外參位姿,從中選擇出方向向量夾角最大即基線最大的兩幅圖像構(gòu)成初始匹配圖像對。獲得了初始匹配圖像對之后,以計算的初始外參和特征點對計算三角化,獲得空間3D 點的坐標(biāo)。因為特征點數(shù)據(jù)遠(yuǎn)遠(yuǎn)多于五點、八點法的需要,將其他眾多特征點用于非線性優(yōu)化的數(shù)據(jù),利用ceres 進(jìn)行非線性優(yōu)化運算,優(yōu)化對象為整個重建過程用到的所有數(shù)據(jù):內(nèi)參、外參、畸變參數(shù),3D 空間點坐標(biāo),最后得到一個比較準(zhǔn)確的結(jié)果,眾多空間3D 點構(gòu)成了初始點云。
(3)開始增量重建過程,每次從剩下的圖集中選一個相關(guān)點最多的圖片,與現(xiàn)有的場景點云進(jìn)行增量融合,更新現(xiàn)有的場景點云,不斷增量更新場景,使得場景越來越完善。
(4)融合場景大致分為以下六個步驟:①對于當(dāng)前圖片,對應(yīng)一個view_id,獲取所有tracks 中含有view_id 的所有track 數(shù)據(jù),把所有滿足條件的track 放入一個set 中。②獲取現(xiàn)有場景中的所有tracks 并放入到另一個set 中。③計算兩個set 中的相同的tracks,放入另一個set 中。④把共同tracks 中在該view_id 下的二維點數(shù)據(jù)收集起來。⑤對于共同的tracks,現(xiàn)有場景中已有其對應(yīng)的3D 空間點,此時,已知3D 點與對應(yīng)的view_id 下的二維點數(shù)據(jù),利用PnP可求解出view_id 的位姿[4]。⑥遍歷view_id 對應(yīng)的圖片中的每個點對應(yīng)的track,如發(fā)現(xiàn)現(xiàn)有的重建場景中沒有該track,則遍歷該track 的所有子節(jié)點<view,feat>對,找一個已經(jīng)出現(xiàn)在重建場景中的view_j,讓view_id與view_j 做三角化得到新的空間點,將該空間點更新添加到現(xiàn)有場景。通過以上七個步驟,完成增量重建的場景融合過程,得到完整的場景數(shù)據(jù)。
上節(jié)提到,球幕本身只是一個光滑的白色幕布,沒有特征紋理可供重建計算,但給球幕投影不同的圖案會拍攝到不同的特征,不同的特征會產(chǎn)生不同的重建效果,采用何種特征紋理可以獲得最好的重建效果是一個重要的研究內(nèi)容。
如需探究不同特征紋理會對重建結(jié)果產(chǎn)生何種影響,首先需要合理設(shè)計對照紋理,對照紋理需要具有代表性,能代表不同類型的局部特征。通過詳細(xì)了解眾多特征匹配算法,如SIFT、SURF、AKAZE 等,可以發(fā)現(xiàn)特征匹配算法本質(zhì)上都是尋找具有代表性的局部特征。所以,需要設(shè)計的特征紋理能代表不同類型的局部特征具有重要意義。
通過對各式特征圖案分析發(fā)現(xiàn),特征圖案大致可以分為如下三類:①網(wǎng)格類,②線條類,③散點散斑類。其中,網(wǎng)格類有規(guī)則網(wǎng)格(如棋盤格),不規(guī)則網(wǎng)絡(luò)(三角網(wǎng)格)等,網(wǎng)格類圖案特征容易在交點處、格區(qū)中心、網(wǎng)格線上找到角點。線條類主要有不規(guī)則封閉曲線(如等高線),折線類(如高斯噪聲折線圖)等,線條類圖案容易在孤立線條上、線條密集且有較大曲率變化處產(chǎn)生角點。散點散斑類,基本都由較獨立的零星小圖案構(gòu)成,圖案變化非常多樣,如各種散斑圖,此類圖案容易在獨立的小圖案處捕獲到角點。
針對以上三類特征圖案,設(shè)計了8 種不同的特征圖案做對比實驗。網(wǎng)格類有四種:①棋盤格,②符號網(wǎng)絡(luò),③二維三角網(wǎng)格,④三維三角網(wǎng)格;折線類有兩種:①等高線圖,②高斯噪聲折線圖;散點散斑類有兩種:①散斑圖,②高斯散點圖。特征圖案如圖2 所示。
圖2
通過在球幕上分別投影以上圖案,獲得不同的多機(jī)位拍攝圖集,采用openMVG+openMVS 重建流程進(jìn)行單目三維重建,得到如圖3 的結(jié)果。
通過對以上的不同特征及其重建結(jié)果對比分析,能獲得關(guān)于選取特征紋理的諸多信息。這些信息將能有效幫助選取合適的特征紋理用于三維重建。
通過分析三維三角網(wǎng)絡(luò)的重建結(jié)果可以發(fā)現(xiàn),其重建模型的空洞缺失最嚴(yán)重,不難發(fā)現(xiàn),三維三角網(wǎng)絡(luò)的紋理特征有明顯的特征未填充區(qū)域,這將導(dǎo)致其在特征匹配時會有部分區(qū)域完全沒有特征點被捕獲,導(dǎo)致無法三角化出三維空間點,造成模型缺失。所以,在設(shè)置特征紋理時,必須要填充滿屏幕,否則會造成空洞。
圖3
橫向?qū)Ρ染W(wǎng)格組的四種不同特征的重建結(jié)果,可以發(fā)現(xiàn),符號網(wǎng)格、棋盤格、二維三角網(wǎng)格因為特征幾乎都填滿屏幕,三維重建的結(jié)果均無明顯模型缺失。但符號網(wǎng)格特征的重建模型的表面面片明顯有凹凸不連續(xù)的感覺。在棋盤格特征的重建模型上這種凹凸不連續(xù)感較符號網(wǎng)格要好上許多,而二維重建模型則顯得最光滑。分析符號網(wǎng)格特征的特點不難發(fā)現(xiàn),其特征主要集中在網(wǎng)格交匯點與網(wǎng)格中心的隨機(jī)生成的字符上,而整個網(wǎng)格內(nèi)的其他區(qū)域則為大片的空白,這將使得在獨立的單元格內(nèi)只有邊緣和中心的字符上有特征點被捕獲并三角化成三維空間點,而單元格內(nèi)的大部分空白區(qū)域?qū)]有任何點可以為重建模型提供點云數(shù)據(jù),造成了點云數(shù)據(jù)的分布不均勻,每個單元格內(nèi)都有空白缺失,導(dǎo)致最后表面重建時出現(xiàn)凹凸不連續(xù)的面片感。所以,在設(shè)置特征紋理時,應(yīng)該要選取盡量均勻的特征紋理,保證紋理的特征點不會只出現(xiàn)在特定的邊緣、中心上,而是全局均勻分布,這樣可以避免重建模型出現(xiàn)凹凸不連續(xù)的面片感。而繼續(xù)分析棋盤格的重建數(shù)據(jù)可以發(fā)現(xiàn),棋盤格的紋理特征與符號網(wǎng)格非常相似,特征點也只會出現(xiàn)在交點和單元格中,既然紋理特點非常相似,為何會出現(xiàn)棋盤格重建模型凹凸不連續(xù)感比符號網(wǎng)格要弱的現(xiàn)象?仔細(xì)對比兩種特征,不難發(fā)現(xiàn),棋盤格的特征密度要明顯高于符號網(wǎng)格,這是導(dǎo)致凹凸不連續(xù)感明顯減弱的主要原因。對于二維三角網(wǎng)格,其重建模型表面最光滑,仔細(xì)分析其紋理特征可知,其紋理主要有兩個優(yōu)點,一是密度較高且均勻分布在整個圖片,二是其特征紋理的三角網(wǎng)格由隨機(jī)坐標(biāo)點經(jīng)過Delaunay 三角化生成,三角網(wǎng)格中的三角形形態(tài)不一,使得特征點變得多元化,減少了相似紋理的誤匹配可能。
橫向?qū)Ρ染€條類的兩種不同特征的重建結(jié)果,可以發(fā)現(xiàn),線條類的特征圖案的凹凸不平感均較明顯。分析其SIFT 特征計算結(jié)果可知,線條類的圖案的SIFT特征點主要集中在孤立線條上、線條密集且有較大曲率變化處,這使得線條類的特征圖案均有一定的特征點熱點區(qū)域,導(dǎo)致特征分布不均勻,而特征點不均勻區(qū)域容易造成表面重建時的凹凸感。另外,線條類的圖案的特征點往往不夠明顯,即使采用較大的圖案密度也無法捕獲到足夠的特征點,且特征點基本都出現(xiàn)在線條上,導(dǎo)致大量的非線條區(qū)域無法捕獲到特征點,導(dǎo)致特征缺失。
橫向?qū)Ρ壬Ⅻc散斑類的兩種不同特征的重建結(jié)果,可以發(fā)現(xiàn),兩種散點散斑類的圖案的重建結(jié)果均比較完整且光滑,分析其圖案特征不難發(fā)現(xiàn),散點散斑類的特征圖案的局部特征明顯,單個獨立的散點和散斑容易被識別,散斑分布均勻且密度較高,使得這類紋理特征具有良好的重建效果。但對比發(fā)現(xiàn),散斑圖的圖案密度明顯高于高斯散點圖,但實際重建結(jié)果卻沒有高斯散點圖光滑。出現(xiàn)這個反常結(jié)果的可能原因有兩個,一是散斑圖案的特征相似度比散點圖要高,導(dǎo)致散斑圖案比散點圖案出現(xiàn)更多的誤匹配影響重建的效果,二是散斑圖案可能過于密集,導(dǎo)致特征重疊,出現(xiàn)了反效果。通過兩種重建結(jié)果的SIFT 特征計算與分析,發(fā)現(xiàn)兩種特征圖案經(jīng)過SIFT 特征點計算后,散斑圖案的SIFT 特征點數(shù)量明顯要大于散點圖案,但散斑圖案的特征點重疊程度卻明顯高于散點圖案。特征點多的散斑圖案通過特征匹配計算出來的成功匹配數(shù)卻比散點圖案還要少,其原因主要是特征點多的散斑圖案存在大量的特征點重疊與誤匹配,在去除誤匹配的過程中被大量剔除,導(dǎo)致最終的匹配成功特征點數(shù)量反而更少。所以,在設(shè)置特征紋理時,應(yīng)避免特征信息過于密集,導(dǎo)致特征信息出現(xiàn)大量重疊堆積,反而造成重建效果變差。另外,應(yīng)避免特征的相似度過高,當(dāng)相似特征點達(dá)到一定密度時會導(dǎo)致特征點被大量誤匹配剔除,造成重建結(jié)果的點云數(shù)量變少,影響重建結(jié)果。
綜上所述,分析重建結(jié)果可知,重建結(jié)果較優(yōu)秀的是網(wǎng)格類的二維三角網(wǎng)絡(luò)特征圖案和散斑散點類的高斯散點圖特征圖案,因此,推薦使用合適的網(wǎng)格類與散斑散點類的圖案用于球幕的三維重建,分析上述優(yōu)秀特征圖案的特點,得到如下結(jié)論,在為球幕選擇適合的三維重建紋理時,需滿足以下幾點:①在設(shè)置特征紋理時,要盡量讓特征紋理填充滿屏幕,避免產(chǎn)生空洞現(xiàn)象。②特征圖案的密度要比較高,能獲得更多的三維空間點,但不能密度過高,密度過高會導(dǎo)致出現(xiàn)大量的特征重疊,反而影響匹配效果。③特征圖案能捕獲到的特征點應(yīng)該盡量分布均勻,使得生成的三維模型的點云分布均勻,模型過渡自然。④避免特征圖案計算出的特征點相似度過高,導(dǎo)致誤匹配幾率變大。
本文首先介紹了球幕這種較特殊的三維重建對象的特點以及當(dāng)前單目拍攝三維重建領(lǐng)域的研究現(xiàn)狀,進(jìn)而詳細(xì)說明了基于openMVG+openMVS 開源庫的三維重建流程。最后,根據(jù)球幕的特點,對究竟什么特征紋理最適合用于球幕三維重建進(jìn)行了探究。本文對一個新的特殊三維重建對象“球幕”進(jìn)行了單目拍攝三維重建的研究,并結(jié)合了當(dāng)前功能最強(qiáng)大的開源庫輔助進(jìn)行三維重建研究,彌補(bǔ)了對球幕三維重建研究的空白,并為類似于球幕這類本身沒有特征可供提取的物體的三維重建工作提供了重要參考依據(jù)。