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