基于RGB-D相機的三維重建總覽 包括靜態(tài)與動態(tài)三維重建
近年來,隨著AR,VR,虛擬試衣,自動駕駛等領域的興起,三維重建技術(shù)得到了廣泛的應用。
編輯:微信公眾號「三維匠心」
三維匠自接觸三維重建以來,一直為基于RGB-D相機的三維重建所驚艷。同時,心頭一直盤旋著寫個總結(jié)的想法,相信大家也能體會三維匠的感受,空中閣樓,如鯁在喉。
最后親身實踐一番后,終于可以了卻心愿。故先寫個總覽作為備忘,也可給各位小伙伴提供按圖索驥的便利。后續(xù)還會寫具體文章的分析,分享下對相關(guān)論文的理解,希望各位小伙伴也不吝賜教。(PS:溫馨提示,由于本篇文章包含大量有趣的GIF,故可能加載會花點時間)

到這里,很多小伙伴可能會問“基于RGB-D相機的三維重建"和傳統(tǒng)的SFM和SLAM算法有什么區(qū)別?
首先,輸入數(shù)據(jù)流不同。在基于RGB-D相機的三維重建中,輸入有深度信息和彩色信息,并且深度信息起主導作用,而在SLAM和SFM算法中輸入的是主要是彩色信息,個別工作也有結(jié)合深度信息。其次,側(cè)重點不同。SLAM框架類算法中,定位還是主體。我們通常需要定位能實時響應,而稠密地圖的構(gòu)建通常規(guī)模和計算量都較大,因此地圖的構(gòu)建卻不一定需要實時。當然,地圖比較稀疏時,也能實時建圖,但并不滿足實際需求。另一種思路是以建圖為主體,定位次之,旨在構(gòu)建稠密準確的高質(zhì)量地圖,這種高質(zhì)量地圖可以提供給SLAM算法定位使用,而基于RGB-D相機的三維重建”便是滿足上述需求的一種方法?!盎赗GB-D相機的三維重建”以及“基于深度相機的三維重建“和“基于fusion系列方法的三維重建”其實是三種等價的說法。由于該領域發(fā)表的大多數(shù)工作都在標題里帶有“fusion”,業(yè)內(nèi)也簡稱這些相關(guān)工作為“基于fusion系列方法”,所以本文中也使用“基于fusion系列方法”來描述。

基于fusion系列的三維重建其實可以大體分為兩種,一種是對于靜態(tài)場景的三維重建,以KinectFusion為典型代表,一種是對于動態(tài)場景的三維重建,以DynamicFusion為典型代表。而不論是靜態(tài)場景亦或是動態(tài)場景的fusion系列重建,最大特點就是使用了TSDF模型(截斷符號距離函數(shù)模型),當然也有個別工作使用了面元(Surfel)的表示方法(面元簡單來講就是點,法線,顏色,權(quán)重,半徑以及時間戳等屬性的集合)。值得一提的是,基于動態(tài)場景的三維重建的難度遠大于基于靜態(tài)場景的三維重建,當然,對于拓撲不會發(fā)生變化的重建(比如驅(qū)動一個三維網(wǎng)格模板模型),難度會下降很多。
為了更好的理解fusion系列方法,這里在介紹下TSDF模型。TSDF全稱是Truncated Signed Distance Function縮寫,譯為截斷符號距離函數(shù)。通常我們先選定要建模的三維空間,比如2m×2m×2m那么大,然后將這個三維空間分割成許多小塊,分辨率通常為256×256×256或是128×128×128,每一個小塊被稱為體素。TSDF模型中每個體素存儲的是該小塊與其最近的物體表面的距離。如果該小塊在該物體表面的的前面,則它存儲一個正值;如果該小塊位于物體表面之后,那么就存儲一個負值。進一步,通常認為物體表面是有厚度的,所以把值太大和值太小的都置為1或是-1,這樣就得到了截斷之后的距離,也就是所謂的TSDF模型。最后按照定義,TSDF為0的地方就是重建表面所在。換種說法就是TSDF數(shù)值由負數(shù)過渡到正數(shù)的地方。如下圖中人臉就出現(xiàn)在TSDF值改變符號,即TSDF值為0的地方,如下圖。

再來說說Surfel,如下圖。

Surfel這種表示方法最早于2000年提出用于模型渲染,如下圖所示,每一個Surfel可以理解成一個小面片,包含以下要素:
空間點坐標,即面片位置;
空間法向量,即面片方向;
顏色;
權(quán)重,即根據(jù)當前點到相機的距離進行初始化,距離越遠,權(quán)重越小
半徑,即由當前表面到相機光心的距離決定,距離越大,半徑越大
時間戳
下面分別介紹下代表性工作。

1基于靜態(tài)場景的三維重建
1.KinectFusionKinectFusion是Richard A. Newcombe的經(jīng)典之作。該系統(tǒng)僅需要一個移動的低成本深度相機,便可以重建任意并且較為復雜的室內(nèi)場景。其核心思想將Kinect傳感器采集的深度數(shù)據(jù)流實時融入到(fusion into)一個當前場景對應的全局的隱式表面模型(TSDF模型)中,并使用一個由粗到精的迭代最近點(ICP)算法跟蹤當前采集的深度幀數(shù)據(jù)與上文的全局的隱式表面模型之間的相對關(guān)系,從而獲得Kinect傳感器的位姿變化。同時這個系統(tǒng)也有著不足之處,該系統(tǒng)只能重建小于7立方米的體空間。主要原因有兩點:由于該系統(tǒng)采用稠密的體積表示方式,因此需要消耗大量內(nèi)存;另外在重建較大建筑時不斷累積的誤差會造成“飄移”現(xiàn)象。以上兩點原因使得Kinectfusion無法重建較大建筑。


論文鏈接:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf
代碼鏈接:https://github.com/ParikaGoel/KinectFusion
演示:


2.Kintinuous

上述 KinectFusion 算法使用固定體積的網(wǎng)格模型(如256×256×256)表示重建的三維場景,從而只能重建固定大小的場景;另外當重建體積較大,或者網(wǎng)格的空間分辨率較高時很消耗顯存。而且 KinectFusion 算法沒有回環(huán)檢測和回環(huán)優(yōu)化,這也造成當相機移動距離大時,不可避免的會有累積誤差。Kintinuous算法是比較完善的三維重建系統(tǒng),融合了回環(huán)檢測和回環(huán)優(yōu)化,還在實時三維剛體重建中使用了deformation graph做非剛體變換,根據(jù)回環(huán)優(yōu)化的結(jié)果,更新點的坐標,使得回環(huán)的地方兩次重建的可以對齊。該算法適合大場景的三維重建。論文鏈接:http://www.thomaswhelan.ie/Whelan12rssw.pdf
代碼鏈接:https://github.com/mp3guy/Kintinuous
演示:


3.ElasticFusion


該算法的作者同時也是Kintinuous的作者,不同于Kintinuous的是,ElasticFusion使用了面元(Surfel)的表示方法,并且是用于小場景重建。該工作的主要貢獻有兩點:將許多“model-to-model”的局部閉環(huán)和較大規(guī)模的全局閉環(huán)結(jié)合在一起。因此可以保證重建地圖的分布的盡可能相近,并且保證了重建結(jié)果的全局一致性;另外該算法對探測離散的多點光源環(huán)境比較高效,也能在該條件下獲得較好的重建結(jié)果。另外該算法也面臨巨大的挑戰(zhàn),如何解決整個房間以外的地圖可擴展性問題以及如何隨著時間變化,保證重建地圖的全局一致的穩(wěn)定性。
論文鏈接:http://www.thomaswhelan.ie/Whelan16ijrr.pdf
http://roboticsproceedings.org/rss11/p01.pdf
代碼鏈接:https://github.com/mp3guy/ElasticFusion
演示:


4.ElasticReconstruction

該工作提供一種從RGB-D視頻重建室內(nèi)場景重建的方法,其核心思想在于將場景片段的幾何配準和全局優(yōu)化相結(jié)合。場景片段是通過將輸入RGB-D視頻流分割成若干幀為一組的場景片段得到的。這種以場景片段為單位進行深度信息的融合可以有效地去除深度圖的噪聲,從而獲得更加準確的表面法向信息以及重建結(jié)果。
論文鏈接:http://vladlen.info/papers/indoor.pdf
代碼鏈接:https://github.com/qianyizh/ElasticReconstruction
演示:


