張健
(四川大學計算機學院,成都610065)
目前,單目三維重建領域的研究已經比較成熟,主流的方法都是先通過效果比較好的特征匹配算法(如SIFT)對圖集進行特征計算,然后根據計算的特征點進行特征匹配、用RANSAC 算法進行誤匹配剔除,然后對匹配好的特征點通過三角化計算空間中三維點的坐標。整個過程配以非線性優化計算,對內參、外參、路標點進行非線性優化[1]。多圖集的重建過程中,主要是采用兩種重建方法,一種是增量式重建,另一種是全局重建。目前主流的還是增量重建。在單目三維重建領域有很多優秀的開源庫可以使用,并提供了全面的文檔注釋,方便自定義擴展。在SFM(Structure From Motion)生成點云領域的常見開源庫有:Bundler、MVE、openMVG、VisualSFM。在表面構建和紋理生成領域常用的開源庫有:openMVS、MVE、MeshLab 等。學習研究這些優秀的開源庫,能有效提高對三維重建領域成熟實現方案的理解,對提高算法和工程水平大有裨益。本文將基于openMVG+openMVS 開展研究。
在三維重建開源庫中,openMVG+openMVS 雖然有配置繁瑣,代碼量過大的缺點。但其功能強大且全面,支持多種自定義的拓展選擇,具有完備的代碼注釋,重建效果優秀等優點使其成為業界非常成熟的重建方案。本文將在此開源庫的基礎上開展工作。
openMVG 主要用來做SFM,通過多視角拍攝得到圖集,構建出稀疏點云或稠密點云。openMVS 在open-MVG 的基礎上,對生成的點云進行表面和紋理重建,得到真實的模型?;谏鲜隽鞒炭梢詫崿F從拍攝物體得到圖集到最后得到物體的三維模型的轉變。簡要流程如圖1 所示。

圖1
如圖1 所示,在單目多視角拍攝的三維重建中,特征提取與匹配起著至關重要的作用,但是球幕系統有其特殊性,球幕整體上是一個不規則的半球型幕布,通過多通道投影儀投放相同的圖像到幕布上后進行校正處理,得到所要顯示的圖像。所以,如果直接對球幕進行單目拍攝,則只能拍攝到沒有任何特征點可以提取的白色光滑幕布,無法進行特征提取,也自然無法進行單目拍攝重建工作。解決辦法也比較直接,在光滑幕布上投影出一些圖案,這樣拍攝到圖像就會是投影出的圖案,而圖案顯然具有大量特征信息,可以用于特征匹配和單目多視角拍攝的三維重建。此時,一個新的問題自然顯現出來:“應該給球幕投影什么樣的特征圖案能獲得最好的重建效果呢?”。顯然,投影不同的圖案會拍攝到不同的特征,不同的特征會產生不同的重建效果,針對這個問題的研究的內容,放到了本文后面的第二節討論,此節著重講解重建流程。
首先,通過多視角拍攝物體得到了一系列球幕圖片的圖集,得到原始數據。
然后,ImageListing 處理需要對圖集進行處理,主要包括:①獲取相機信息和圖片信息,②構建sfm_data的數據結構并完善圖片集views 的信息與內參intrinsics 的信息。
對于相機信息,主要需要確定相機的畸變模型和焦距。相機都會存在畸變,主要來自于兩方面,一是由于相機都會采用透鏡,而透鏡會對光線傳播造成影響,引發畸變,這種畸變稱為徑向畸變。二是由于相機在組裝過程中必然存在著機械誤差,造成透鏡與成像平面不是完全平行的現象,也會產生畸變,此類畸變稱為切向畸變。一般在考慮相機畸變時,只考慮徑向畸變。徑向畸變主要分為兩種,一是桶形畸變,二是枕形畸變,此處不做詳細解釋。由于透鏡基本都成中心對稱,所以通常徑向畸變會呈現徑向對稱。常用如下多項式函數進行徑向畸變的校正。

