1. 程式人生 > >[摘抄] SFM 和 Visual SLAM

[摘抄] SFM 和 Visual SLAM

要求 tro 全面 定性 主頁 套路 大牛 匹配 visualsfm

SFM和vSLAM基本討論的是同一問題,不過SFM是vision方向的叫法,而vSLAM是robotics方向的叫法,

vSLAM所謂的mapping,我們vision方向叫structure,vSLAM所謂的location,我們vision方向叫camera pose。

但是從出發點考慮的話,SFM主要是要完成3D reconstuction,而vSLAM主要是要完成localization。

從方法論的角度上考慮的話,傳統的SFM是不要求prediction的,但是對於vSLAM而言prediction是必須的,因為vSLAM的終極目標是要real-time navigation。對於傳統SFM而言,real-time是不要求的。

而傳統的vSLAM也把主要精力放在prediction上面,而且是借助非camera的外界的手段來predict,例如acceleration sensor。

傳統SFM則把精力放在feature tracking上面了。

直到最近,SFM開始利用圖片間的optical flow做prediction,而vSLAM則更加的註重了feature tracking。

所以就目前而言兩個領域似有大融和趨勢。


Andres Davison做了一個非常精彩的關於15年來基於視覺的SLAM的總結。過去10-15年來最典型的幾個SLAM系統如下:

  • MonoSLAM

  • PTAM

  • FAB-MAP

  • DTAM

  • KinectFusion


     日常場景,基於多視角Multi-view重建,不使用RGBD方式的話,就選SfM(Structure from Motion)+MVS(Multi View Stereo)+SR(Surface Reconstruction)+TM(Texture Mapping)套路啦,這是傳統基於多視幾何的路子,原理就是利用多張圖像間的特征點匹配求解相機內外參數和三維空間點的位置,也就是稀疏點雲(一堆點),之後再讓它濃一點,變成連續的,再加點顏色和紋理,data flow大致是:

技術分享圖片技術分享圖片

當然做到dense點雲的話看起來就比較逼真了,想把點連起來變成連續多邊形網格(也就是表面)再加上紋理信息,就是可以各種玩的3D模型了。商業軟件很多了,上面已經有一些不錯的例子,Pix4Dmapper是一款專門用於無人機航拍圖像重建的產品,效率質量驚人,當然用於地面場景應用也是可以的。如果不怕麻煩的話,這裏主要介紹一些research的例子:

SfM:大家比較熟悉的就是Changchang Wu的 VisualSFM 啦,這是個寫的比較溜的非開源福利,Changchang大神一致不公開源碼,是他一行行累出來的作品,其中的SiftGPU和PBA也是大神的作品。我也算用過一些不同的SfM代碼,各路大神寫的,包括一些大牛組的,講良心VSFM算是我見過魯棒性最好的 之一(嚴謹臉),極少出現數據量太大、數據質量(各種因素blabla)差造成的崩、卡、完、“就是沒結果”之類,雖說已有歲月包漿,但其精度和穩定性值得信賴的。非說槽點的話,也就是圖像匹配和BA的效率不高,各種改進此處略去,如果只是用一下的話還是包您滿意的。還有MVE、 OpenMVG (openMVG/openMVGCOLMAP(COLMAP - Structure-From-Motion and Multi-View Stereo),現在的框架都必須追求全面,所以稍微看下主頁就會發現MVS等功能都是打包的。(bundler還是要說的,但是用起來稍微麻煩,不推薦上手玩)

MVS:PMVS、CMVS,CMPMVS,以及OpenMVS,各種dense層出不窮,本人代碼能力有限,對於這塊還是望而生畏的(順吐一下,還是不要去自己編譯OpenMVS了。。可能新版本已改觀,未求證)。OpenMVS效果還是很贊的,雖說時常出現莫名的罷工,自帶了VSFM和OpenMVG的接口,貼心。

SR和TM:CV,CG,CCTV,好吧,其實OpenMVS都有啦,請自行觀看cdcseacave/openMVS。

另外,想自己翻來覆去把玩結果的話,Meshlab是很好的。

VisualSfM——OpenMVS,是一套比較簡潔的方案,也可以把OpenMVS替換成CMPMVS。另外做重建數據是非常重要的,自己拍的話請盡量量大出奇跡,多一點視角,保證每次拍照位置的距離合適(基 線),實在懶的話就上視頻了,找個軟件或者自己opencv弄成幀再餵進去(感興趣的話opencv和matlab也可以自己寫重建算法,有高質量庫和工程,例如普林的SfM相關課程)。一次拍的不好,可以多拍幾次,看下哪裏空洞補哪裏,新數據加進去再跑一次就好(特征點檢測匹配等中間結果慎刪)。

想更多了解原理,推薦一本經典教材,《計算機視覺中的多視圖幾何》(Multiple View Geometry in Computer Vision),超級經典,反正我是沒好好讀完過。

自己從圖片一步步重建出逼真的model是一件很爽的事情,像創世一般,比如幾天重建個羅馬,幾天重建個世界啥的。

[摘抄] SFM 和 Visual SLAM