三維重建的方法SFM


這是3.23組會的匯報內容

 

看了一些關於三維重建的博客,深入了解了一下點雲、體素、網格的區別等。

3D重建的進階了解---深度圖,網格,體素,點雲是什么

https://www.cnblogs.com/lainey/p/8547056.html

 

還有3D建模的一些初步了解:

 

用一組圖片來做3D reconstruction需要的算法: SFM(Structure from motion),也就是從時間系列的2D圖像中推算3D信息。

使用這種方法的軟件有: Pix4Dmapper, Autodesk 123D Catch, PhotoModeler, VisualSFM

 

大多數三維重建的數據源是RGB圖像,或者RGBD這種帶有圖像深度信息的圖像(用kinect之類的特殊特備拍出來的)。

 

SFM是最經典的三維重建方案:

1.特征提取(SIFT, SURF, FAST等一堆方法)

2.配准(主流是RANSAC和它的改進版

3.全局優化bundle adjustment   用來估計相機參數

4.數據融合

 

SFM算法是一種基於各種收集到的無序圖片進行三維重建的離線算法。在進行核心的算法structure-from-motion之前需要一些准備工作,挑選出合適的圖片。

 

 

三維重構算法得看試用的是什么傳感器,如果是雙目相機,一般是極線幾何加視覺特征配准的算法,優化就是bundle adjustment; 如果是單目相機,較早的有PTAM,DTAM,, 近幾年就是SFM比較火,如果是Kinect之類的RGBD相機,比較好的就是微軟的KinectFusion, PCL的開源KinFu,以及MIT加強版Kintinuous; 如果是用激光,一般就是SLAM做了。

 

基於rgb單目主要就是基於multiview geometry(SFM) ,比較經典的是DTAM和微軟的monofusion, 缺點是沒法做稍大場景的重建以及重建精度不高。

 

雙目的話就認為是rgbd相機的重建,底層可以得到深度圖的原理就是結構光,雙目,激光,或者tof(結構光方法適合室內高精度重建,商業產品較多, sfm方法比結構光方法更方便,無需事先標定相機,但精度差些,很多無人機對大型建築建模就是用的sfm方法)

 

 

3D重構算法可以描述為當給定某個物體或場景的一組照片時,在一些假定條件下,比如物體材料,觀測視角和光照環境等,通過估計一個最相似的3D shape來解釋這組照片。一個完整的3D重構流程通常包含以下幾個步驟:

1. 收集場景圖片

2. 計算每張圖片的相機參數

3. 通過圖組來重構場景的3D shape以及對應的相機參數

4. 有選擇的重構場景的材料等

 

 

最核心步驟就是第三步: 3D shape的重構算法

 

常規的3D shape representation主要有四種: 深度圖(depth), 點雲(point cloud), 體素(voxel), 網格(mesh)

 

近年來也出現了很多基於deep learning的方法:

 

David Eigen NIPS2014:   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和trangulation mesh組成的,因此不一樣的data size造成了training的困難。所以后續大家都用voxelization(Voxel)的方法把所有CAD model轉成binary voxel模式(有值為1, 空缺為0)這樣保證了每個模型都是相同的大小。最近的一篇論文: Choy ECCV2016:    3D-R2N2:A Unified Approach for Single and Multi-view 3D Object Reconstruction

 

采用深度學習從2D圖像到其對應的3D voxel模型的映射:首先利用一個標准的CNN結構對原始input image進行編碼,然后用Deconv進行解碼,最后用3D LSTM的每個單元重構output voxel.

 

3D voxel是三維的,它的resolution成指數增長,所以它的計算相對復雜,目前的工作主要采用32*32*3以下的分辨率以防止過多的占用內存。但是也使得最終重構的3D model分辨率並不高。所以科研道路道阻且長。

 

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來提高重構精度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM