開源匯總 | RGB-D SLAM用于靜態(tài)/動(dòng)態(tài)稠密三維重建
點(diǎn)擊上方“計(jì)算機(jī)視覺life”,選擇“星標(biāo)”
快速獲得最新干貨
本文轉(zhuǎn)自三維匠心

近年來,隨著AR,VR,虛擬試衣,自動(dòng)駕駛等領(lǐng)域的興起,三維重建技術(shù)得到了廣泛的應(yīng)用。
三維匠自接觸三維重建以來,一直為基于RGB-D相機(jī)的三維重建所驚艷。同時(shí),心頭一直盤旋著寫個(gè)總結(jié)的想法,相信大家也能體會(huì)三維匠的感受,空中閣樓,如鯁在喉。
最后親身實(shí)踐一番后,終于可以了卻心愿。故先寫個(gè)總覽作為備忘,也可給各位小伙伴提供按圖索驥的便利。后續(xù)還會(huì)寫具體文章的分析,分享下對(duì)相關(guān)論文的理解,希望各位小伙伴也不吝賜教。

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

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

再來說說Surfel,如下圖。

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

本文提到的論文已經(jīng)打包好,下載方式:掃碼后回復(fù):22

?
1?基于靜態(tài)場(chǎng)景的三維重建
1.KinectFusion
KinectFusion是Richard A. Newcombe的經(jīng)典之作。該系統(tǒng)僅需要一個(gè)移動(dòng)的低成本深度相機(jī),便可以重建任意并且較為復(fù)雜的室內(nèi)場(chǎng)景。其核心思想將Kinect傳感器采集的深度數(shù)據(jù)流實(shí)時(shí)融入到(fusion into)一個(gè)當(dāng)前場(chǎng)景對(duì)應(yīng)的全局的隱式表面模型(TSDF模型)中,并使用一個(gè)由粗到精的迭代最近點(diǎn)(ICP)算法跟蹤當(dāng)前采集的深度幀數(shù)據(jù)與上文的全局的隱式表面模型之間的相對(duì)關(guān)系,從而獲得Kinect傳感器的位姿變化。
同時(shí)這個(gè)系統(tǒng)也有著不足之處,該系統(tǒng)只能重建小于7立方米的體空間。主要原因有兩點(diǎn):由于該系統(tǒng)采用稠密的體積表示方式,因此需要消耗大量?jī)?nèi)存;另外在重建較大建筑時(shí)不斷累積的誤差會(huì)造成“飄移”現(xiàn)象。以上兩點(diǎ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)表示重建的三維場(chǎng)景,從而只能重建固定大小的場(chǎng)景;另外當(dāng)重建體積較大,或者網(wǎng)格的空間分辨率較高時(shí)很消耗顯存。而且 KinectFusion 算法沒有回環(huán)檢測(cè)和回環(huán)優(yōu)化,這也造成當(dāng)相機(jī)移動(dòng)距離大時(shí),不可避免的會(huì)有累積誤差。Kintinuous算法是比較完善的三維重建系統(tǒng),融合了回環(huán)檢測(cè)和回環(huán)優(yōu)化,還在實(shí)時(shí)三維剛體重建中使用了deformation graph做非剛體變換,根據(jù)回環(huán)優(yōu)化的結(jié)果,更新點(diǎn)的坐標(biāo),使得回環(huán)的地方兩次重建的可以對(duì)齊。該算法適合大場(chǎng)景的三維重建。
論文鏈接:http://www.thomaswhelan.ie/Whelan12rssw.pdf
代碼鏈接:https://github.com/mp3guy/Kintinuous
演示:


3.ElasticFusion


該算法的作者同時(shí)也是Kintinuous的作者,不同于Kintinuous的是,ElasticFusion使用了面元(Surfel)的表示方法,并且是用于小場(chǎng)景重建。該工作的主要貢獻(xiàn)有兩點(diǎn):將許多“model-to-model”的局部閉環(huán)和較大規(guī)模的全局閉環(huán)結(jié)合在一起。因此可以保證重建地圖的分布的盡可能相近,并且保證了重建結(jié)果的全局一致性;另外該算法對(duì)探測(cè)離散的多點(diǎn)光源環(huán)境比較高效,也能在該條件下獲得較好的重建結(jié)果。
另外該算法也面臨巨大的挑戰(zhàn),如何解決整個(gè)房間以外的地圖可擴(kuò)展性問題以及如何隨著時(shí)間變化,保證重建地圖的全局一致的穩(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)場(chǎng)景重建的方法,其核心思想在于將場(chǎng)景片段的幾何配準(zhǔn)和全局優(yōu)化相結(jié)合。場(chǎng)景片段是通過將輸入RGB-D視頻流分割成若干幀為一組的場(chǎng)景片段得到的。這種以場(chǎng)景片段為單位進(jìn)行深度信息的融合可以有效地去除深度圖的噪聲,從而獲得更加準(zhǔn)確的表面法向信息以及重建結(jié)果。
論文鏈接:http://vladlen.info/papers/indoor.pdf
代碼鏈接:https://link.zhihu.com/?target=https%3A//github.com/qianyizh/ElasticReconstruction
演示:


5.InfiniTAM

? ? ? ?
InfiniTAM是一個(gè)開源、跨平臺(tái)、實(shí)時(shí)的大范圍深度信息融合與跟蹤技術(shù)框架。該算法有好幾個(gè)版本,有很大的借鑒意義。值得一提的是,InfiniTAM能夠比KinectFusion重建更加大范圍的3D環(huán)境,其關(guān)鍵因素在于InfiniTAM采用了哈希表的方式來存儲(chǔ)隱式的體積表示,極大地節(jié)省了內(nèi)存空間的消耗。
論文鏈接:https://arxiv.org/pdf/1708.00783.pdf
代碼鏈接:https://github.com/victorprad/InfiniTAM
演示:


