3D重建算法原理
三維重建(3D Reconstruction)技術一直是計算機圖形學和計算機視覺領域的一個熱點課題。早期的三維重建技術通常以二維圖像作為輸入,重建出場景中的三維模型。但是,受限於輸入的數據,重建出的三維模型通常不夠完整,而且真實感較低。隨着各種面向普通消費者的深度相機(depth camera)的出現,基於深度相機的三維掃描和重建技術得到了飛速發展。以微軟的Kinect,華碩的XTion以及因特爾的RealSense等為代表的深度相機造價低廉,體積適當,操作方便,並且易於研究者和工程師進行開發。三維重建技術也是增強現實(Augmented Reality,簡稱AR)技術的基礎,經過掃描重建后的三維模型可以直接應用到AR或VR的場景中。本文將簡單介紹基於深度相機的三維重建技術的基本原理及其應用。
背景
- 對幾何3D模型不斷增長的需求:電影 游戲 虛擬環境等行業
- VR&AR的火爆
- 房地產 三維地圖等領域的需求
- 中國古代建築三維數字化保護
- 三維數字化城市
- 三維地圖
- VR&&AR游戲,電影等
- 醫療行業:三維心臟
- 教育行業等
應用
方法介紹
傳統的三維重建主要是依靠昂貴的三維掃描設備,並且需要被掃描的目標保持一段時間的穩定。近年來,由於計算機硬件大規模計算能力的發展,特別是GPU和分布式計算的發展,實時高效的解決方案成為了可能。目前主流的方法主要分為以下兩類:
- 基於深度相機的三維重建
- 基於圖像的三維重建
原理 主要有以下三種:結構光,這個技術的代表產品是 Kinect 一代,它的傳感器芯片用的是 PrimeSense 家的。PrimeSense 現在是蘋果旗下的公司。
- TOF,time-of-flight,代表產品是 Kinect 二代,由於微軟對於 One 這個單詞的熱愛,它的官方名字是 Kinect One。
- 雙目攝像頭,代表產品是 Google Tango 以及 Leap Motion,前者配有四台攝像頭,后者有兩個
三維重建算法廣泛應用於手機等移動設備中,常見的算法有SfM,REMODE和SVO等。
- 2.2 雙目/多目視覺
雙目視覺主要利用左右相機得到的兩幅校正圖像找到左右圖片的匹配點,然后根據幾何原理恢復出環境的三維信息。但該方法難點在於左右相機圖片的匹配,匹配地不精確都會影響最后算法成像的效果。多目視覺采用三個或三個以上攝像機來提高匹配的精度,缺點也很明顯,需要消耗更多的時間,實時性也更差。

這兩種方法理論上都可較精確恢復深度信息,但實際上受拍攝條件的影響,其精度往往無法得到保證。常見的有SGM和SGBM算法等,其中自動駕駛數據集KITTI中,排名前五十的算法幾乎有一半都是對SGM的改進。
3 基於消費級RGB-D相機
相機可以基於主動式、被動式不同原理,優點在於基於這些設備的算法更具備實用性。
近年來,也有不少研究直接基於消費級的RGB-D相機進行三維重建,如在微軟的Kinect V1、V2產品上,取得了不錯的效果。最早,由帝國理工大學的Newcombe等人於2011年提出的Kinect Fusion開啟了RGB相機實時三維重建的序幕。此后有 Dynamic Fusion和Bundle Fusion等算法。
這些方法它們各自有着各自的優點和缺點,同樣有各自所適用的應用范圍。以上為想要入門基於深度學習進行三維重建領域的同學簡要介紹了這些方法,如需要深入了解,請仔細閱讀相關文獻,SfM和多視圖幾何等經典算法作為入門三維重建領域的基礎永遠都不會過時。