如不考慮畸變,則為經典的Pinhole 相機模型;圖像中心區域的畸變,畸變小,主要是k1項起作用,而對于畸變稍大的邊緣區域,則主要是k2項起作用,如只考慮k1和k2項的畸變,則為Pinhole radial 1 相機模型,普通相機一般采用這種相機模型;對于畸變非常大的攝像頭,例如魚眼攝像頭,則需要加入k3系數來糾正畸變,此為Pinhole radial 3 相機模型,本文采用此種相機模型,能最大限度糾正畸變。在IncrementalSFM 處理過程中采用非線性優化的方法來計算k1、k2、k3三個系數是本文采用的畸變校正方法。
對于圖片信息,主要為獲取圖片EXIF 信息計算相機內參,通過EXIF 信息可知,圖片分辨率為5184×3456,物理焦距為18mm。查閱資料可知,Canon EOS Rebel T2i 型號的相機的傳感器寬度為22.3。綜上可知,內參Cx和Cy分別為2592.0、1728.0。內參fx和fy可通過如下公式計算得出:

自此,內參矩陣的四個未知數均已知。
對于構建sfm_data 的數據結構并完善圖片集views 的信息。本文的過程中有4 種重要的數據需要保存在sfm_data 中,分別為views 圖集信息、圖集對應的內參信息、圖集對應的外參信息、3D 路標點以及能觀測到該路標點的各個2D 圖像點信息。在ImageListing 中,負責完善圖集的路徑設置,編號,與內參外參編號對應的相關信息,并計算好內參信息。
之后,computeFeatrues 主要負責計算各個圖片的特征子和描述子。因為本文不在乎特征計算的實時性,所以應選取效果最好的特征匹配算法。主流可選的方法通常為SIFT 與AKAZE,這兩種方法各有優劣,本文采用使用面比較廣的SIFT 特征匹配算法來開展工作[2]。
SIFT 特征匹配的實現原理此處不做贅述,對圖集中的每張圖片進行SIFT 特征計算生成feats 文件和descs 的描述子文件。
然后,computeMatches 主要利用計算好的feats 和descs 計算特征匹配。對于數量為n 的圖集,兩兩配對會有次配對計算,為保證重建結果的準確性,不采用NNS、KNS 等臨近匹配算法,直接采用Brute force 暴力法計算歐氏距離,然后采用RANSAC 算法剔除誤匹配的數據,將所有兩兩圖片計算出來的匹配信息通過特征點id 對的方式表示,統計成match 數據[3]。
最后,綜合以上各種信息,進行incrementalSFM 增量重建。增量重建是一個比較復雜的過程,是整個重建過程的核心。大致可以分為以下四步:
(1)利用并查集建立軌跡數據,具體做法為將所有圖片的feats 數據<imageid,featid>全部放入一個set 集合中,建立并查集初集,然后遍歷match 數據,若兩個圖片對應的feat 匹配,則將這兩個feat 數據在并查集中并起來,遍歷過程中不斷更新并查集。最后并查集一個根下的所有子節點構成了一個track,不同子節點代表了觀測到了同一個空間點的不同圖片的二維觀察點。一個track 就對應一個空間點的所有位于不同圖片的二維觀測數據。
(2)建立初始點云,通過五點法或八點法初步計算每副圖像的外參位姿,從中選擇出方向向量夾角最大即基線最大的兩幅圖像構成初始匹配圖像對。獲得了初始匹配圖像對之后,以計算的初始外參和特征點對計算三角化,獲得空間3D 點的坐標。因為特征點數據遠遠多于五點、八點法的需要,將其他眾多特征點用于非線性優化的數據,利用ceres 進行非線性優化運算,優化對象為整個重建過程用到的所有數據:內參、外參、畸變參數,3D 空間點坐標,最后得到一個比較準確的結果,眾多空間3D 點構成了初始點云。
(3)開始增量重建過程,每次從剩下的圖集中選一個相關點最多的圖片,與現有的場景點云進行增量融合,更新現有的場景點云,不斷增量更新場景,使得場景越來越完善。
(4)融合場景大致分為以下六個步驟:①對于當前圖片,對應一個view_id,獲取所有tracks 中含有view_id 的所有track 數據,把所有滿足條件的track 放入一個set 中。②獲取現有場景中的所有tracks 并放入到另一個set 中。③計算兩個set 中的相同的tracks,放入另一個set 中。④把共同tracks 中在該view_id 下的二維點數據收集起來。⑤對于共同的tracks,現有場景中已有其對應的3D 空間點,此時,已知3D 點與對應的view_id 下的二維點數據,利用PnP可求解出view_id 的位姿[4]。⑥遍歷view_id 對應的圖片中的每個點對應的track,如發現現有的重建場景中沒有該track,則遍歷該track 的所有子節點<view,feat>對,找一個已經出現在重建場景中的view_j,讓view_id與view_j 做三角化得到新的空間點,將該空間點更新添加到現有場景。通過以上七個步驟,完成增量重建的場景融合過程,得到完整的場景數據。
上節提到,球幕本身只是一個光滑的白色幕布,沒有特征紋理可供重建計算,但給球幕投影不同的圖案會拍攝到不同的特征,不同的特征會產生不同的重建效果,采用何種特征紋理可以獲得最好的重建效果是一個重要的研究內容。
如需探究不同特征紋理會對重建結果產生何種影響,首先需要合理設計對照紋理,對照紋理需要具有代表性,能代表不同類型的局部特征。通過詳細了解眾多特征匹配算法,如SIFT、SURF、AKAZE 等,可以發現特征匹配算法本質上都是尋找具有代表性的局部特征。所以,需要設計的特征紋理能代表不同類型的局部特征具有重要意義。
通過對各式特征圖案分析發現,特征圖案大致可以分為如下三類:①網格類,②線條類,③散點散斑類。其中,網格類有規則網格(如棋盤格),不規則網絡(三角網格)等,網格類圖案特征容易在交點處、格區中心、網格線上找到角點。線條類主要有不規則封閉曲線(如等高線),折線類(如高斯噪聲折線圖)等,線條類圖案容易在孤立線條上、線條密集且有較大曲率變化處產生角點。散點散斑類,基本都由較獨立的零星小圖案構成,圖案變化非常多樣,如各種散斑圖,此類圖案容易在獨立的小圖案處捕獲到角點。
針對以上三類特征圖案,設計了8 種不同的特征圖案做對比實驗。網格類有四種:①棋盤格,②符號網絡,③二維三角網格,④三維三角網格;折線類有兩種:①等高線圖,②高斯噪聲折線圖;散點散斑類有兩種:①散斑圖,②高斯散點圖。特征圖案如圖2 所示。

