3D重建算法原理
3D重建算法原理
三維重建(3D Reconstruction)技術(shù)一直是計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)熱點(diǎn)課題。早期的三維重建技術(shù)通常以二維圖像作為輸入,重建出場(chǎng)景中的三維模型。但是,受限于輸入的數(shù)據(jù),重建出的三維模型通常不夠完整,而且真實(shí)感較低。隨著各種面向普通消費(fèi)者的深度相機(jī)(depth camera)的出現(xiàn),基于深度相機(jī)的三維掃描和重建技術(shù)得到了飛速發(fā)展。以微軟的Kinect,華碩的XTion以及因特爾的RealSense等為代表的深度相機(jī)造價(jià)低廉,體積適當(dāng),操作方便,并且易于研究者和工程師進(jìn)行開(kāi)發(fā)。三維重建技術(shù)也是增強(qiáng)現(xiàn)實(shí)(Augmented Reality,簡(jiǎn)稱AR)技術(shù)的基礎(chǔ),經(jīng)過(guò)掃描重建后的三維模型可以直接應(yīng)用到AR或VR的場(chǎng)景中。本文將簡(jiǎn)單介紹基于深度相機(jī)的三維重建技術(shù)的基本原理及其應(yīng)用。
背景
·
對(duì)幾何3D模型不斷增長(zhǎng)的需求:電影 游戲 虛擬環(huán)境等行業(yè)
·
VR&AR的火爆
·
房地產(chǎn) 三維地圖等領(lǐng)域的需求
應(yīng)用
·
中國(guó)古代建筑三維數(shù)字化保護(hù)
·
三維數(shù)字化城市
·
三維地圖
·
VR&&AR游戲,電影等
·
醫(yī)療行業(yè):三維心臟
·
教育行業(yè)等
方法介紹
傳統(tǒng)的三維重建主要是依靠昂貴的三維掃描設(shè)備,并且需要被掃描的目標(biāo)保持一段時(shí)間的穩(wěn)定。近年來(lái),由于計(jì)算機(jī)硬件大規(guī)模計(jì)算能力的發(fā)展,特別是GPU和分布式計(jì)算的發(fā)展,實(shí)時(shí)高效的解決方案成為了可能。目前主流的方法主要分為以下兩類:
·
基于深度相機(jī)的三維重建
·
基于圖像的三維重建
原理 主要有以下三種:結(jié)構(gòu)光,這個(gè)技術(shù)的代表產(chǎn)品是 Kinect 一代,它的傳感器芯片用的是 PrimeSense 家的。PrimeSense 現(xiàn)在是蘋果旗下的公司。
·
TOF,time-of-flight,代表產(chǎn)品是 Kinect 二代,由于微軟對(duì)于 One 這個(gè)單詞的熱愛(ài),它的官方名字是 Kinect
One。
·
雙目攝像頭,代表產(chǎn)品是
Google Tango 以及 Leap
Motion,前者配有四臺(tái)攝像頭,后者有兩個(gè)
三維重建算法廣泛應(yīng)用于手機(jī)等移動(dòng)設(shè)備中,常見(jiàn)的算法有SfM,REMODE和SVO等。
·
2.2 雙目/多目視覺(jué)
雙目視覺(jué)主要利用左右相機(jī)得到的兩幅校正圖像找到左右圖片的匹配點(diǎn),然后根據(jù)幾何原理恢復(fù)出環(huán)境的三維信息。但該方法難點(diǎn)在于左右相機(jī)圖片的匹配,匹配地不精確都會(huì)影響最后算法成像的效果。多目視覺(jué)采用三個(gè)或三個(gè)以上攝像機(jī)來(lái)提高匹配的精度,缺點(diǎn)也很明顯,需要消耗更多的時(shí)間,實(shí)時(shí)性也更差。
這兩種方法理論上都可較精確恢復(fù)深度信息,但實(shí)際上受拍攝條件的影響,其精度往往無(wú)法得到保證。常見(jiàn)的有SGM和SGBM算法等,其中自動(dòng)駕駛數(shù)據(jù)集KITTI中,排名前五十的算法幾乎有一半都是對(duì)SGM的改進(jìn)。
3
基于消費(fèi)級(jí)RGB-D相機(jī)
相機(jī)可以基于主動(dòng)式、被動(dòng)式不同原理,優(yōu)點(diǎn)在于基于這些設(shè)備的算法更具備實(shí)用性。
近年來(lái),也有不少研究直接基于消費(fèi)級(jí)的RGB-D相機(jī)進(jìn)行三維重建,如在微軟的Kinect V1、V2產(chǎn)品上,取得了不錯(cuò)的效果。最早,由帝國(guó)理工大學(xué)的Newcombe等人于2011年提出的Kinect
Fusion開(kāi)啟了RGB相機(jī)實(shí)時(shí)三維重建的序幕。此后有 Dynamic Fusion和Bundle Fusion等算法。
這些方法它們各自有著各自的優(yōu)點(diǎn)和缺點(diǎn),同樣有各自所適用的應(yīng)用范圍。以上為想要入門基于深度學(xué)習(xí)進(jìn)行三維重建領(lǐng)域的同學(xué)簡(jiǎn)要介紹了這些方法,如需要深入了解,請(qǐng)仔細(xì)閱讀相關(guān)文獻(xiàn),SfM和多視圖幾何等經(jīng)典算法作為入門三維重建領(lǐng)域的基礎(chǔ)永遠(yuǎn)都不會(huì)過(guò)時(shí)。
基于深度學(xué)習(xí)的三維重建算法
我們將基于深度學(xué)習(xí)的三維重建算法簡(jiǎn)要地分為三部分,更詳細(xì)的文獻(xiàn)綜述將會(huì)在后續(xù)的系列文章中做介紹:
·
在傳統(tǒng)三維重建算法中引入深度學(xué)習(xí)方法進(jìn)行改進(jìn)
·
深度學(xué)習(xí)重建算法和傳統(tǒng)三維重建算法進(jìn)行融合,優(yōu)勢(shì)互補(bǔ)
·
模仿動(dòng)物視覺(jué),直接利用深度學(xué)習(xí)算法進(jìn)行三維重建
1 在傳統(tǒng)三維重建算法中引入深度學(xué)習(xí)方法進(jìn)行改進(jìn)
因?yàn)镃NN在圖像的特征匹配上有著巨大優(yōu)勢(shì),所以這方面的研究有很多,比如:
·
DeepVO
其基于深度遞歸卷積神經(jīng)網(wǎng)絡(luò)(RCNN)直接從一系列原始RGB圖像(視頻)中推斷出姿態(tài),而不采用傳統(tǒng)視覺(jué)里程計(jì)中的任何模塊,改進(jìn)了三維重建中的視覺(jué)里程計(jì)這一環(huán)。
·
BA-Net
其將 SfM 算法中的一環(huán)集束調(diào)整(Bundle Adjustment, BA)優(yōu)化算法作為神經(jīng)網(wǎng)絡(luò)的一層,以便訓(xùn)練出更好的基函數(shù)生成網(wǎng)絡(luò),從而簡(jiǎn)化重建中的后端優(yōu)化過(guò)程。? Code SLAM,通過(guò)神經(jīng)網(wǎng)絡(luò)提取出若干個(gè)基函數(shù)來(lái)表示場(chǎng)景的深度,這些基函數(shù)可以簡(jiǎn)化傳統(tǒng)幾何方法的優(yōu)化問(wèn)題。
- 深度學(xué)習(xí)重建算法和傳統(tǒng)三維重建算法進(jìn)行融合,優(yōu)勢(shì)互補(bǔ)
CNN-SLAM13將CNN預(yù)測(cè)的致密深度圖和單目SLAM的結(jié)果進(jìn)行融合,在單目SLAM接近失敗的圖像位置如低紋理區(qū)域,其融合方案給予更多權(quán)重于深度方案,提高了重建的效果。
- 模仿動(dòng)物視覺(jué),直接利用深度學(xué)習(xí)算法進(jìn)行三維重建
三維重建領(lǐng)域主要的數(shù)據(jù)格式有四種:
·
深度圖(depth map)
2D圖片,每個(gè)像素記錄從視點(diǎn)到物體的距離,以灰度圖表示,越近越黑;
·
體素(voxel)
體積像素概念,類似于2D之于像素定義;
·
點(diǎn)云(point cloud)
每個(gè)點(diǎn)包含有三維坐標(biāo),乃至色彩、反射強(qiáng)度信息;
·
網(wǎng)格(mesh)
即多邊形網(wǎng)格,容易計(jì)算。
依據(jù)處理的數(shù)據(jù)形式不同將研究簡(jiǎn)要分為三部分:1)基于體素;2)基于點(diǎn)云;3)基于網(wǎng)格。而基于深度圖的三維重建算法暫時(shí)還沒(méi)有,因?yàn)樗嗟氖怯脕?lái)在2D圖像中可視化具體的三維信息而非處理數(shù)據(jù)。
(1)基于體素
體素,作為最簡(jiǎn)單的形式,通過(guò)將2D卷積擴(kuò)展到3D進(jìn)行最簡(jiǎn)單的三維重建:
·
Depth Map
Prediction from a Single Image using a Multi-Scale Deep Network, 2014
該方法是用深度學(xué)習(xí)做三維重建的開(kāi)山之作,基于體素形式,其直接用單張圖像使用神經(jīng)網(wǎng)絡(luò)直接恢復(fù)深度圖方法,將網(wǎng)絡(luò)分為全局粗估計(jì)和局部精估計(jì),并用一個(gè)尺度不變的損失函數(shù)進(jìn)行回歸。
·
3D-R2N2: A
unified approach for single and multi-view 3d object reconstruction, 2016
Christopher等人基于體素形式提出的3D-R2N2模型使用Encoder-3DLSTM-Decoder的網(wǎng)絡(luò)結(jié)構(gòu)建立2D圖形到3D體素模型的映射,完成了基于體素的單視圖/多視圖三維重建(多視圖的輸入會(huì)被當(dāng)做一個(gè)序列輸入到LSTM中,并輸出多個(gè)結(jié)果)。
但這種基于體素的方法存在一個(gè)問(wèn)題,提升精度即需要提升分辨率,而分辨率的增加將大幅增加計(jì)算耗時(shí)(3D卷積,立次方的計(jì)算量)。
如何估計(jì)不同幀中的相機(jī)位置?
新的一幀數(shù)據(jù)的處理流程
(2)基于點(diǎn)云
相較而言,點(diǎn)云是一種更為簡(jiǎn)單,統(tǒng)一的結(jié)構(gòu),更容易學(xué)習(xí),并且點(diǎn)云在幾何變換和變形時(shí)更容易操作,因?yàn)槠溥B接性不需要更新。但需要注意的是,點(diǎn)云中的點(diǎn)缺少連接性,因而會(huì)缺乏物體表面信息,而直觀的感受就是重建后的表面不平整。
·
A Point Set
Generation Network for 3D Object Reconstruction From a Single Image, 2017
該方法是用點(diǎn)云做三維重建的開(kāi)山之作,最大貢獻(xiàn)在于解決了訓(xùn)練點(diǎn)云網(wǎng)絡(luò)時(shí)候的損失問(wèn)題,因?yàn)橄嗤膸缀涡螤羁赡茉谙嗤慕瞥潭壬峡梢杂貌煌狞c(diǎn)云表示,如何用恰當(dāng)?shù)膿p失函數(shù)來(lái)進(jìn)行衡量一直是基于深度學(xué)習(xí)用點(diǎn)云進(jìn)行三維重建方法的難題。
·
Point-Based
Multi-View Stereo Network, 2019
該方法通過(guò)對(duì)場(chǎng)景的點(diǎn)云進(jìn)行處理,融合三維深度和二維紋理信息,提高了點(diǎn)云的重建精度。
(3)基于網(wǎng)格
以前的方法的缺點(diǎn):
·
基于體素,計(jì)算量大,并且分辨率和精度難平衡
·
基于點(diǎn)云,點(diǎn)云的點(diǎn)之間缺少連接性,重建后物體表面不光滑
相較而言,網(wǎng)格的表示方法具有輕量、形狀細(xì)節(jié)豐富的特點(diǎn),重要是相鄰點(diǎn)之間有連接關(guān)系。因而研究者基于網(wǎng)格來(lái)做三維重建。網(wǎng)格是由頂點(diǎn),邊,面來(lái)描述3D物體的,這正好對(duì)應(yīng)于圖卷積神經(jīng)網(wǎng)絡(luò)的M=(V,E,F)所對(duì)應(yīng)。
·
Pixel2Mesh
用三角網(wǎng)格來(lái)做單張RGB圖像的三維重建,相應(yīng)的算法流程如下:
Step1:對(duì)于任意的輸入圖像都初始化一個(gè)橢球體作為初始三維形狀。
Step2:將網(wǎng)絡(luò)分為兩部分:一部分用全卷積神經(jīng)網(wǎng)絡(luò)來(lái)提取輸入圖像的特征,另一部分用圖卷積網(wǎng)絡(luò)來(lái)表示三維網(wǎng)格結(jié)構(gòu),
Step3:對(duì)三維網(wǎng)格不斷進(jìn)行變形,最終輸出物體的形狀。
模型通過(guò)四種損失函數(shù)來(lái)約束形狀,取得了很好的效果。貢獻(xiàn)在于用端到端的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了從單張彩色圖直接生成用網(wǎng)格表示的物體三維信息。
總結(jié)
傳統(tǒng)的三維重建算法可以分為:
這些方法各自有各自優(yōu)點(diǎn)和使用范圍,簡(jiǎn)要概括一下:
而基于深度學(xué)習(xí)的三維重建算法研究主要有三種:
在傳統(tǒng)三維重建算法中引入深度學(xué)習(xí)方法進(jìn)行改進(jìn);
-
深度學(xué)習(xí)重建算法和傳統(tǒng)三維重建算法進(jìn)行融合,優(yōu)勢(shì)互補(bǔ);
-
模仿動(dòng)物視覺(jué),直接利用深度學(xué)習(xí)算法進(jìn)行三維重建,包括基于體素、基于點(diǎn)云和基于網(wǎng)格。
總結(jié)
- 上一篇: CVPR2020论文点评: AdderN
- 下一篇: CVPR2020论文解读:CNN合成的图