三維重建 3D reconstruction 有哪些實用算法?

2022-01-06 深藍學院
https://www.zhihu.com/question/29885222/answer/918009389在這個問題下,竟然沒有人說大名鼎鼎的KinectFusion以及他後面的一系列工作?KinectFusion單篇論文引用都已經超過3000次了,不應該啊!如果只想看現階段效果最好的三維重建算法,請拉到文章最後(如有更好的算法,還請告知)。帝國理工的Newcombe等人在2011年提出的KinectFusion,可在不需要RGB圖而只用深度圖的情況下就能實時地建立三維模型。KinectFusion算法首次實現了基於廉價消費類相機的實時剛體重建,在當時是非常有影響力的工作,它極大的推動了實時稠密三維重建的商業化進程。KinectFusion重建效果

在他們的論文中沒有開原始碼,最初的代碼是由PCL團隊實現的:

KinectFusion的重建效果可以看這個視頻:KinectFusion之後,陸續出現了Kintinuous,ElasticFusion,ElasticReconstruction,DynamicFusion,InfiniTAM,BundleFusion等非常優秀的工作。其中2017年史丹福大學提出的BundleFusion算法,據說是目前基於RGB-D相機進行稠密三維重建效果最好的方法。
二、Kintinuous和ElasticFusion這兩個工作都是同一個人做出來的,這個人就是Thomas Whelan。這兩個工作應該算KinectFusion之後影響力比較大的。

Kintinuous GitHub代碼:

mp3guy/Kintinuous

mp3guy/ElasticFusion

Kintinuous2.0重建效果:

Kintinuous2.0重建效果ElasticFusion 重建效果項目官網:http://qianyi.info/scene.htmlGitHub代碼:qianyizh/ElasticReconstructionElasticReconstruction重建效果InfiniTAM提供Linux,iOS,Android平臺版本,CPU可以實時重建。GitHub代碼:victorprad/InfiniTAM官網:DynamicFusion Project Page

代碼:

https://github.com/mihaibujanca/dynamicfusionDynamicFusion重建效果論文:https://arxiv.org/pdf/1604.01093.pdf算法解讀:計算機視覺方向簡介 | 深度相機室內實時稠密三維重建

作者 | 劉銳@知乎

來源:

https://www.zhihu.com/question/29885222

主要的深度學習系列算法有DBN, ConvNets, RNN等,基本上經典的深度學習算法都用過。詳細請看唐路路(研究方向 深度學習 3D重建)在專欄 機器學習&深度學習--學術水準的理解 總結的文章 深度學習在3D重建上的應用。近年來Deep Learning在計算機視覺上的應用主要在2D image 的detection,segmentation,classification等方面,感覺已經快無孔不入了。但是DL在3D scene上的研究相對還較少,比如3D reconstruction or 3D modeling。因此,今天我想淺談下image-based 3D reconstruction.具體來講,image-based的3D重構算法可以描述為當給定某個物體或場景的一組照片時, 在一些假設條件下,比如物體材料、觀測視角和光照環境等,通過估計一個最相似的3D shape來解釋這組照片。一個完整的3D重構流程通常包含以下幾個步驟:1. 收集場景圖片(Collect images);2. 計算每張圖的相機參數(Camera parameters for each image);3. 通過圖組來重構場景的 3D shape(幾何模型)以及其對應的相機參數;(Reconstruct the 3D geometry of the scene and corresponding camera parameters.)4. 有選擇的重構場景的材料等(Optionally texture the reconstructed scene.)。


