余龍江,申閆春
(1. 重慶安全技術職業(yè)學院,重慶 404121;2. 北京信息科技大學計算機學院,北京 100192)
隨著數(shù)字孿生概念的逐漸普及,人們愈發(fā)需要在虛擬空間中構建真實世界的復制體,從而反映相對應實體的全生命周期過程。尤其是影視娛樂等行業(yè)當中,還需要通過增強現(xiàn)實等技術手段,將虛擬世界與孿生重建的真實世界進行疊加,從而呈現(xiàn)出虛實融合的獨特展示效果。
傳統(tǒng)的手工建模手段,需要通過現(xiàn)場勘測,拍攝照片,劃分區(qū)域,抽取紋理,再手動建立三角面片并依次對齊的復雜過程,來構建和現(xiàn)實物體大致相符的虛擬模型。這一工作流程耗費的人力巨大,時間成本高,生產力低下,且完成的成果與真實尺寸有較大差異,需要較長時間的后期調整和優(yōu)化。
三維重建技術,即通過多種傳感器手段獲取實際場景的圖像和深度信息,對獲取的數(shù)據(jù)進行分析和配準之后,計算并輸出實際場景的三維數(shù)字模型的過程。目前常見的三維重建方法以照片重建為主,在實際場景中拍攝多位置、多角度的多張照片,進行照片特征的分析和配準之后,得到包含拓撲關系的稀疏點云,并據(jù)此構建稠密點云以至三維網格模型。此類方法的技術路線成熟,得到的結果精細度較高,在影視和游戲等行業(yè)中有較為成熟的應用。
但是,基于照片重建的方法對于特征不明顯的場景,例如大面積的純色墻面等,無法得到合適的特征數(shù)據(jù),因而無法得到正確的重建結果;另外因為場景的尺度信息完全來自于照片匹配過程中估算的結果,因此有時不夠準確。這都制約了單純照片重建的方法在實際生產中的大規(guī)模應用。
近些年來,隨著各種激光掃描設備逐漸民用化和低端化,人們也可以利用激光掃描產生的點云數(shù)據(jù)來記錄真實場景。點云數(shù)據(jù)中的每一個點都有自己的空間位置坐標,它記錄了真實物體與檢測設備之間的實際距離和角度,其尺度信息的精度極高;但是因為點云之間不存在既有的拓撲關系,因此無法直接構成三維網格模型。據(jù)此,本文提出了一種新的方法,將海量的點云數(shù)據(jù)處理并構建成為高分辨率的虛擬“照片”,并與實際照片結合進行匹配,從而將點云數(shù)據(jù)的尺度和密度優(yōu)勢與照片重建的成熟流程相結合,經初步驗證,該方法有效提升了重建結果的精準度和可用性。
基于照片的重建方法主要需要以下幾個前提條件:
1)整個實際場景在拍攝過程中是靜止的;
2)拍攝的照片之間存在明顯的重疊區(qū)域;
3)拍攝照片的相機內參可以獲取或者解算。
照片重建的第一步是通過Sift或者Surf等方法從每張照片提取特征點,然后兩兩圖片進行匹配,從中計算出這兩張照片的位置姿態(tài)關系。因為每兩張照片匹配的結果特征數(shù)據(jù)組都會被保存到鏈表中,因此在所有的匹配完成后,就可以得到照片和特征數(shù)據(jù)在空間的完整軌跡信息。
下一步工作被稱作Structure from motion(SFM),即解算得到完整的相機內外參數(shù)和場景的幾何信息,也就是稀疏點云。這一步首先要選擇合適的一對照片作為初始值,然后將鏈表中的其它數(shù)據(jù)逐步輸入進來,進行捆綁調整(bundle adjustment)來優(yōu)化和減小數(shù)據(jù)誤差,最終構建點云和三角面信息。
由于SFM過程是完全基于照片特征點匹配的結果生成幾何結果數(shù)據(jù),因此它得到的只能是稀疏點云結果,并不利于后續(xù)的實體網格重建。因此,還需要通過multi view stereo(MVS)的過程來生成密集點云數(shù)據(jù)。
對于已知內外參數(shù)的兩張照片,如果它們同時拍攝到的相同的三維幾何結構,那么可以認為這兩張照片之間存在極線幾何約束,如圖1所示。
圖1 極線幾何約束
這里的x表示空間中的某一點,x1、x2為X在兩張照片中投影得到的同一點。由于物體存在幾何約束,因此如果已知x1,那么可以在直線L2上通過一維尋找確定x2的位置。
通過這個過程的反復迭代,可以得到整個場景的稠密點云數(shù)據(jù),并進一步進行網格重建,網格簡化,以及紋理的計算和貼敷。從而完成整個三維重建過程。
照片重建方法如今已經比較成熟,它的主要問題在于捆綁調整過程需要的時間很長,稠密點云重建需要的系統(tǒng)資源巨大,而且對于弱特征點的場景(例如純色的墻壁)無法得到理想的重建結果。雖然如今已經有MVSNet等方案,通過人工智能的方法來輔助提升稠密點云計算和網格重建的質量,但是并沒有從根本上解決計算量大和過于依賴圖像特征的問題。
如果已經通過激光掃描設備獲取了場景的點云數(shù)據(jù),那么相當于跳過了之前照片重建的SFM部分和MVS的第一步,直接獲得了稠密點云,并可用作后續(xù)的網格重建。但是,激光雷達輸出的點云數(shù)據(jù)只是單純的離散點,并不能保存它們之間的拓撲關系。而MVS過程中獲得的幾何空間點,與周圍的點之間的拓撲關系是已知的。因為這個問題的存在,單純點云重建時無法參考MVS過程的算法,而是需要考慮Possion等重建方法。
Possion重建的核心思想是:使用點云的位置信息和法線信息作為輸入量;點云表示物體表面的某個位置,其法線向量代表了內外的方向;之后隱式地擬合一個由物體派生的指示函數(shù),從而估算得到物體表面的平滑結果,如圖2所示。
圖2 Possion重建過程
Possion重建方法需要用戶輸入點云中每個點的法線信息,而一般的激光采集設備并不能獲取該數(shù)據(jù)。這樣就無法真正建立物體表面的梯度場,又或者建立了錯誤的梯度場信息,進而求解得到錯誤的物體表面結果。
除了基于圖像和基于點云的三維重建之外,還有一類常見的重建方法,即Kinect Fusion算法。它的輸入值是連續(xù)的RGB圖像和深度圖像,可以實時輸出場景中的點云位置和法線信息,進而構建三維網格模型。具體的執(zhí)行流程,如圖3所示。
圖3 Kinect Fusion執(zhí)行流程
因為Kinect Fusion的輸入圖像是連續(xù)的,因此每一幀的相機位置姿態(tài)與上一幀不會有很大的差別。通過前一幀的相機位置姿態(tài)信息來估算新一幀的數(shù)據(jù)空間位置,然后和已有點云數(shù)據(jù)進行ICP匹配,從而求取得到實際的位置姿態(tài)偏差,也就是真正的當前幀相機位置姿態(tài)信息。
與此同時,將當前幀的點云數(shù)據(jù)輸入到全局的TSDF當中。TSDF的全稱為Truncated Signed Distance Function,它可以被理解為一個W*H*D大小的體素地圖,每個體素都記錄了自己的表面參數(shù)值以及RGB顏色值等屬性信息。當一組新的點云數(shù)據(jù)輸入到TSDF當中,它會沿著相機朝向的方向向量與TSDF的體素進行求交,并改變產生交集的TSDF體素的屬性值。
將所有的體素中存儲的表面信息整合到一起,即可輸出平滑的三維網格表面信息,即完成了三維重建的操作。該方法的運行速度快,產生的重建效果較好。但是必須使用連續(xù)的深度圖像作為輸入量。目前市面上只有Microsoft Kinect和一些固態(tài)雷達產品支持這樣的輸入方式。
提出了一種增強的三維重建方法:基于已有的激光掃描設備,例如Faro的定點式激光掃描儀,或者車載和背包式的掃描設備,獲取整個場景的點云信息。然后在點云中重建巡邏路徑,并據(jù)此得到連續(xù)的全景RGB和深度圖像。
使用激光掃描設備采集的場景點云如圖4所示,在場景中手動設置多個路徑標記點,或者也可以根據(jù)背包掃描設備運動時的路徑來自動采點。這些標記點自身的位置姿態(tài)是完全已知的,不需要重復估算。
圖4 測試場景點云數(shù)據(jù)及路徑標記點
對于每一個標記點,通過模擬激光雷達發(fā)射的方式,將水平方向(360度)切分成9000塊,垂直方向(180度)切分成4500塊,因此產生9000*4500條射線。每條射線都可能與當前場景點云產生一個或者多個交集,因此最多可能生成9000*4500個交點,也就是這個路徑點所對應的模擬激光掃描數(shù)據(jù)結果,即它的全景稠密深度圖。
一個典型的全景稠密深度圖(9000*4500像素)如圖5所示。
圖5 全景稠密深度圖
上述處理流程有一個問題是,對于由數(shù)千萬甚至上億個點組成的一個既有點云場景來說,進行一次射線與點集的求交計算(與射線距離最近的點滿足閾值要求時,即可認為點被射線穿過)是非常損耗時間的。更何況需要執(zhí)行9000*4500次(約為4000萬次)求交,這個處理時間在CPU端是難以接受的。
對這一狀況進行優(yōu)化,第一種方案是基于GPU或者多核并行計算的方式,同時適當降低分辨率要求,從而提升求交的效率。
第二種方案是將當前標記點位置當作一個虛擬相機的位置,設置相機的FOV視場角度為90°x90°,畫面分辨率為2250x1500。該虛擬相機依次朝向X+方向,X-方向,Y+方向,Y-方向,Z+方向,Z-方向,共六次渲染整個點云場景到對應的深度圖像,再拼接為Cubemap立方圖的方式,如圖6所示。如此也可以快速形成全景深度圖像。
圖6 Cubemap渲染的場景
但是,因為頂點渲染時的采樣問題,這一方法得到的全景深度數(shù)據(jù)有可能存在大量的縫隙,如下圖7所示為通過渲染到Cubemap的方式得到的全景深度圖(沒有包含Z+/Z-兩個方向)。它與圖5相比差異還是比較明顯的,如果要直接用于后續(xù)的重建階段,還需要進一步深度數(shù)據(jù)補全的操作。
圖7 渲染Cubemap得到的全景深度圖
對每個路徑標記點進行處理之后,沃恩現(xiàn)在已經從場景的點云數(shù)據(jù)生成了每個路徑點對應的全景深度圖,其中包含了當前位置的相機位置姿態(tài),以及從相機出發(fā)的每個點的距離(深度)信息。如果原始點云中的每個點都包含RGB顏色的話,則還可以生成對應的全景RGB顏色圖,其中記錄了每個點的RGB數(shù)值。
如果采集的路徑標記點數(shù)據(jù)足夠多,那么只需要將全景RGB圖像輸入到照片重建的流程中,就可以極大地豐富輸入照片的內容,增加圖像兩兩匹配的幾率,從而提升重建結果的細節(jié)程度,并且避免弱特征點區(qū)域重建效果較差的問題。
此外,如果將采集的路徑標記點數(shù)據(jù)串聯(lián)起來,形成一條連續(xù)的運行路徑,進而得到連續(xù)的全景深度圖像。就可以將它輸入到Kinect Fusion的流程當中,模擬相關高精度設備的輸入方式。事實上,目前沒有任何現(xiàn)有設備可以達到9000*4500的輸出分辨率;而本文的算法并不局限于這一個分辨率數(shù)值,如果系統(tǒng)顯存資源允許,或者數(shù)據(jù)優(yōu)化方案得到進一步提升,完全可以再次提升深度圖的分辨率數(shù)值,得到更精確的結果。
之后,本文所生成的輸入數(shù)據(jù)可以利用TSDF算法的速度和精確度優(yōu)勢來快速建模,實時得到所需的網格模型結果。當然,因為TSDF算法本身也需要大量占用GPU內存空間,因此無法使用分辨率過高的輸入數(shù)據(jù),否則會產生內存不足的問題。
基于RTX3060平臺進行了初步的三維重建實驗,選取了北京郊區(qū)的一片廢棄廠房,如圖8所示。并且通過無人機和Faro激光掃描儀兩種手段對場景進行了數(shù)據(jù)采集,獲得足量的照片數(shù)據(jù)和全場景的點云數(shù)據(jù)。點云場景如前圖4所示。
圖8 實際測試場地
只使用照片重建流程,得到的稠密點云數(shù)據(jù)如下圖9所示。
圖9 照片重建流程
使用點云數(shù)據(jù)中采集標記點,生成全景RGB和深度數(shù)據(jù),再輸入到照片重建流程的方案,可以得到新的MVS稠密點云結果,如圖10所示。
圖10 使用全景照片增強的重建流程
從圖中可以看到,稠密點云的密度有了明顯的增強,并且在一些之前特征不明顯的區(qū)域(例如吊燈,窗外的地面,還有墻面),有了足夠多的點云數(shù)據(jù),可以構建足夠精細且準確的網格數(shù)據(jù)。
隨著數(shù)字孿生技術的提出和不斷演化,目前已經有越來越多的數(shù)據(jù)采集服務商選擇使用激光雷達的方式來記錄公路,工廠,大型商場,社區(qū)等區(qū)域和設施的空間幾何信息,并用于后續(xù)的分析和數(shù)據(jù)管理。但是,如此采集得到的點云數(shù)據(jù)幾乎無法直接轉換為三維網格模型,也就難以用于瀏覽呈現(xiàn),影視素材,GIS/BIM等應用場合。相關用戶也就不得不繼續(xù)采用人工建模等古老且低效率、低精度的方式來完成實體場景的構建。隨著技術的不斷發(fā)展和需求的革新,這個問題如今已經越來越凸顯出來。
提出的方法可以有效地將上述海量點云數(shù)據(jù)轉換為現(xiàn)有三維重建流程可以直接使用的圖像或者深度圖數(shù)據(jù);并且在不影響現(xiàn)有重建算法流程的前提下,得到期望的重建結果。這對于相關行業(yè)的從業(yè)者來說是非常有現(xiàn)實意義的。
但是,所述方法還需要更多數(shù)據(jù)的檢驗。尤其是路徑標記點的設置過程,目前完全是通過手工操作,是否合理,是否能覆蓋特征點稀少的區(qū)域,完全依賴于人的判斷。如果與Kinect Fusion的重建流程相結合,還會有數(shù)據(jù)連續(xù)程度的問題,如果深度數(shù)據(jù)的連續(xù)性不好,重疊區(qū)域過少,則會影響Kinect Fusion算法的執(zhí)行,進而產生錯誤的結果。
如何通過更多的測試數(shù)據(jù)來檢驗本文方法的可靠性,以及如何通過自動化的方式來決定標記點的采樣流程,這也是下一步主要的研究方向。