三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
???????? KinectFusion算法原理依據2011年發表的Fusion重建的論文,主要重建方法為TSDF算法,并在GitHub上開源了相關代碼,可以直接編譯使用。Github: https://github.com/topics/kinect-fusion
??????? 論文:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/kinectfusion-uist-comp.pdf;
??????? 算法原理請參考此譯文:? kinect fusion 3D重建基本算法-http://log.csdn.net/xiaohu50/article/details/51592503?????
???????? 三維重建為三維空間實體建立適合計算機表示和處理的三維數學模型,建立一個相對于真實三維世界坐標系的計算機世界坐標系中的三維映射模型。
????? ?? 三維重建的關鍵因素為尺度(點的鄰域覆蓋單位)、相對位置(剛體物體的體元相對位置及位置映射)、原點位置/初始化位置 很重要。
???????? 對于尺度問題,通常有兩種解決方法。第一種,直接得到實體到計算機世界坐標系的絕對映射關系,這就需要一個固定的位置映射系統,比如一個多個單目相機固定的攝影臺,或者一個可以運動的雙目攝像機。第二種,直接使用單目相機,使用特征配準或者位置點優化的方法,構建稀疏點集,進而構建模型,此種方法稱為SLAM。
???? ? ? 使用多目或者雙目攝像機系統的系統,關鍵點在于表面重建,局部的表面重建遞進完成可以構建最終的完整表面;使用單目相機關鍵在于稀疏點的構建,尋找表面的顯著點,構建一個物體的完整網格,再次通過補全網格的方法構建模型。
?
一、絕對尺度
???????? 獲得絕對尺度對于模型三維重建是非必須的,但對于一個擴展的三維重建應用在某些方面是必須的,比如希望與真實環境交互的移動機器人(掃地機器人、無人機、無人潛艇)。
???????? 多目系統可以根據固定的相機位置獲取計算機世界中的度量單位代表的真實世界尺度,雙目相機也可以根據雙目的基線獲得此意義。單目相機是怎么樣得到這個真實尺度的呢?通過相機的內參——焦距的定義。
???????? 尺度的獲取方式:多目和深度相機可以直接根據得到的深度值,進而由透視關系得到絕對尺度。對于單目相機,必須完成整個稀疏構建過程才能得到相對精確的深度,只有完成整個SLAM過程,才能得到真實尺度。
?
二、相對位置
??????? 相對位置的獲取為表面重建問題,可分為稀疏表面重建和稠密重建。
??????? SFM使用稀疏重建,需要檢測特征:No explicit feature detectionUnlike structure from mo-tion (SfM) systems (e.g. [15]) or RGB plus depth (RGBD)techniques (e.g. [12,13]), which need to robustly and con-tinuously detect sparse scene features, our approach to cam-era tracking avoids an explicit detection step, and directlyworks on the full depth maps acquired from the Kinect sen-sor. Our system also avoids the reliance on RGB (used inrecent Kinect RGBD systems e.g. [12]) allowing use in in-door spaces with variable lighting conditions.
??????? 深度相機根據雙目視差原理等直接獲得三維表面,這個表面是透視畸變的,可以通過透視校正的方法進行標準化補償,得到 確定 面元,這就做到了表面重建的第一步。再經過一系列處理,最后通過ICP方法等逐幀稠密匹配的方法,可以迭代構建整個三維模型。
?????? Kinect 關鍵點:High-quality reconstruction of geometryA core goal ofour work is to capture detailed (ordense) 3D models ofthe real scene. Many SLAM systems (e.g. [15]) focuson real-time tracking, usingsparsemaps for localizationrather than reconstruction. Others have used simple point-based representations (such as surfels [12] or aligned point-clouds [13]) for reconstruction. KinectFusion goes beyondthese point-based representations by reconstructingsurfaces,which more accurately approximate real-world geometry。
??????? 單目相機對于稠密匹配在算法的設計代價上是得不償失的,而對于稀疏構建是合適的。而尺度的未知和深度的未知即是 地圖構建和相機同步定位 對于稀疏構建則是必須同時進行的,這就是常見的SLAM問題。
??????? KinectFusion流程:點云獲取(2D轉3D,由硬件計算得到)、預處理(降噪、濾波-保邊?去除或者保留超斜面?密度濾波)、相機追蹤(GPU分布式的ICP算法)、密集重建(TSDF算法,即截斷SDF算法,把相機坐標系的點云統一到世界坐標系)、顯示結果(RGB綁定和表面渲染、構建出表面)。
??????? 參考:各種SDF算法 projective TSDF/TSDF/flipped TSDF-比較;Kinect重建的精度嚴重依賴于TSDF的一些參數,比如截斷距離的閾值。
?
三、原點位置
??????? 坐標系原點位置,是在三維表面重建時附帶的一個小的問題,計算機數據世界坐標系的原點位置確定與否代表了不同的構建方案。
VS2013編譯PCL1.8.0 還是失敗了,沒有編譯成功,修改為KinectFusion的文章吧
?????? VS2013社區版對個人開發者免費,終于可以不用該死的盜版了。Win10科技預覽版X64系統開發版本下載,與Vs2013可以完美融合。
??????? PCL的源代碼版本已經進化到1.8.0,不知道增加了多少新特性,還是拿來編譯一下試一試。對于VS2012無法編譯PCL1.7.2的問題,原因是OpenNI不支持1600以上數字的編譯器,即最高支持到VC10。
?????? 以下是注意事項:
?????? 1. OpenNI:
?????????? 關于OpenNI的支持問題,把OpenNI 的包含文件 xxxxxGrab.h里面的 if ...>1600去掉,編譯會完美通過;
?????? 2.Boost:
????????? 關于Boost的使用問題,Boost不支持CMAKE編譯,支持VC12的最低版本為1.5.6.0,GIT有完整的Win二進制安裝包;
?????? 3.VTK:
?????????? 關于VTK的問題,使用罪行版本的VTK6.1,注意 源碼里面的一個錯誤 :在58行處找到 宏定義 ,轉到聲明處, 補全定義數字 ,我補全的為 8;
<del> 118> Build all projects========== Build: 118 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========</del>?????? 4.CMAKE:
?????????? 關于CMAKE,使用CMAKE3.0以上,添加了對VC12的支持。
?
四、深度相機方案對比:
?????? 文章鏈接:深度相機-三種方案對比(結構光、雙目、TOF);文章鏈接:深度相機-TOF總結? ;
RGB-D方案對比:
關鍵技術規格:
???? 1.檢測范圍;2.檢測精度;3.檢測角度;4.幀率。
???? 5.模塊大小;? 6.功耗
目前主流的深度攝像頭方案在檢測距離上、精度、檢測速度上相差不大,區別在于:
????? 1、結構光方案優勢在于技術成熟,深度圖像分辨率可以做得比較高,但容易受光照影響,室外環境基本不能使用;
????? 2、TOF方案抗干擾性能好,視角更寬,不足是深度圖像分辨率較低,做一些簡單避障和視覺導航可以用,不適合高精度場合。受環境影響小,傳感器芯片并不成熟,成本很高,實現量產困難。
?????? 3、雙目方案,成本相對前面兩種方案最低,但是深度信息依賴純軟件算法得出,此算法復雜度高,難度很大,處理芯片需要很高的計算性能,同時它也繼承了普通RGB攝像頭的缺點:在昏暗環境下以及特征不明顯的情況下并不適用。
雙目RGB、結構光、TOF三種主流技術的詳細的比較:
| 基礎原理 | 雙目匹配,三角測量 | 激光散斑編碼 | 反射時差 |
| 分辨率 | 中高 | 中 | 低 |
| 精度 | 中 | 中高 | 中 |
| 幀率 | 低 | 中 | 高 |
| 抗光照(原理角度) | 高 | 低 | 中 |
| 硬件成本 | 低 | 中 | 高 |
| 算法開發難度 | 高 | 中 | 低 |
| 內外參標定 | 需要 | 需要 | ? |
| ? | ? | ? | ? |
總結:
?????? 1.雙目方案,最大的問題在于實現算法需要很高的計算資源,導致實時性很差,而且基本跟分辨率,檢測精度掛鉤。也就是說,分辨率越高,要求精度越高,則計算越復雜,同時,純雙目方案受光照,物體紋理性質影響。
?????? 2.結構光方案,目的就是為了解決雙目中匹配算法的復雜度和魯棒性問題而提出,該方案解決了大多數環境下雙目的上述問題。但是,在強光下,結構光核心技術激光散斑會被淹沒。因此,不合適室外。同時,在長時間監控方面,激光發射設備容易壞,重新換設備后,需要重新標定。
?????? 3.TOF方案,傳感器技術不是很成熟,因此,分辨率較低,成本高,但由于其原理與另外兩種完全不同,實時性高,不需要額外增加計算資源,幾乎無算法開發工作量,是未來。
?
總結
以上是生活随笔為你收集整理的三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3个步骤让您轻松配置路由器-3个步骤让您
- 下一篇: ***快速理解Docker - 容器级虚