(Image source:Multi-View Stereo: A Tutorial, by Yasutaka Furukawa from Washington University)其中最核心的工作是第三步:3D shape的重構算法。常規的3D shape representation有以下四種:深度圖(depth)、點雲(point cloud)、體素(voxel)、網格(mesh)。近年來,基於Deep learning 的3D reconstruction 也逐漸火熱起來, 例如David EigenNIPS2014上的文章 「Depth Map Prediction from a Single Image using a Multi-Scale Deep Network」,以及Fayao Liu 在CVPR2015上的文章「Deep Convolutional Neural Fields for Depth Estimation from a Single Image」。兩篇文章都是利用CNN網絡結構學習預測 a single image與其對應的depth map 之間的關係。然而我個人覺得depth image 還不足以解釋重構原始input的信息,它只能作為3D scene understanding的一個輔助信息。因此,一些學者開始研究利用一組二維圖來重構3D 點雲圖或voxel以及mesh圖,這裡就不詳細展開了。個人覺得基於deep learning 的3D 點雲和mesh重構是較難以實施的,因為DL學習一個物體完整的架構需要大量數據支撐。然而傳統3D模型是由 vertices 和 triangulation mesh 組成的,因此不一樣的data size造成了training的困難。所以後續大家都用 voxelization(Voxel)的方法把所有CAD model轉成binary voxel 模式(有值為1,空缺為0)這樣保證了每個模型都是相同的大小。早期的voxel-based 三維物體重建代表作有3DShapeNet (princeton.edu),它採用Deep Belief Network (DBN)來學習 voxel 的 probabilistic embedding 然後在給帶有2.5D信息的圖片後,通過 Gibbs Sampling來不斷預測他的 shape class 和填補他的未知voxel以完成3D模型重建。

後續又有CMU的

paper 「Learning a Predictable and Generative Vector Representation for Objects」,利用auto-encoder 學習3D Model 的 embedding, 然後通過 ConvNets學習一個 deterministic function 讓其 rendered image infer 到學習到的 embedding 上。因為 auto -encoder是generative的,對於新的test image,模型就會infer 到相關的3D model embedding,再通過decoder生成其相應的 3D model。同類型的工作還有Choy 在ECCV2016的一篇文章「3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction」。採用深度學習從2D圖像到其對應的3D voxel模型的映射: 首先利用一個標準的CNN結構對原始input image 進行編碼;再利用一個標準 Deconvolution network 對其解碼。用Long Short-Term Memory(LSTM是RNN中的一種)進行過渡連接, LSTM 單元排列成3D網格結構, 每個單元接收一個feature vector from Encoder and Hidden states of neighbors by convolution,並將他們輸送到Decoder中. 這樣每個LSTM單元重構output voxel的一部分。總之,通過這樣的Encoder-3DLSTM-Decoder 的網絡結構就建立了2D images -to -3D voxel model 的映射。

但是,由於3D voxel是三維的,它的resolution成指數增長,所以它的計算相對複雜,目前的工作主要採用32*32*3以下的解析度以防止過多的佔用內存。但這使得最終重構的3D model解析度並不高, 也可能catch不到一些常規的結構(比如對稱性、直線、曲線等),離真實物體還有較大差距。在DL如此火熱的今天,如何將其更好的應用到3D reconstruction(3D重構) 或3D modeling(3D建模)上確實值得我們進一步深入研究。例如考慮如何提高voxel model 的解析度;如何選擇best view 和最少的 view來重構3D物體;如何利用mesh 或point cloud來直接重構3D物體等。但由於mesh 和point cloud是不規則的幾何數據形式,因此直接使用CNN是不可行的。但是可以考慮將3D mesh data 轉化為graphs形式,再對3D曲面上的2D參數進行卷積。具體方法有Spatial construction (Geodesic CNN)和Spectral construction (Spectral CNN)。基於point cloud的方法,可以參考大神Hao Su的CVPR2017文章「PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation」和「A Point Set Generation Network for 3D Object Reconstruction from a Single Image」。但是基於mesh和point cloud的方法總的來講數學東西多,而且細節恢復上效果欠佳。不過可以考慮結合voxel來提高重構精度。這裡就不囉嗦了,有興趣的留言交流。若有理解錯誤的也歡迎指正,謝謝!

https://www.zhihu.com/question/29885222/answer/48940748

