三维重建:SLAM的尺度和方法论问题
??????? 百度百科的定義。此文引用了其他博客的一些圖像,如有侵權,郵件聯系刪除。作為算法的SLAM,被稱為同步相機位姿確定和地圖構建。作為一個工程的SLAM,有眾多的算法。
??????? 在計算機視覺中, 三維重建是指根據單視圖或者多視圖的圖像重建三維信息的過程. 由于單視頻的信息不完全,因此三維重建需要利用經驗知識.。而多視圖的三維重建(類似人的雙目定位)相對比較容易, 其方法是先對攝像機進行標定, 即計算出攝像機的圖象坐標系與世界坐標系的關系.然后利用多個二維圖象中的信息重建出三維信息。
????? ? 預讀:三維重建:SLAM的粒度和工程化問題? 。三維重建根據時間和場景的尺度不同需要引入不同的框架和優化方法:
?
1. 對于小型物體建模
??????? 小型物體建??墒褂孟鄼C固定的包圍設備,直接得到整個三維CAD模型(甚至可以使用類似于硬件級別的光線分析的方法)。
??????? 此外,使用KinectFusion的經典深度圖像獲取設備,也可使用此類通用雙目相機完成物體重建的方法,同時此方法也適用于小型場景重建。
??????? 框架1 = 幾幀單幅深度圖像 /+? 簡單圖像拼接(ICP算法族或者簡單三角/極線測量/視差算法);
????
????????????????? 百科:三維掃描儀
????框架2 = 多幀單幅深度圖像 + 相機位姿剛性變換(VO視覺里程算法族)+多個深度圖像拼接(ICP+TSDF(Truncated Signed Distance Function)的方法族或者Surfel方法);
??? 關鍵元素:VO算法族、ICP算法族、TSDF方法或者Surfel方法。
??? Change:序列圖像計算VO、使用ICP方法或者Surfel方法。Kinect方法使用TSDF網格方法,而ElasticFusion使用surfel表面方法。Kinect方法使用ICP獲取VO,ElasticFusion可以在VO中斷時使用surfel表面重新計算VO。
?
2. 相機移動的小型場景
? ?? 2.1. 像素級別: ? 使用KinectFusion的經典方法,也可使用通用雙目相機,完成小型場景像素級別重建。使用框架2.
???? 2.2. 特征點級別: ? 特征點級別重建,三維重建問題轉化為經典的SLAM問題。引入經典的SLAM的方法——濾波方法 和 對應的地圖表示的另一種方式拓撲地圖。
?
單目相機:
???? ? ? 框架3 = 多幀二維圖像 + 特征點檢測算法+ 特征點深度計算/相機位姿剛性變換(ICP/PNP算法)+ 濾波方法(EKF等框架(運動模型+觀測模型))+ ANN/RANSAC/ICP/......;
??? 關鍵元素:特征點檢測、特征點匹配(ANN近鄰方法)、PNP算法(三維位姿計算)、濾波方法族、RANSAC算法。
????? ?? Change:(1)基于特征點引入特征提取和特征點模式識別方法,分別為特征點檢測算法族 和近鄰搜索方法族。
??????????????????????? (2)基于特征點的三維位姿計算,引入PNP算法族。
??????????????????????? (3)基于濾波框架,線性濾波方法族,用于同時優化相機和特征點剛性變換的誤差和協方差方程。
雙目相機:
??????? 使用雙目相機的優勢在于可獲得標準的相機基線,得到空間的絕對尺度,并同時可根據固有視差算法得到特征點的深度信息。可以使用三維稀疏重建的方法。
???????框架4= 多幀成對三維圖像 + 特征點檢測算法/視差計算算法(特征點深度計算)+ 相機位姿剛性變換(ICP算法)+ RANSAC/ICP/......;
??? 關鍵元素:視差方法(深度計算)、稀疏匹配(RANSAC、ICP方法族)。
??????? Change:(1)深度計算:使用視差算法 Vs.? PNP算法。
???????????????????????(2)位姿剛性變換變換到ICP算法族。
???????????????????????? 注意:深度計算之后,整體框架類似于KinectFusion方法,區別在于點集變得稀疏,因此稠密點匹配算法替換為稀疏點匹配算法(ANN方法族)。
?
3. 相機移動的中型場景
????? 3.1. 像素級別:? 正如上一篇所說的,是一個大型工程問題,不是一個算法和框架可以描述的,需要更多設備和人的配合。大型場景重建一般使用表面模型,再次不再對其進行多加描述。
??? ? 3.2. 特征點級別: ?
??????????? 特征點級別重建,在可得到序列結構的VO之后,經典的SLAM的方法為濾波方法,為基于最大似然框架。而添加閉環檢測之后,借鑒SFM思想的平差方法--捆集優化BA(Bundle Adjustment)引入到SLAM中來,因此形成了另一種框架。
??????????框架5= 多幀二維/三維圖像 +特征點檢測算法+ 特征點深度計算/相機位姿剛性變換(PNP算法)+BA方法(關鍵幀平差方法)+ ANN/RANSAC/ICP/......+ 閉環檢測(場景匹配/識別方法族);
? ?? 關鍵元素:BA方法(圖優化方法等)、閉環檢測(點集組合場景檢測)。
?
??????? Change:(1)類似于框架3,位姿和場景同時優化的方法從濾波框架轉換到BA框架,引入關鍵幀平差方法。
??????????????????????? (2)基于BA方法,使用關鍵幀,形式化為無向圖,一般使用圖優化方法。常用的基礎庫為G2O。
??????????????????????? (3)引入閉環檢測,需要使用場景匹配方法(基于特征點),經典方法為使用BOW模型。
?
4. 相機長期移動的大中型場景
??? ? ? 特征點和目標級別: ? 大型場景需要構建大型地圖,應對長期誤差累計而發展的方法閉環檢測重要性增加。對此,閉環檢測引入目標識別,進而引入基于目標檢測的場景識別,更名為語義SLAM。
??????? 語義SLAM:大型場景重建,已走過重復地標記-閉環檢測占據更多的分量,場景識別更關注語義分析。
????????框架6= 多幀二維/三維圖像 + 特征點檢測算法+ 特征點深度計算/相機位姿剛性變換(PNP算法)+目標檢測(目標檢測方法族)+目標識別(目標識別方法族) + BA方法(關鍵幀平差方法)+ ANN/RANSAC/ICP/......+ 閉環檢測(基于特征點的閉環檢測+基于目標的閉環檢測+場景檢測);
??? 關鍵元素:目標檢測(目標特征提取與目標識別)、場景檢測標記(基于目標)。
??????? Change:(1)基于框架5或者進行改進,引入基于目標的特征提取方法(目標提取)族和模式識別方法(目標識別)族。由此根據不同的場景需要使用不同的目標檢測的通用方法。由此一大批模式識別方法融入SLAM過程,從簡單的ANN,到MSVM,到DNN方法。
???????????????????????(2)閉環檢測之中增加基于目標的閉環檢測,和場景識別。場景檢測從BOG模型到基于圖的場景識別模型,也可以使用DNN方法中CNN方法。
?????????????????????? (3)......................................。
??????? 參考文章:場景圖像的稀疏表示總結
?
總結:
?????? ? 三維重建是一個工程問題,發展到三維場景重建,SLAM問題及應對方法相應而生。經典可用的SLAM方法為把SLAM問題轉化為濾波方法,是一個真正可用的解決SLAM問題的方法。而后BA方法出現,并隨著計算機計算能力的提高,BA方法逐漸應用于SLAM過程。更寬范圍的SLAM方法引入目標識別,模式識別的方法(從ANN到MSVM到CNN)引入SLAM,成為語義SLAM,把SLAM發展為“一切問題都可以用模式識別方法來解決”的巨坑。
?
后記:紅酒塔問題
??????? 三維重建里面有一個紅酒塔問題,即是怎樣使用重建算法重建出波光閃閃的透明玻璃杯紅酒塔。
??????? 其實,紅酒塔問題不應該是一個重建問題,從人的感知角度分析,紅酒塔也是不能只是靠雙目重建的,而其本質是目標識別。識別紅酒塔,然后使用模型匹配進行模型補完,重建整個紅酒塔,是一個識別之后alignment的過程。
?
參考:
1. 雙目相機-ElasticFusion是三維重建領域效果比較顯著的開源庫,其作者為Facebook Reality Labs的Thomas Whelan博士。ElasticFusion的github源碼主頁:https://github.com/mp3guy/ElasticFusion.git。小品文:ElasticFusion解釋;
2.雙目相機-KinectFusion是微軟亞研院開源的一個室內深度場景重建算法,ICRA2011論文:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/kinectfusion-uist-comp.pdf; 小品文:深度相機方案對比-KinectFusion的基本原理(尺度)。
3.單目相機-EKF-SLAM方法是經典的稀疏場景重建方法,小品文:SLAM: Inverse Depth Parametrization for Monocular SALM。EKF在GitHub下載。
4.OrbSLAM工程化良好,成為一個流行的稀疏重建框架,并應用到不同的場景中。小品文:ROS:ubuntuKylin17.04-Ros使用OrbSLAM2。GitHub下載OrbSLAM2。
5.SemanticFusion,結合了CNN方法的重建方法,在數據關聯時使用CNN方法。ICRA2017論文,SemanticFusion: Dense 3D Semantic Mapping with Convolutional Neural Networks。論文解析:ElasticFusion解析。SemanticFusion開源代碼依賴ElasticFusion和Caffe-CNN,使用方法:Ubuntu16使用SemanticFusion
6.VINS-Fusion,視覺慣性單目系統,香港中文大學的開源代碼:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion。不依賴ROS的VINS代碼:安裝使用VINS。
總結
以上是生活随笔為你收集整理的三维重建:SLAM的尺度和方法论问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三维重建:SLAM的粒度和工程化问题
- 下一篇: 紫菜饭团的做法