圖2
通過在球幕上分別投影以上圖案,獲得不同的多機位拍攝圖集,采用openMVG+openMVS 重建流程進行單目三維重建,得到如圖3 的結果。
通過對以上的不同特征及其重建結果對比分析,能獲得關于選取特征紋理的諸多信息。這些信息將能有效幫助選取合適的特征紋理用于三維重建。
通過分析三維三角網絡的重建結果可以發現,其重建模型的空洞缺失最嚴重,不難發現,三維三角網絡的紋理特征有明顯的特征未填充區域,這將導致其在特征匹配時會有部分區域完全沒有特征點被捕獲,導致無法三角化出三維空間點,造成模型缺失。所以,在設置特征紋理時,必須要填充滿屏幕,否則會造成空洞。

圖3
橫向對比網格組的四種不同特征的重建結果,可以發現,符號網格、棋盤格、二維三角網格因為特征幾乎都填滿屏幕,三維重建的結果均無明顯模型缺失。但符號網格特征的重建模型的表面面片明顯有凹凸不連續的感覺。在棋盤格特征的重建模型上這種凹凸不連續感較符號網格要好上許多,而二維重建模型則顯得最光滑。分析符號網格特征的特點不難發現,其特征主要集中在網格交匯點與網格中心的隨機生成的字符上,而整個網格內的其他區域則為大片的空白,這將使得在獨立的單元格內只有邊緣和中心的字符上有特征點被捕獲并三角化成三維空間點,而單元格內的大部分空白區域將沒有任何點可以為重建模型提供點云數據,造成了點云數據的分布不均勻,每個單元格內都有空白缺失,導致最后表面重建時出現凹凸不連續的面片感。所以,在設置特征紋理時,應該要選取盡量均勻的特征紋理,保證紋理的特征點不會只出現在特定的邊緣、中心上,而是全局均勻分布,這樣可以避免重建模型出現凹凸不連續的面片感。而繼續分析棋盤格的重建數據可以發現,棋盤格的紋理特征與符號網格非常相似,特征點也只會出現在交點和單元格中,既然紋理特點非常相似,為何會出現棋盤格重建模型凹凸不連續感比符號網格要弱的現象?仔細對比兩種特征,不難發現,棋盤格的特征密度要明顯高于符號網格,這是導致凹凸不連續感明顯減弱的主要原因。對于二維三角網格,其重建模型表面最光滑,仔細分析其紋理特征可知,其紋理主要有兩個優點,一是密度較高且均勻分布在整個圖片,二是其特征紋理的三角網格由隨機坐標點經過Delaunay 三角化生成,三角網格中的三角形形態不一,使得特征點變得多元化,減少了相似紋理的誤匹配可能。
橫向對比線條類的兩種不同特征的重建結果,可以發現,線條類的特征圖案的凹凸不平感均較明顯。分析其SIFT 特征計算結果可知,線條類的圖案的SIFT特征點主要集中在孤立線條上、線條密集且有較大曲率變化處,這使得線條類的特征圖案均有一定的特征點熱點區域,導致特征分布不均勻,而特征點不均勻區域容易造成表面重建時的凹凸感。另外,線條類的圖案的特征點往往不夠明顯,即使采用較大的圖案密度也無法捕獲到足夠的特征點,且特征點基本都出現在線條上,導致大量的非線條區域無法捕獲到特征點,導致特征缺失。
橫向對比散點散斑類的兩種不同特征的重建結果,可以發現,兩種散點散斑類的圖案的重建結果均比較完整且光滑,分析其圖案特征不難發現,散點散斑類的特征圖案的局部特征明顯,單個獨立的散點和散斑容易被識別,散斑分布均勻且密度較高,使得這類紋理特征具有良好的重建效果。但對比發現,散斑圖的圖案密度明顯高于高斯散點圖,但實際重建結果卻沒有高斯散點圖光滑。出現這個反常結果的可能原因有兩個,一是散斑圖案的特征相似度比散點圖要高,導致散斑圖案比散點圖案出現更多的誤匹配影響重建的效果,二是散斑圖案可能過于密集,導致特征重疊,出現了反效果。通過兩種重建結果的SIFT 特征計算與分析,發現兩種特征圖案經過SIFT 特征點計算后,散斑圖案的SIFT 特征點數量明顯要大于散點圖案,但散斑圖案的特征點重疊程度卻明顯高于散點圖案。特征點多的散斑圖案通過特征匹配計算出來的成功匹配數卻比散點圖案還要少,其原因主要是特征點多的散斑圖案存在大量的特征點重疊與誤匹配,在去除誤匹配的過程中被大量剔除,導致最終的匹配成功特征點數量反而更少。所以,在設置特征紋理時,應避免特征信息過于密集,導致特征信息出現大量重疊堆積,反而造成重建效果變差。另外,應避免特征的相似度過高,當相似特征點達到一定密度時會導致特征點被大量誤匹配剔除,造成重建結果的點云數量變少,影響重建結果。
綜上所述,分析重建結果可知,重建結果較優秀的是網格類的二維三角網絡特征圖案和散斑散點類的高斯散點圖特征圖案,因此,推薦使用合適的網格類與散斑散點類的圖案用于球幕的三維重建,分析上述優秀特征圖案的特點,得到如下結論,在為球幕選擇適合的三維重建紋理時,需滿足以下幾點:①在設置特征紋理時,要盡量讓特征紋理填充滿屏幕,避免產生空洞現象。②特征圖案的密度要比較高,能獲得更多的三維空間點,但不能密度過高,密度過高會導致出現大量的特征重疊,反而影響匹配效果。③特征圖案能捕獲到的特征點應該盡量分布均勻,使得生成的三維模型的點云分布均勻,模型過渡自然。④避免特征圖案計算出的特征點相似度過高,導致誤匹配幾率變大。
本文首先介紹了球幕這種較特殊的三維重建對象的特點以及當前單目拍攝三維重建領域的研究現狀,進而詳細說明了基于openMVG+openMVS 開源庫的三維重建流程。最后,根據球幕的特點,對究竟什么特征紋理最適合用于球幕三維重建進行了探究。本文對一個新的特殊三維重建對象“球幕”進行了單目拍攝三維重建的研究,并結合了當前功能最強大的開源庫輔助進行三維重建研究,彌補了對球幕三維重建研究的空白,并為類似于球幕這類本身沒有特征可供提取的物體的三維重建工作提供了重要參考依據。