我講一下用一組圖片來做3D reconstruction需要的算法吧(SFM), 使用這種方法的軟體比較代表性的有 Pix4Dmapper, Autodesk 123D Catch, PhotoModeler, VisualSFM
我用JavaScript擼了個WebSFM, 完全用Javascript實現的3D reconstruction系統,可以在瀏覽器裡跑。

http://websfm.org , 用Chrome,Firefox,IE10+

先用SIFT對每張照片提取特徵,再對每一對圖片做魯棒的特徵匹配,將所有2圖匹配合併,找出track,通過tracks估算相機參數場景的稀疏結構, 再用相機參數做dense reconstruction, 輸出dense point cloud (with surface nornal)如果需要,可以用poisson surface reconstruction將dense point cloud轉化為polygon1. SIFT (Scale Invariant Feature Transform)同樣的特徵點在不同的scale,方向,光照下都能被檢測到,並且理論上會有相同的描述向量。 (即invariant)
SIFT有很多變種,但實際上很類似,一般是添加幾種可以保持invariant的變換, 比如仿射變換。一個SIFT特徵有四個部分(位置position, 大小scale, 方向direction, 描述向量descriptor)。
比較兩點可以直接比較其特徵向量,不用考慮別的參數。特徵點的position和scale是在DoG Pyramid中找到的extrema.方向是在特徵scale下周邊梯度histagram的主導方向。描述向量是特徵scale下以特徵方向為準的坐標系下的梯度histagram.lowe's sift: http://www.cs.ubc.ca/~lowe/keypoints/SiftGPU: SIFT on GPU (siftgpu)我的JS實現: web-sfm/src/websift at master · ptx-pluto/web-sfm · GitHub2. ANN Feature Matching (近似最鄰近特徵匹配)找出兩張圖片之間特徵向量的Nearest Neighbor,從而找出點與點之間的匹配關係。
這裡輸出的匹配是嘈雜的,存在錯誤,  且非常耗時。先對兩組特徵(vs1[], vs2[])分別建立kd-tree特徵有128維,傳統的kd-tree效果很差,需要對其進行平衡。在構建kd-tree選擇hyperplane的時候,取方差最大的維度,在中位數處split.為了加快速度,並不尋找嚴格NN, 而是在kd-tree上尋找ANN(Approximate NN).匹配是否被採納並不是使用傳統的閥值,而是用一個優先序列來找ANN,最後通過第一與第二的距離比來確定是否採納。同時v1,v2必須同時互為ANN,匹配(v1,v2)才被採納.ann: ANN - Approximate Nearest Neighbor Library
我的JS實現: web-sfm/src/webmatcher at master · ptx-pluto/web-sfm · GitHub用RANSAC和八點算法可以將嘈雜的匹配的結果穩定化.適用情形: dataset存在少量錯誤,但服從一個constrain,並且constrain可以用dataset的一個很小的子集倒推回去。(在幾何中這樣的例子很多,比如給你某個平面上1000個點的坐標,但其中有錯誤數據,其constrain就是這個平面,而平面用3個點就可以確定)原理: 隨機抓一個subset並估算constrain,若subset中有錯誤數據,該constrain會很不準確,reject大部分數據;相反若subset中恰好都是正確數據,則會得到正確的constrain,accept大部分數據。因此不停的執行這個過程,直到找到正確的constrain,然後判定被其reject的數據為錯誤數據。(或因嘗試次數過多退出)在這裡,dataset就是特徵匹配輸出的對應關係,而constrain就是核線幾何(f-matrix), 用8個對應關係即可用八點算法估算出f-matrix. RANSAC可以篩除不符合核線幾何的錯誤匹配。RANSAC非常簡單,代碼只有十幾行,而且效果非常明顯,肉眼可辨我的JS實現: web-sfm/ransac.js at master · ptx-pluto/web-sfm · GitHub4. Eight Point Algorithm (八點算法)用八個點點對應關係計算核線幾何(f-matrix)兩個Projective Camera之間的點點對應關係是需要滿足核線幾何的,就像三點可以確定一個平面一樣,8對匹配可以確定兩個相機的核線幾何。核線幾何簡單的講就是 x1*F*x2=0 , F是fundamental matrix (3x3, rank 2), x1,x2是相對應的兩點的homogenous坐標。將x1,x2代入後可以得到關於(f1,....f9)的一個線性方程,8對就是8個方程,再用SVD即可得最小二乘解。5. Bundler Camera Registrtionbundler是incremental的,並且依賴於sparse bundle adjustment。初始化第一對相機後,便不斷的用已知點估算新相機,並triangulate新的點,直到沒有candidate為止,中間不斷的做SBA來擬合新的參數, 並且每一輪做一次全局SBA。Bundler-Structure from Motion (SfM) for Unordered Image Collections我的JS實現: web-sfm/register.js at master · ptx-pluto/web-sfm · GitHub6. SBA (Sparse Bundle Adjustemt)SBA就是一個為view geometry優化之後的levenberg-marquardt非線性擬合算法. 在最小化projection error的時候,jacobian和hessian矩陣是稀疏的,而且存在特殊規律。利用了稀疏結構之後,就算有幾千個變量需要擬合,速度也非常快。下圖為sparse jacobian和sparse hessian.sba: Sparse Bundle Adjustment in C/C++
web-sfm/sparse-bundle-adjustment.js at master · ptx-pluto/web-sfm · GitHub

