KinectFusion 介紹


原文鏈接

KinectFusion簡介

KinectFusion是微軟在2011年發表的一篇論文里提到的點雲重建的方法,論文題目是:KinectFusion: Real-Time Dense Surface Mapping and Tracking。點雲是用Kinect采集的,然后算法把這些點雲注冊對齊,融合成一個整體點雲。

Kinect是一個RGBD掃描儀,它可以同時采集彩色圖像和深度圖像。這是第一代Kinect和第二代Kinect的外觀比較。

kinect

Kienct每秒可以獲取30幀的RGBD圖像,光線暗的情況下幀率會下降一些。

這是一個典型的KinectV2的數據。左邊是帶顏色的點雲,右邊的點雲去掉了顏色,並且計算了法線信息。KinectFusion處理的是深度數據,像右邊這種沒有帶顏色的點雲。Kinect數據的詳細介紹可以參考專題 Kinect數據

kinectv2_data.jpg

KinectFusion的核心有兩個技術,一個是ICP注冊,一個是符號距離函數。它的思路是一邊注冊,一邊融合。由於是深度視頻,幀與幀之間的位置差別不大,點雲可以看作是初始注冊好的,所以可以直接應用ICP進行精細注冊。融合采用了符號距離函數技術,它在空間中定義了一個曲面的距離場,0等值面則為測量的曲面。


KinectFusion算法

下面介紹一下KinectFusion的算法步驟:

1. 生成三維點雲:Kinect采集的原始數據是深度圖像,可以用KinectSDK把深度圖像轉化為三維點雲。

2. 點雲預處理:預處理包含很多可選的算子,比如法線計算,點雲范圍裁剪(有些掃描儀在一定范圍內的誤差是可以接受的,故可以剔除掉誤差范圍大的區域),去噪(低精度的掃描數據可以去噪提高注冊穩定性),邊界點剔除(邊界點的誤差通常很大),孤立項剔除(孤立項的誤差通常也很大)等。

3. 點雲位姿估計:KinectFusion是一邊注冊,一邊融合,所以它會維護一個當前融合的整體點雲,記為PointCloud。新掃描的點雲Depth,就是與PointCloud進行ICP注冊。ICP注冊的詳細介紹可以參考專題 點雲ICP注冊

4. 點雲融合:Depth與PointCloud注冊好以后,它會與PointCloud再進行融合,更新PointCloud。

5. 整個掃描過程,每幀的點雲重復步驟1-4,最后就得到一個整體點雲PointCloud。


符號距離場函數(Signed Distance Function)

符號距離場函數,簡稱SDF,源自1996的一篇Siggraph論文:A volumetric method for building complex models from range images

SDF是定義在三維空間中的一個函數,它度量了空間點到曲面的距離。距離為0的點即為曲面上的點。我們把SDF離散化,定義在空間體素上。每個體素有三個變量:D,W,Flag。其中D為體素到曲面的距離值,W是權重,Flag是體素是否有效。

下面介紹點雲如何融入SDF:點雲是相機在某個視角下觀察采集到的,如左圖所示。單從一個視線觀測一點來分析,如右圖所示,這個視線上的點到曲面的距離可以定義如下,視線方向上,觀測點前面的距離為負,觀測點后面的距離為正。由於SDF是定義在空間中的體素里,我們這里也把距離離散化到體素里,其中d是體素寬度。由於系統誤差的存在,我們給這些體素值一個權重,越靠近點雲的體素權重越大。

sdf_des2sdf_des3

點雲注冊后,不斷的往SDF里進行融合更新,最后把SDF的0等值面提取出來,就是融合的點雲了。

SDF把點雲通過距離函數的形式,離散化到空間體素里。而它的精髓在於給距離函數定義了一個范圍,這個范圍使得距離函數有了一定程度的光滑性。因為Kinect數據精度是很低的,兩次觀測的點雲,會有很大的誤差,如圖所示。多個點雲融合在一起,如何達到平均的效果,就是通過平均距離函數來實現的。我們知道,光滑函數的疊加,也是一個光滑函數。所以,每個距離函數光滑化以后,使得融合后的距離函數也是光滑的。而這個光滑性,就使得融合點雲是光滑的,並且一定程度上能消掉點雲重影。

sdf_des


KinectFusion算法分析

下面點評一下KinectFusion算法:

  • KienctFusion屬於SLAM前端,高質量的點雲重建還需要加入后端全局優化
  • KienctFusion注冊時采用了Frame-to-Model的方式,也就是采集的點雲與SDF融合的點雲進行注冊。有時候也可以用Frame-to-Frame的方式,也就是點雲與前幀點雲進行注冊。這樣速度可以更快一些。
  • 點雲注冊只應用了深度圖像,這個算是一個優點,比如有些場景下只有深度數據。有些時候,掃描對象的幾何特征不明顯,如果能借助彩色圖像的輔助,點雲注冊可以更加的穩定。
  • 點雲融合的時候,KinectFusion采用了SDF技術,它擅長融合低精度數據,但是開銷還是比較大的。可以采用一些性能高的融合方法來替換SDF。
  • 原論文里面采用了GPU加速來達到實時。根據現在的CPU性能,其實是不用GPU輔助就能達到實時的。
  • KinectFusion算是三維SLAM前端的一個開始,之后出現了大量的三維SLAM前端方案,都是解決一些實際的問題,比如采集數據的質量差;掃描對象的特征不明顯,這個特征包括幾何特征和顏色特征;大數據量導致的質量和性能的平衡;多傳感器的融合;面向移動設備的處理等。

有興趣的讀者,歡迎參考視頻版本


免責聲明!

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



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