5.InfiniTAM
InfiniTAM是一個開源、跨平臺、實時的大范圍深度信息融合與跟蹤技術(shù)框架。該算法有好幾個版本,有很大的借鑒意義。值得一提的是,InfiniTAM能夠比KinectFusion重建更加大范圍的3D環(huán)境,其關(guān)鍵因素在于InfiniTAM采用了哈希表的方式來存儲隱式的體積表示,極大地節(jié)省了內(nèi)存空間的消耗。論文鏈接:https://arxiv.org/pdf/1708.00783.pdf代碼鏈接:https://github.com/victorprad/InfiniTAM演示:
6.BundleFusion
Bundlefusion應該是目前靜態(tài)場景重建效果最佳的方案了。該方法提出一個并行化的優(yōu)化框架,充分利用了基于稀疏特征以及稠密幾何和光度匹配提取的對應關(guān)系,實時地估計了BA優(yōu)化的姿態(tài),并具有從追蹤失敗中恢復(即重定位)的魯棒追蹤能力。
論文鏈接:https://arxiv.org/pdf/1604.01093.pdf
代碼鏈接:https://github.com/niessner/BundleFusion?
演示:
2基于動態(tài)場景的三維重建
1.DynamicFusion
DynamicFusion獲得了2015年CVPR的Best Paper Award,其作者是Newcombe,和KinectFusion是一個作者。DynamicFusion是不基于任何模板先驗信息的動態(tài)重建算法,可是說是實時動態(tài)重建的開山之作。DynamicFusion系統(tǒng)在重建場景的幾何的同時也在估計稠密體積表示的6D形變域。類似KinectFusion,該系統(tǒng)能隨著深度數(shù)據(jù)的采集,而獲得一個逐漸去噪,保留細節(jié)并且較為完整的重建結(jié)果。但同時由于DynamicFusion沒有采用任何先驗信息使得該算法對于幀間較大的運動以及遮擋區(qū)域的運動都不具備魯棒性;此外DynamicFusion可以較好得處理封閉拓撲的表面重建,對于拓撲發(fā)生變化就無能為力了。例如我們嘴一開始閉著,后面再打開的情況就沒法處理;另外由于追蹤的累積誤差,使得回環(huán)閉合失敗。
論文鏈接:
https://rse-lab.cs.washington.edu/papers/dynamic-fusion-cvpr-2015.pdf
演示:
2.volumeDeform
volumeDeform算法和dynamicFusion類似,都無需預先定義的模板,同樣采用體積表示(volumetric representation)的方法來參數(shù)化重建模型的幾何以及運動。該算法的運動追蹤基于提取的全局稀疏彩色特征(如SIFT算子)以及稠密的深度圖兩者的結(jié)合,增強了特征匹配點尋找準確的魯棒性,進而極大地減小了重建模型的累積誤差以及漂移現(xiàn)象 。該算法的不足之處在于盡管全局SITF特征算子的匹配提高了系統(tǒng)的魯棒性,減小了對齊的誤差,但漂移現(xiàn)象仍然不能完全消除;另外由于正則項的設置使得極度彎曲的物體的重建結(jié)果在運動上會顯得平滑,變得不那么彎曲。
論文鏈接:https://graphics.stanford.edu/~niessner/papers/2016/5volumeDeform/innmann2016deform.pdf
演示:
3.BodyFusion
從BodyFusion開始就變得更有意思了。BodyFusion使用人體骨架作為先驗信息,實現(xiàn)魯棒了的人體動態(tài)重建。人體骨架的引入減少了重建表面圖節(jié)點的非剛性形變參數(shù)化的歧義性,也是在一定程度上縮小了解空間。不足之處在于所使用的人體骨骼所包含的關(guān)節(jié)點太過稀疏,并且運動較快時,會在深度圖上出現(xiàn)運動模糊的情況,從而造成重建方法受限。
論文鏈接:http://www.liuyebin.com/bodyfusion/bodyfusion_files/BdyFu_ICCV17.pdf
演示:

4.DoubleFusion

DoubleFusion非常驚艷,該系統(tǒng)將數(shù)字驅(qū)動的模板(SMPL模型)以及實時重建的稠密幾何、非剛性運動以及內(nèi)層人體形狀充分結(jié)合在一起。該系統(tǒng)的關(guān)鍵貢獻之一在于提出了雙層表面的表示,這里的兩層主要是指里層的參數(shù)化模型表面(inner body),也就是SMPL模型的shape,以及外層通過深度融合得到的表面(outer surface)。該算法的另一個關(guān)鍵貢獻在于提出了一個基于雙層表面表示的聯(lián)合運動追蹤,使得整個系統(tǒng)可以在快速運動的情況下仍然具有魯棒性。不足之處在于當用戶穿著比較肥大的時候,估計的人體也偏胖;并且無法處理外層表面發(fā)生分離的情況,以及無法處理人和物體交互的情況。
論文鏈接:http://www.liuyebin.com/doublefusion/doublefusion_files/doublefusion.pdf演示:


5.UnstructuredFusion?

通常多相機系統(tǒng)需要一些特殊設計的相機以及預先精細的相機標定操作,但UnstructuredFusion算法可以使用未經(jīng)預先標定以及同步的三個深度相機以一種互補并靈活的方式覆蓋整個人體,從而實現(xiàn)實時,高質(zhì)量,完整的動態(tài)人體重建。該算法也有不足之處。由于輸入深度圖分辨率受限,該算法無法重建目標非常細小的部分,比如人的臉部區(qū)域;該算法也無法處理網(wǎng)格拓撲分離的情況;該算法也無法處理人-物交互情況。
論文鏈接:https://ieeexplore.ieee.org/document/8708933
演示:


6.RobustFusion


誠如算法名字RobustFusion所示,該算法使用了各種數(shù)據(jù)驅(qū)動的視覺線索提高動態(tài)重建算法的魯棒性。這些數(shù)據(jù)驅(qū)動的視覺線索具體包括Occupancy Network,Pose&Shape Network以及Semantic Network。 該算法充分利用了上述數(shù)據(jù)驅(qū)動的視覺線索,避免了預先掃描模板的使用,具備了重新初始化的能力,使得該系統(tǒng)能夠處理極具挑戰(zhàn)性的運動和幾何的重建。該系統(tǒng)的不足之處有:該系統(tǒng)無法實時運行;不能處理重建網(wǎng)格拓撲發(fā)生分離的情況,比如脫掉衣服;不能實現(xiàn)人和物的交互;當一些極端運動姿態(tài)在上述網(wǎng)絡訓練時沒有出現(xiàn)過,那上述數(shù)據(jù)驅(qū)動的視覺線索就不能很好地提供先驗信息。
論文鏈接:https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123490239.pdf


7.KillingFusion

KillFusion是基于Killing Vector Fields提出的實時三維重建方法,也是不需要任何預先掃描的模板信息以或是形狀先驗。KillingFusion不需要顯式地進行對應匹配點的搜索,當給定感興趣區(qū)域的一對SDF(signed distance fields),該算法可以估計出一個稠密形變域來對齊給定的SDF。具體的,該算法定義一個和SDF相同分辨率的位移向量域(displacement vector field),并通過最優(yōu)化迭代求解。該算法的不足之處也是由于其優(yōu)點造成,不顯式地尋找對應點也使得該算法在某些需要顯式的對應點的操作上無法應用,比如紋理映射就需要顯式的對應點。
論文鏈接:http://campar.in.tum.de/pub/slavcheva2017cvpr/slavcheva2017cvpr.pdf
演示:


8.SurfelWarp

SurfelWarp是三維動態(tài)重建方案中為數(shù)不多的基于面元的算法。類似的,該算法輸入一個深度圖序列,對非剛性場景進行實時重建,無需任何模板或是先驗信息。與現(xiàn)有的方法相比,該算法無需維持體積數(shù)據(jù)結(jié)構(gòu),比如TSDF模型,該系統(tǒng)采用面元(surfel)的幾何表示,極大地增強了拓撲發(fā)生改變時的追蹤能力,從而獲得一致的重建結(jié)果。該算法的不足之處在于,模型重初始化可以極大地提高系統(tǒng)的魯棒性,然而清除錯誤的面元會破壞模型的完整性。
論文鏈接:
https://arxiv.org/pdf/1904.13073.pdf
演示:

9.Fusion4D

Fusion4D的重建結(jié)果也非常驚艷。該算法是基于多視角方案,沒有使用任何先驗信息,因此理論上可以重建任何場景或是物體。如視頻所示,除了對人體動態(tài)重建,還能對狗子動態(tài)重建。該算法很重要的一點貢獻是引入了key volume,因此對于較大的幀間運動以及網(wǎng)格拓撲發(fā)生改變時都有很強的魯棒性;另外Fusion4D還引入了體素碰撞檢測,從而得到正確的TSDF模型。該系統(tǒng)不足之處在于當RGBD輸入流幀率過低或者幀間運動過大時,會使幀間對應匹配點估計不準確,造成非剛性對齊過程無法收斂。
論文鏈接:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/11/a114-dou.pdf

完
如果各位小伙伴想觀看完整的演示效果,可以點擊這里:https://zhuanlan.zhihu.com/p/296509722

本文僅做學術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
3D視覺工坊-三維重建交流群
已建立3D視覺工坊-三維重建微信交流群!想要進三維重建學習交流群的同學,可以直接加微信號:CV_LAB。加的時候備注一下:三維重建+學校+昵稱,即可。然后就可以拉你進群了。
強烈推薦大家關(guān)注3D視覺工坊知乎賬號和3D視覺工坊微信公眾號,可以快速了解到最新優(yōu)質(zhì)的3D視覺與SLAM論文。