7. CMVS/PMVS 

使用surfel model的dense reconstruction, 比較複雜, 自己查看。

本文是對知乎高關注問題《三維重建 3D reconstruction 有哪些實用算法》中高贊回答的整理,如有侵權,請聯繫我們。

相關焦點

  • 三維重建技術深度解析
    在算法方面,PCL是一套包括數據濾波、點雲配準、表面生成、圖像分割和定位搜索等一系列處理點雲數據的算法。基於不同類型區分每一套算法,以此把整合所有三維重建流水線功能,保證每套算法的緊湊性、可重用性與可執行性。
  • 【技術綜述】基於3DMM的三維人臉重建技術總結
    基於圖像的人臉三維重建在人臉分析與娛樂領域裡有巨大的應用場景,同時它也可以用於提升人臉關鍵點檢測,人臉識別,人臉編輯等很多任務。本文重點介紹其中基於3DMM模型的核心技術及其研究進展。作者&編輯 | 言有三人臉三維重建就是建立人臉的三維模型,它相對於二維人臉圖像多了一個維度,在電影,遊戲等領域應用廣泛。
  • CVPR 2021 Oral | 商湯、港中文提出生成式渲染器+反向渲染,3D人臉重建效果逼真
    商湯科技與香港中文大學多媒體實驗室(MMLab)在 CVPR 2021 發表了一篇 Oral 文章,提出一種基於風格化生成網絡的渲染技術,並利用該技術進行單目攝像機的重建人臉 3D 模型算法。該算法在利用生成網絡高逼真性能的同時,給予網絡在幾何上的強約束,生成與 3D 模型匹配的人臉圖像,並可以通過反向傳播算法來優化圖像進行 3D 模型求解。
  • 三維重建系列之COLMAP: Structure-from-Motion Revisited
    本算法的創新點本文的貢獻主要有以下5個方面:提出了一種多模型幾何校驗策略:提高了初始化與三角化的魯棒性;提出迭代BA,重三角化以及外點濾除策略對重建的完整性與精度都有貢獻;場景圖增強採用了一種多模型幾何校驗策略增強場景圖。
  • ECCV 2018 | Pixel2Mesh:從單幀RGB圖像生成三維網格模型
    騰訊 AI Lab 與復旦大學、普林斯頓大學、Intel Labs 合作提出一種端對端的深度學習框架,可從單張彩色圖片直接生成三維網格(3d mesh)。該研究論文被頂級會議 ECCV 2018 收錄,以下是技術詳細解讀。
  • 常用的3D三維建模軟體大全有哪些?
    3D建模,可以使得動畫及遊戲作品能夠展現現實世界,真實的三維空間,有真實的距離空間。那麼在職場,HR如何通過3D來為人才建模呢?值得注意的是,最新版本的MeshMixer還添加3D列印支撐優化新算法。4、3DCoat3d-coat 這是由烏克蘭開發的數字雕塑軟體,我們可以先看看官方的介紹:3D -Coat是專為遊戲美工設計的軟體,它專注於遊戲模型的細節設計,集三維模型實時紋理繪製和細節雕刻功能為一身,可以加速細節設計流程,在更短的時間內創造出更多的內容。
  • 咔咔咔,中文版照片自動重建三維模型軟體3DF Zephyr v5.001 Win
    照片轉三維模型自動重建軟體3DF Zephyr v5.001
  • 【泡泡機器人原創專欄】RGB-D實時重建那點事
    在RGB-D相機出現之前,採用普通相機很難實現實時稠密重建的(基於高精度結構光可以),也可以說KinectFusion算法首次實現了基於廉價消費類相機的實時剛體重建,把實時三維重建推到可以商業化的地步,也使得實時三維重建這個學科的基礎研究,可以支撐得起微軟Hololens,Facebook Oculus AR產品的應用需求。
  • 結構光三維重建原理
    ,其特點是能夠精確快速地實現被測物體三維信息計算。對比雙目立體視覺重建方法,結構光也是利用兩個位姿的光學元件通過三角測量實現三維重建,但由於主 動投射結構光圖案至被測物體,使得像素點之間的匹配更加容易和準確。本文所 述結構光方法均選擇多頻外差原理實現絕對相位求解,相較於其它結構光方法, 該方法測量的精度和抗幹擾能力更高。
  • ISMAR 2020 Best Paper | 商湯提出手機端實時單目三維重建系統
    商湯研究院和浙江大學 CAD&CG 國家重點實驗室合作研發了一個手機端實時單目三維重建系統 Mobile3DRecon。與現有的基於 RGBD 的在線三維重建或離線生成表面網格的系統不同,該系統結合前端位姿跟蹤結果,允許用戶使用單目攝像頭在線重建場景表面網格。在深度估計方面,提出結合多視圖半全局匹配算法和深度神經網絡優化後處理過程魯棒地估計場景深度。
  • 【泡泡點雲時空】R-MVSNet:高解析度多視圖三維重建網絡
    深度學習已經被證明在多視圖三維重建(MVS)中可以取得很好的效果,但是,現有的基於深度學習的三維重建方法最大的限制是尺度問題,大量的內存需求導致這些方法無法被應用在大尺度場景中。在本文中,我們提出了一種基於循環神經網絡的方法R-MVSNet,以適應各種尺度的環境。
  • Good news-3DF Zephyr集成CSF點雲濾波算法即將在下一版本發布
    :CSF點雲濾波算法,這是一個非常強大且實用的功能,對用戶來說一個非常好的消息,讓我們敬請期待。from=timeline&isappinstalled=0「先科普一下,SfM (Structure from Motion)是從多張照片中自動生成三維模型的算法,這類軟體從2010前後開始大量出現,使得從照片生成三維模型變得傻瓜化,比較知名的軟體有photoscan,免費的VisualSfM,遙感測繪用得比較多的有Pixel4D和Smart3D (ContextCapture
  • 一分鐘詳解三維重建學習路線
    1、什麼是三維重建三維重建 ,英文名稱是3D Reconstruction。三維重建是將三維的物體在虛擬世界中重建出來,通俗點說,我們做的就是照相機的逆操作(照相機是將現實中的物體呈現在二維圖片中,而三維重建是將二維圖片中的信息在三維虛擬空間中顯現)。
  • 移動端三維重建APP匯總LiDAR掃描技巧
    新的一年繼續關注和支持我們的三次方AIRX,我們會有發布一系列的課程發布哦,「三次方XR學習季」等你來!!!相信有很多小夥伴已經嘗試了iPhone 12 Pro上的LiDAR功能了吧,經常有小夥伴來抱怨:我移動端三維重建使用什麼APP啊,這麼多APP我怎麼選啊,另外為什麼我的重建結果很垃圾啊.
  • 商湯提出手機端實時單目三維重建系統,實現逼真AR效果和交互
    商湯研究院和浙江大學 CAD&CG 國家重點實驗室合作研發了一個手機端實時單目三維重建系統 Mobile3DRecon。與現有的基於 RGBD 的在線三維重建或離線生成表面網格的系統不同,該系統結合前端位姿跟蹤結果,允許用戶使用單目攝像頭在線重建場景表面網格。在深度估計方面,提出結合多視圖半全局匹配算法和深度神經網絡優化後處理過程魯棒地估計場景深度。
  • Yasutaka Furukawa講3D Reconstruction的發展歷程
    他是自動三維重建和可視化技術在室內場景中應用研究的先驅。他的多視覺立體(MVS)算法被認為是目前校準圖片的最佳三維重建算法,並已經在眾多學術和工業場景中應用。在本次AItutorial中,Yasutaka Furukawa 博士將分享他對計算機視覺三維重建技術的過去、現在和未來的觀點。在21世紀的第一個十年,三維重建技術還處於「感覺「階段,主要的挑戰是如何推斷出精確的幾何測量,如深度、表面法線或三維坐標。伴隨深度神經網絡的快速發展,三維重建技術步入「感知」階段,原始的幾何測量與識別和分割結果相結合,形成了更為結構化的表徵。
  • ACM TOG:基於多臺RGBD相機的三維全景圖及場景重建
    三維場景重建技術是獲取三維場景幾何信息的主要技術之一,是實現對三維場景理解和分析的基礎技術,一直以來是計算機圖形學、計算機視覺和智慧機器人等領域的基本研究課題。三維場景重建技術主要分兩類:自由式掃描三維重建和全景式掃描三維重建。自由式掃描三維重建對場景的掃描過程不做限定,通過準確的相機位姿估計或者視覺SLAM技術,實現三維場景的重建。
  • 一個簡單的在線三維重建服務框架
    三維重建計算量很大,對於大規模的場景計算需要很高的計算資源,往往也只能通過桌面端操作上傳圖像。想要快速基於拍攝的圖片獲得三維模型,又不想回到室內操作,那麼就需要上雲,就需要一套自動化程度相對較高、圖像採集操作簡單、具備模型可視化的方法,但是如果要部署一個計算性能很高的雲伺服器,成本又實在太高了,買不起...。
  • 計算機視覺方向簡介 | 深度學習視覺三維重建
    真正意義上的計算機視覺要超越識別,感知三維環境。我們活在三維空間裡,要做到交互和感知,就必須將世界恢復到三維。所以,在識別的基礎上,計算機視覺下一步必須走向三維重建。本文筆者將帶大家初步了解三維重建的相關內容以及算法。在計算機視覺中, 三維重建是指根據單視圖或者多視圖的圖像重建三維信息的過程. 由於單視頻的信息不完全,因此三維重建需要利用經驗知識.
  • 上帝視角任意切換:三維重建和圖像渲染是怎麼結合的?
    這可能是世界上第一個3D圖像創作、分享應用,它的落幕可能有微軟自身商業策略的調整,可能也和產品本身實際為微軟帶來的收益不符有關。但無論如何,這個系統在我看來堪稱是三維重建和圖像渲染、瀏覽技術的經典作品。因此這一篇文章就從它講起。PhotoSynth的一大特色,是可以允許人們用上帝視角來觀察某個特定的景點,並且可以任意切換視角。