6.BundleFusion

Bundlefusion應(yīng)該是目前靜態(tài)場(chǎng)景重建效果最佳的方案了。該方法提出一個(gè)并行化的優(yōu)化框架,充分利用了基于稀疏特征以及稠密幾何和光度匹配提取的對(duì)應(yīng)關(guān)系,實(shí)時(shí)地估計(jì)了BA優(yōu)化的姿態(tài),并具有從追蹤失敗中恢復(fù)(即重定位)的魯棒追蹤能力。
論文鏈接:https://arxiv.org/pdf/1604.01093.pdf
代碼鏈接:https://github.com/niessner/BundleFusion?
演示:


2
基于動(dòng)態(tài)場(chǎng)景的三維重建
1.DynamicFusion

DynamicFusion獲得了2015年CVPR的Best Paper Award,其作者是Newcombe,和KinectFusion是一個(gè)作者。DynamicFusion是不基于任何模板先驗(yàn)信息的動(dòng)態(tài)重建算法,可是說是實(shí)時(shí)動(dòng)態(tài)重建的開山之作。DynamicFusion系統(tǒng)在重建場(chǎng)景的幾何的同時(shí)也在估計(jì)稠密體積表示的6D形變域。類似KinectFusion,該系統(tǒng)能隨著深度數(shù)據(jù)的采集,而獲得一個(gè)逐漸去噪,保留細(xì)節(jié)并且較為完整的重建結(jié)果。但同時(shí)由于DynamicFusion沒有采用任何先驗(yàn)信息使得該算法對(duì)于幀間較大的運(yùn)動(dòng)以及遮擋區(qū)域的運(yùn)動(dòng)都不具備魯棒性;此外DynamicFusion可以較好得處理封閉拓?fù)涞谋砻嬷亟?,?duì)于拓?fù)浒l(fā)生變化就無能為力了。例如我們嘴一開始閉著,后面再打開的情況就沒法處理;另外由于追蹤的累積誤差,使得回環(huán)閉合失敗。? ? ? ? ? ? ??論文鏈接:
https://rse-lab.cs.washington.edu/papers/dynamic-fusion-cvpr-2015.pdf?
演示:


2.volumeDeform

volumeDeform算法和dynamicFusion類似,都無需預(yù)先定義的模板,同樣采用體積表示(volumetric representation)的方法來參數(shù)化重建模型的幾何以及運(yùn)動(dòng)。該算法的運(yùn)動(dòng)追蹤基于提取的全局稀疏彩色特征(如SIFT算子)以及稠密的深度圖兩者的結(jié)合,增強(qiáng)了特征匹配點(diǎn)尋找準(zhǔn)確的魯棒性,進(jìn)而極大地減小了重建模型的累積誤差以及漂移現(xiàn)象?。
該算法的不足之處在于盡管全局SITF特征算子的匹配提高了系統(tǒng)的魯棒性,減小了對(duì)齊的誤差,但漂移現(xiàn)象仍然不能完全消除;另外由于正則項(xiàng)的設(shè)置使得極度彎曲的物體的重建結(jié)果在運(yùn)動(dòng)上會(huì)顯得平滑,變得不那么彎曲。
論文鏈接:https://graphics.stanford.edu/~niessner/papers/2016/5volumeDeform/innmann2016deform.pdf?
演示:


3.BodyFusion

從BodyFusion開始就變得更有意思了。BodyFusion使用人體骨架作為先驗(yàn)信息,實(shí)現(xiàn)魯棒了的人體動(dòng)態(tài)重建。人體骨架的引入減少了重建表面圖節(jié)點(diǎn)的非剛性形變參數(shù)化的歧義性,也是在一定程度上縮小了解空間。
不足之處在于所使用的人體骨骼所包含的關(guān)節(jié)點(diǎn)太過稀疏,并且運(yùn)動(dòng)較快時(shí),會(huì)在深度圖上出現(xiàn)運(yùn)動(dòng)模糊的情況,從而造成重建方法受限。
論文鏈接:http://www.liuyebin.com/bodyfusion/bodyfusion_files/BdyFu_ICCV17.pdf
演示:


4.DoubleFusion

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


5.UnstructuredFusion?

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


6.RobustFusion


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


?7.KillingFusion

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


8.SurfelWarp?

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

9.Fusion4D?

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
完
如果各位小伙伴想觀看完整的演示效果,可以點(diǎn)擊這里:
https://zhuanlan.zhihu.com/p/296509722
本文提到的論文已經(jīng)打包好,下載方式:掃碼后回復(fù):22

一個(gè)人孤獨(dú)的學(xué)習(xí)SLAM,我哭了!


長(zhǎng)按或掃描二維碼查看課程介紹和購買方式:

專輯:計(jì)算機(jī)視覺方向簡(jiǎn)介
專輯:視覺SLAM入門
專輯:最新SLAM/三維視覺論文/開源
專輯:三維視覺/SLAM公開課
專輯:深度相機(jī)原理及應(yīng)用
專輯:手機(jī)雙攝頭技術(shù)解析與應(yīng)用
專輯:相機(jī)標(biāo)定
專輯:全景相機(jī)
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
投稿、合作也歡迎聯(lián)系:simiter@126.com

掃描關(guān)注視頻號(hào),看最新技術(shù)落地及開源方案視頻秀?↓