基於深度學習的三維重建算法
我們將基於深度學習的三維重建算法簡要地分為三部分,更詳細的文獻綜述將會在后續的系列文章中做介紹:
- 在傳統三維重建算法中引入深度學習方法進行改進
- 深度學習重建算法和傳統三維重建算法進行融合,優勢互補
- 模仿動物視覺,直接利用深度學習算法進行三維重建
1 在傳統三維重建算法中引入深度學習方法進行改進
因為CNN在圖像的特征匹配上有着巨大優勢,所以這方面的研究有很多,比如:
- DeepVO
其基於深度遞歸卷積神經網絡(RCNN)直接從一系列原始RGB圖像(視頻)中推斷出姿態,而不采用傳統視覺里程計中的任何模塊,改進了三維重建中的視覺里程計這一環。
- BA-Net
其將 SfM 算法中的一環集束調整(Bundle Adjustment, BA)優化算法作為神經網絡的一層,以便訓練出更好的基函數生成網絡,從而簡化重建中的后端優化過程。• Code SLAM,通過神經網絡提取出若干個基函數來表示場景的深度,這些基函數可以簡化傳統幾何方法的優化問題。
2. 深度學習重建算法和傳統三維重建算法進行融合,優勢互補
CNN-SLAM13將CNN預測的致密深度圖和單目SLAM的結果進行融合,在單目SLAM接近失敗的圖像位置如低紋理區域,其融合方案給予更多權重於深度方案,提高了重建的效果。
3. 模仿動物視覺,直接利用深度學習算法進行三維重建
三維重建領域主要的數據格式有四種:
- 深度圖(depth map)
2D圖片,每個像素記錄從視點到物體的距離,以灰度圖表示,越近越黑;
- 體素(voxel)
體積像素概念,類似於2D之於像素定義;
- 點雲(point cloud)
每個點包含有三維坐標,乃至色彩、反射強度信息;
- 網格(mesh)
即多邊形網格,容易計算。
依據處理的數據形式不同將研究簡要分為三部分:1)基於體素;2)基於點雲;3)基於網格。而基於深度圖的三維重建算法暫時還沒有,因為它更多的是用來在2D圖像中可視化具體的三維信息而非處理數據。
(1)基於體素
體素,作為最簡單的形式,通過將2D卷積擴展到3D進行最簡單的三維重建:
- Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, 2014
該方法是用深度學習做三維重建的開山之作,基於體素形式,其直接用單張圖像使用神經網絡直接恢復深度圖方法,將網絡分為全局粗估計和局部精估計,並用一個尺度不變的損失函數進行回歸。
- 3D-R2N2: A unified approach for single and multi-view 3d object reconstruction, 2016
Christopher等人基於體素形式提出的3D-R2N2模型使用Encoder-3DLSTM-Decoder的網絡結構建立2D圖形到3D體素模型的映射,完成了基於體素的單視圖/多視圖三維重建(多視圖的輸入會被當做一個序列輸入到LSTM中,並輸出多個結果)。
但這種基於體素的方法存在一個問題,提升精度即需要提升分辨率,而分辨率的增加將大幅增加計算耗時(3D卷積,立次方的計算量)。
如何估計不同幀中的相機位置?

新的一幀數據的處理流程

(2)基於點雲
相較而言,點雲是一種更為簡單,統一的結構,更容易學習,並且點雲在幾何變換和變形時更容易操作,因為其連接性不需要更新。但需要注意的是,點雲中的點缺少連接性,因而會缺乏物體表面信息,而直觀的感受就是重建后的表面不平整。
- A Point Set Generation Network for 3D Object Reconstruction From a Single Image, 2017
該方法是用點雲做三維重建的開山之作,最大貢獻在於解決了訓練點雲網絡時候的損失問題,因為相同的幾何形狀可能在相同的近似程度上可以用不同的點雲表示,如何用恰當的損失函數來進行衡量一直是基於深度學習用點雲進行三維重建方法的難題。
- Point-Based Multi-View Stereo Network, 2019
該方法通過對場景的點雲進行處理,融合三維深度和二維紋理信息,提高了點雲的重建精度。
(3)基於網格
以前的方法的缺點:
- 基於體素,計算量大,並且分辨率和精度難平衡
- 基於點雲,點雲的點之間缺少連接性,重建后物體表面不光滑
相較而言,網格的表示方法具有輕量、形狀細節豐富的特點,重要是相鄰點之間有連接關系。因而研究者基於網格來做三維重建。網格是由頂點,邊,面來描述3D物體的,這正好對應於圖卷積神經網絡的M=(V,E,F)所對應。
- Pixel2Mesh
用三角網格來做單張RGB圖像的三維重建,相應的算法流程如下:
Step1:對於任意的輸入圖像都初始化一個橢球體作為初始三維形狀。
Step2:將網絡分為兩部分:一部分用全卷積神經網絡來提取輸入圖像的特征,另一部分用圖卷積網絡來表示三維網格結構,
Step3:對三維網格不斷進行變形,最終輸出物體的形狀。
模型通過四種損失函數來約束形狀,取得了很好的效果。貢獻在於用端到端的神經網絡實現了從單張彩色圖直接生成用網格表示的物體三維信息。
總結
傳統的三維重建算法可以分為:

這些方法各自有各自優點和使用范圍,簡要概括一下:

而基於深度學習的三維重建算法研究主要有三種:
1. 在傳統三維重建算法中引入深度學習方法進行改進;
2. 深度學習重建算法和傳統三維重建算法進行融合,優勢互補;
3. 模仿動物視覺,直接利用深度學習算法進行三維重建,包括基於體素、基於點雲和基於網格。
