近年來,隨著AR,VR,虛擬試衣,自動駕駛等領域的興起,三維重建技術得到了廣泛的應用。 作者自接觸三維重建以來,一直為基于RGB-D相機的三維重建所驚艷。同時,心頭一直盤旋著寫個總結的想法,相信大家也能體會本人的感受,空中閣樓,如鯁在喉。 最后親身實踐一番后,終于可以了卻心愿。故先寫個總覽作為備忘,也可給各位小伙伴提供按圖索驥的便利。 (PS:溫馨提示,由于本篇文章包含大量有趣的GIF,故可能加載會花點時間,請各位小伙伴耐心等待) 到這里,很多小伙伴可能會問
0 “基于RGB-D相機的三維重建"和傳統的SFM和SLAM算法有什么區別?
首先,輸入數據流不同。在基于RGB-D相機的三維重建中,輸入有深度信息和彩色信息,并且深度信息起主導作用,而在SLAM和SFM算法中輸入的是主要是彩色信息,個別工作也有結合深度信息。 其次,側重點不同。SLAM框架類算法中,定位還是主體。我們通常需要定位能實時響應,而稠密地圖的構建通常規模和計算量都較大,因此地圖的構建卻不一定需要實時。當然,地圖比較稀疏時,也能實時建圖,但并不滿足實際需求。另一種思路是以建圖為主體,定位次之,旨在構建稠密準確的高質量地圖,這種高質量地圖可以提供給SLAM算法定位使用,而基于RGB-D相機的三維重建”便是滿足上述需求的一種方法。 “基于RGB-D相機的三維重建”以及“基于深度相機的三維重建“和“基于fusion系列方法的三維重建”其實是三種等價的說法。由于該領域發表的大多數工作都在標題里帶有“fusion”,業內也簡稱這些相關工作為“基于fusion系列方法”,所以本文中也使用“基于fusion系列方法”來描述。 基于fusion系列的三維重建其實可以大體分為兩種,一種是對于靜態場景的三維重建,以KinectFusion為典型代表,一種是對于動態場景的三維重建,以DynamicFusion為典型代表。而不論是靜態場景亦或是動態場景的fusion系列重建,最大特點就是使用了TSDF模型(截斷符號距離函數模型),當然也有個別工作使用了面元(Surfel)的表示方法(面元簡單來講就是點,法線,顏色,權重,半徑以及時間戳等屬性的集合)。值得一提的是,基于動態場景的三維重建的難度遠大于基于靜態場景的三維重建,當然,對于拓撲不會發生變化的重建(比如驅動一個三維網格模板模型),難度會下降很多。 為了更好地理解fusion系列方法,這里再介紹下TSDF模型。TSDF全稱是Truncated Signed Distance Function縮寫,譯為截斷符號距離函數。通常我們先選定要建模的三維空間,比如2m×2m×2m那么大,然后將這個三維空間分割成許多小塊,分辨率通常為256×256×256或是128×128×128,每一個小塊被稱為體素。 TSDF模型中每個體素存儲的是該小塊與其最近的物體表面的距離。如果該小塊在該物體表面的的前面,則它存儲一個正值;如果該小塊位于物體表面之后,那么就存儲一個負值。進一步,通常認為物體表面是有厚度的,所以把值太大和值太小的都置為1或是-1,這樣就得到了截斷之后的距離,也就是所謂的TSDF模型。最后按照定義,TSDF為0的地方就是重建表面所在。換種說法就是TSDF數值由負數過渡到正數的地方。如下圖中人臉就出現在TSDF值改變符號,即TSDF值為0的地方,如下圖。
再來說說Surfel,如下圖。
Surfel這種表示方法最早于2000年提出用于模型渲染,如下圖所示,每一個Surfel可以理解成一個小面片,包含以下要素:
空間點坐標,即面片位置;
空間法向量,即面片方向;
顏色;
權重,即根據當前點到相機的距離進行初始化,距離越遠,權重越小
半徑,即由當前表面到相機光心的距離決定,距離越大,半徑越大
時間戳
下面分別介紹下
代表性工作思維導圖
1 基于靜態場景的三維重建
1.1 KinectFusion
KinectFusion是Richard A. Newcombe的經典之作。該系統僅需要一個移動的低成本深度相機,便可以重建任意并且較為復雜的室內場景。其核心思想將Kinect傳感器采集的深度數據流實時融入到(fusion into)一個當前場景對應的全局的隱式表面模型(TSDF模型)中,并使用一個由粗到精的迭代最近點(ICP)算法,跟蹤當前采集的深度幀數據與上文的全局的隱式表面模型之間的相對關系,從而獲得Kinect傳感器的位姿變化。 同時這個系統也有著不足之處,該系統只能重建小于7立方米的體空間。主要原因有兩點:由于該系統采用稠密的體積表示方式,因此需要消耗大量內存;另外在重建較大建筑時不斷累積的誤差會造成“飄移”現象。以上兩點原因使得Kinectfusion無法重建較大建筑。
1.2 Kintinuous
上述 KinectFusion 算法使用固定體積的網格模型(如256×256×256)表示重建的三維場景,從而只能重建固定大小的場景;另外當重建體積較大,或者網格的空間分辨率較高時很消耗顯存。而且 KinectFusion 算法沒有回環檢測和回環優化,這也造成當相機移動距離大時,不可避免的會有累積誤差。Kintinuous算法是比較完善的三維重建系統,融合了回環檢測和回環優化,還在實時三維剛體重建中使用了deformation graph做非剛體變換,根據回環優化的結果,更新點的坐標,使得回環的地方兩次重建的可以對齊。該算法適合大場景的三維重建。 論文鏈接: http://www.thomaswhelan.ie/Whelan12rssw.pdf 代碼鏈接: https://github.com/mp3guy/Kintinuous 演示:
1.3 ElasticFusion
該算法的作者同時也是Kintinuous的作者,不同于Kintinuous的是,ElasticFusion使用了面元(Surfel)的表示方法,并且是用于小場景重建。該工作的主要貢獻有兩點:將許多“model-to-model”的局部閉環和較大規模的全局閉環結合在一起。因此可以保證重建地圖的分布的盡可能相近,并且保證了重建結果的全局一致性;另外該算法對探測離散的多點光源環境比較高效,也能在該條件下獲得較好的重建結果。 另外該算法也面臨巨大的挑戰,如何解決整個房間以外的地圖可擴展性問題以及如何隨著時間變化,保證重建地圖的全局一致的穩定性。 論文鏈接: http://www.thomaswhelan.ie/Whelan16ijrr.pdf? http://roboticsproceedings.org/rss11/p01.pdf 代碼鏈接: https://github.com/mp3guy/ElasticFusion 演示:
1.4 ElasticReconstruction
該工作提供一種從RGB-D視頻重建室內場景重建的方法,其核心思想在于將場景片段的幾何配準和全局優化相結合。場景片段是通過將輸入RGB-D視頻流分割成若干幀為一組的場景片段得到的。這種以場景片段為單位進行深度信息的融合,可以有效地去除深度圖的噪聲,從而獲得更加準確的表面法向信息以及重建結果。 論文鏈接: http://vladlen.info/papers/indoor.pdf 代碼鏈接: https://link.zhihu.com/?target=https%3A//github.com/qianyizh/ElasticReconstruction 演示:
1.5 InfiniTAM
InfiniTAM是一個開源、跨平臺、實時的大范圍深度信息融合與跟蹤技術框架。該算法有好幾個版本,有很大的借鑒意義。值得一提的是,InfiniTAM能夠比KinectFusion重建更加大范圍的3D環境,其關鍵因素在于InfiniTAM采用了哈希表的方式來存儲隱式的體積表示,極大地節省了內存空間的消耗。 論文鏈接: https://arxiv.org/pdf/1708.00783.pdf 代碼鏈接: https://github.com/victorprad/InfiniTAM 演示:
1.6 BundleFusion
Bundlefusion應該是目前靜態場景重建效果最佳的方案了。該方法提出一個并行化的優化框架,充分利用了基于稀疏特征以及稠密幾何和光度匹配提取的對應關系,實時地估計了BA優化的姿態,并具有從追蹤失敗中恢復(即重定位)的魯棒追蹤能力。 論文鏈接: https://arxiv.org/pdf/1604.01093.pdf 代碼鏈接: https://github.com/niessner/BundleFusion? 演示:
2 基于動態場景的三維重建
2.1 DynamicFusion
DynamicFusion獲得了2015年CVPR的Best Paper Award,其作者是Newcombe,和KinectFusion是一個作者。DynamicFusion是不基于任何模板先驗信息的動態重建算法,可是說是實時動態重建的開山之作。DynamicFusion系統在重建場景的幾何的同時,也在估計稠密體積表示的6D形變域。類似KinectFusion,該系統能隨著深度數據的采集,而獲得一個逐漸去噪,保留細節并且較為完整的重建結果。 但同時由于DynamicFusion沒有采用任何先驗信息使得該算法對于幀間較大的運動以及遮擋區域的運動都不具備魯棒性;此外DynamicFusion可以較好地處理封閉拓撲的表面重建,對于拓撲發生變化就無能為力了。例如我們嘴一開始閉著,后面再打開的情況就沒法處理;另外由于追蹤的累積誤差,使得回環閉合失敗。 ? 2.2 volumeDeform
volumeDeform算法和dynamicFusion類似,都無需預先定義的模板,同樣采用體積表示(volumetric representation)的方法來參數化重建模型的幾何以及運動。該算法的運動追蹤基于提取的全局稀疏彩色特征(如SIFT算子)以及稠密的深度圖兩者的結合,增強了特征匹配點尋找準確的魯棒性,進而極大地減小了重建模型的累積誤差以及漂移現象?。 該算法的不足之處在于盡管全局SITF特征算子的匹配提高了系統的魯棒性,減小了對齊的誤差,但漂移現象仍然不能完全消除;另外由于正則項的設置使得極度彎曲的物體的重建結果在運動上會顯得平滑,變得不那么彎曲。 ?
2.3 BodyFusion
從BodyFusion開始就變得更有意思了。BodyFusion使用人體骨架作為先驗信息,實現魯棒了的人體動態重建。人體骨架的引入減少了重建表面圖節點的非剛性形變參數化的歧義性,也是在一定程度上縮小了解空間。 不足之處在于所使用的人體骨骼所包含的關節點太過稀疏,并且運動較快時,會在深度圖上出現運動模糊的情況,從而造成重建方法受限。 ? ? 2.4 DoubleFusion? ???
DoubleFusion非常驚艷,該系統將數字驅動的模板(SMPL模型)以及實時重建的稠密幾何、非剛性運動以及內層人體形狀充分結合在一起。該系統的關鍵貢獻之一在于提出了雙層表面的表示,這里的兩層主要是指里層的參數化模型表面(inner body),也就是SMPL模型的shape,以及外層通過深度融合得到的表面(outer surface)。該算法的另一個關鍵貢獻在于提出了一個基于雙層表面表示的聯合運動追蹤,使得整個系統可以在快速運動的情況下仍然具有魯棒性。 不足之處在于當用戶穿著比較肥大的時候,估計的人體也偏胖;并且無法處理外層表面發生分離的情況,以及無法處理人和物體交互的情況。 ? 2.5?UnstructuredFusion?
通常多相機系統需要一些特殊設計的相機以及預先精細的相機標定操作,但UnstructuredFusion算法可以使用未經預先標定以及同步的三個深度相機以一種互補并靈活的方式覆蓋整個人體,從而實現實時,高質量,完整的動態人體重建。 該算法也有不足之處。由于輸入深度圖分辨率受限,該算法無法重建目標非常細小的部分,比如人的臉部區域;該算法也無法處理網格拓撲分離的情況;該算法也無法處理人-物交互情況。 論文鏈接: https://ieeexplore.ieee.org/document/8708933 演示:
2.6?RobustFusion
誠如算法名字RobustFusion所示,該算法使用了各種數據驅動的視覺線索提高動態重建算法的魯棒性。這些數據驅動的視覺線索具體包括Occupancy Network,Pose&Shape Network以及Semantic Network。?該算法充分利用了上述數據驅動的視覺線索,避免了預先掃描模板的使用,具備了重新初始化的能力,使得該系統能夠處理極具挑戰性的運動和幾何的重建。 該系統的不足之處有:該系統無法實時運行;不能處理重建網格拓撲發生分離的情況,比如脫掉衣服;不能實現人和物的交互;當一些極端運動姿態在上述網絡訓練時沒有出現過,那上述數據驅動的視覺線索就不能很好地提供先驗信息。 論文鏈接:https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123490239.pdf
2.7 KillingFusion
KillFusion是基于Killing Vector Fields提出的實時三維重建方法,也是不需要任何預先掃描的模板信息以或是形狀先驗。KillingFusion不需要顯式地進行對應匹配點的搜索,當給定感興趣區域的一對SDF(signed distance fields),該算法可以估計出一個稠密形變域來對齊給定的SDF。具體的,該算法定義一個和SDF相同分辨率的位移向量域(displacement vector field),并通過最優化迭代求解。 該算法的不足之處也是由于其優點造成,不顯式地尋找對應點也使得該算法在某些需要顯式的對應點的操作上無法應用,比如紋理映射就需要顯式的對應點。 ?
2.8 SurfelWarp
SurfelWarp是三維動態重建方案中為數不多的基于面元的算法。類似的,該算法輸入一個深度圖序列,對非剛性場景進行實時重建,無需任何模板或是先驗信息。與現有的方法相比,該算法無需維持體積數據結構,比如TSDF模型,該系統采用面元(surfel)的幾何表示,極大地增強了拓撲發生改變時的追蹤能力,從而獲得一致的重建結果。 該算法的不足之處在于,模型重初始化可以極大地提高系統的魯棒性,然而清除錯誤的面元會破壞模型的完整性。 論文鏈接: https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1904.13073.pdf 演示:
2.9 Fusion4D
Fusion4D的重建結果也非常驚艷。該算法是基于多視角方案,沒有使用任何先驗信息,因此理論上可以重建任何場景或是物體。如視頻所示,除了對人體動態重建,還能對狗子動態重建。該算法很重要的一點貢獻是引入了key volume,因此對于較大的幀間運動以及網格拓撲發生改變時都有很強的魯棒性;另外Fusion4D還引入了體素碰撞檢測,從而得到正確的TSDF模型。 該系統不足之處在于當RGBD輸入流幀率過低或者幀間運動過大時,會使幀間對應匹配點估計不準確,造成非剛性對齊過程無法收斂。 ? ?
編輯:黃飛
評論
查看更多