1. 程式人生 > >KinectFusion演算法原理解析

KinectFusion演算法原理解析

最近的一個專案設計三維重建,資金有限就採用了Kinect的方案,研究了一下其核心的KinectFusion演算法。網上講得好的基本上是英文資料,不方便廣大英語水平一般的國內開發者,這裡我不才簡要的翻譯一些關鍵的地方加上了一點個人的理解

主要原理

KinectFusion演算法僅使用深度資訊,通過設計高效及高度並行的演算法在 GPU(圖形處理單元)上執行達到了非常高的實時性,在試驗中,在配置 4000 元左右的電腦上執行速度達到了 18 幀/秒,在進行場景建立時有良好的使用者體驗,甚至可以用來做一些人機互動方面的應用。同時 KinectFusion 採用了基於 TSDF( truncated signed distance function)模型的點雲融合方法,構建的點雲模型冗餘點少。


KinectFusion演算法通過將Kinect採集到的深度資料進行匹配定位於融合來實現3D場景重構。它的演算法流程如圖3所示,主要由4個部分組成 :
A ) 深度資料處理,是將感測器原始的深度資料轉換成3D點雲,得到點雲中頂點的3維座標和法向量;
B ) 相機跟蹤:將當前幀3D點雲和由現有模型生成的預測的3D點雲進行ICP匹配,計算得到當前幀相機的位姿
C ) 點雲融合:根據所計算出的當前相機位姿,使用TSDF點雲融合演算法將當前幀的3D點雲融合到現有模型中。
D ) 場景渲染:是使用光線跟蹤的方法,根據現有模型和當前相機位姿預測出當前相機觀察到的環境點雲,一方面用於反饋給使用者,另一方面提供給b進行ICP匹配。

KinectFusion中的ICP定位方法

ICP定位環節將當前幀3D點雲和預測得到的3D點雲進行匹配時,由以下步驟來實現:
A: 將原始的深度影象轉化為相機座標系中三維頂點和法線;利用投影法來確定對應點關係,用一個二維ICP來表示其過程,相機在連續兩個位置分別對其進行取樣和預測,假設O2和O1分別是當前相機和前一幀相機的座標系原點。首先將k2和k1時刻的兩個點雲都轉換到當前幀k2的相機座標下,然後將兩個點雲通過相機中心O2向像平面上投影,兩個點雲中具有相同的像平面上的投影點的點即為對應的點,演算法中還通過對應點之間的歐式距離和法向量夾角來對對應點進行篩選。
B:相 機 追 蹤, 使 用 基於 GPU 實 現 的ICP 算 法, 配 準 當 前 幀 和 上 一 幀 資料, 得到當前 的 Kinect相 機 姿 態( 位 置 和 方 向);利用點到平面的誤差機制來衡量當前相對位姿的準確度。在二維情況下點與點之間的誤差為它們之間的切線距離。通過優化後得到相對位姿。
C:立方體融合, 已知當 前 的 相 機 姿 態, 則 可 以 將當前得到的頂點轉化到全域性座標 系 中, 並 更 新 相 應小立方體( 體素) 的數值;採用線性化的方法將優化問題轉化為一個最小二乘優化,通過計算一個線性方程組來計算最優解,迭代A-B十次。
D:光線投射,對立方體進行光線投射, 得到立方體渲染的視覺化影象。移動的Kinect會 從 細 微 變 化 的 不 同 視 角 去 看 一 個 表面, 任何在原始Kinect影象中看不到的孔洞都會被填充, 立方體中的資料也會被不斷改善。

KinectFusion中的TSDF點雲融合演算法

TSDF演算法用一個立方體珊格來表示三維空間,立方體中每一個柵格存放的是該柵格到物體模型表面的距離,同時用正負來表示表面被遮擋一側和可見一側,而過零點就是表面上的點,這種方法是具有最小二乘優化性質的,同時使用了權重值來進行融合,對一些感測器的噪聲具有一定的抑制作用。

KinectFusion 演算法的兩個問題分析

ICP 定位失效問題.當環境主要由平行平面構成時,在建模過程中經常會出現相機視野範圍內的環境空間限制不全面,這時 KinectFusion 中的ICP 演算法會失效,進而導致整個建模過程的中斷。例如當前視野中的主要部分是地面和牆面以及與牆面平行的平面,這種場景將導致相對位姿中平行於牆面和地面的運動分量無法正確估算。如果環境中僅有一條直線,相機移動一段距離進行了兩次取樣。ICP 的方法首先找到對應點然後計算點到切面的距離誤差這時所有對應點的誤差均為 0,第一次迭代後 ICP 就結束這樣 ICP 定位就失效了。
累積誤差問題。在不斷建立新場景時累積誤差比較嚴重.雖然 KinectFusion 演算法將當前點雲與模型中預測的點雲進行匹配定位,所以在對同一個環境進行重複建模時不會出現累積誤差無限增加的情況,但是在建立新環境時累積誤差依然存在。在建立的點雲中可以看到建立得到的地面和牆面不是一個平面,有明顯的累積誤差.對於一些人機互動應用來說,這不是一個很大問題,但是用於機器人定位導航中卻是關鍵的問題。

相關推薦

KinectFusion演算法原理解析

最近的一個專案設計三維重建,資金有限就採用了Kinect的方案,研究了一下其核心的KinectFusion演算法。網上講得好的基本上是英文資料,不方便廣大英語水平一般的國內開發者,這裡我不才簡要的翻譯一

機器學習演算法原理解析——整合

1. 整合學習(Ensemble learning) 基本思想:讓機器學習效果更好,如果單個分類器表現的很好,那麼為什麼不適用多個分類器呢? 通過整合學習可以提高整體的泛化能力,但是這種提高是有條件的: (1)分類器之間應該有差異性; (2)每個分類器的精度必須大於0.5; 如

轉:機器學習演算法原理解析 - 分類

轉:http://www.cnblogs.com/swordfall/p/9517988.html 常見分類模型與演算法 距離判別法,即最近鄰演算法KNN; 貝葉斯分類器; 線性判別法,即邏輯迴歸演算法; 決策樹; 支援向量機; 神經網路; 1. KNN分類演算法

今日頭條推薦演算法原理解析

今日頭條的內容主要來源於兩部分,一是具有成熟內容生產能力的PGC平臺,一是UGC使用者內容,如問答、使用者評論、微頭條。這兩部分內容需要通過統一的稽核機制。如果是數量相對少的PGC內容,會直接進行風險稽核,沒有問題會大範圍推薦。UGC內容需要經過一個風險模型的過濾,有問題的會進入二次風險稽核。稽核通過後,內容

二叉搜尋樹(BST)的刪除演算法原理解析

二叉搜尋樹的刪除演算法主要分兩種情況: 1、要刪除的節點只有一個孩子(左孩子或右孩子),這種情況比較簡單,只需要將該孩子連線到當前節點的父節點即可。 下面重點講講第二種情況: 2、第二種情況便是要刪

MySql索引演算法原理解析(通俗易懂,只講B-tree)

 剛開始學習的時候,百度去查,但發現好多說得太複雜不好理解,結合各個文章總結一下(建議大概看文字,不理解不要緊,然後再看圖的執行步驟然後在結合文字,這樣一切就清晰好多)     B-tree,B是balance,一般用於資料庫的索引。使用B-tree結構可以顯著減少定位記錄

索引演算法原理解析(B-tree以及磁碟儲存原理)

剛開始學習的時候,百度去查,但發現好多說得太複雜不好理解,結合各個文章總結一下(建議大概看文字,不理解不要緊,然後再看圖的執行步驟然後在結合文字,這樣一切就清晰好多) B-tree,B是balance,一般用於資料庫的索引。使用B-tree結構可以顯著減少定位記錄時所經

非常詳細的sift演算法原理解析

尺度不變特徵變換匹配演算法詳解 Scale Invariant Feature Transform(SIFT) Just For Fun 對於初學者,從David G.Lowe的論文到實現,有許多鴻溝,本文幫你跨越。 1、SIFT綜述 尺度不變特徵轉換(Scale

LRU演算法原理解析

LRU是Least Recently Used的縮寫,即最近最少使用,常用於頁面置換演算法,是為虛擬頁式儲存管理服務的。 現代作業系統提供了一種對主存的抽象概念虛擬記憶體,來對主存進行更好地管理。他將主存看成是一個儲存在磁碟上的地址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在主存和磁碟之間來回傳送

K近鄰演算法(KNN)原理解析及python實現程式碼

KNN演算法是一個有監督的演算法,也就是樣本是有標籤的。KNN可以用於分類,也可以用於迴歸。這裡主要講knn在分類上的原理。KNN的原理很簡單:            放入一個待分類的樣本,使用者指定k的大小,然後計算所有訓練樣本與該樣

排序演算法: 三大中級排序演算法原理解析及用法

三大中級演算法 難度 ★★ 演算法複雜度O(nlogn) 一般情況下排序時間: 快速排序< 歸併排序 < 堆排序 快速排序: 缺點極端情況下效率低 堆排序: 缺點在快的排序演算法中相對慢 歸併排序: 缺點要有額外記憶體空間 快速

演算法---hash演算法原理(java中HashMap底層實現原理和原始碼解析)

散列表(Hash table,也叫雜湊表),是依據關鍵碼值(Key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。  比如我們要儲存八十八個資料,我們為他申請了100個

MLlib中決策樹演算法的實現原理解析

決策樹作為一種分類迴歸演算法,在處理非線性、特徵值缺少的資料方面有很多的優勢,能夠處理不相干的特徵,並且對分類的結果通過樹的方式有比較清晰的結構解釋,但是容易過擬合,針對這個問題,可以採取對樹進行剪枝的方式,還有一些融合整合的解決方案,比如隨機森林RandomForest

【特徵匹配】RANSAC演算法原理與原始碼解析

轉載請註明出處:http://blog.csdn.net/luoshixian099/article/details/50217655 勿在浮沙築高臺   隨機抽樣一致性(RANSAC)演算法,可以在一組包含“外點”的資料集中,採用不斷迭代的方法,尋找最優引數模型,不符合最

ViBe演算法原理和程式碼解析

ViBe - a powerful technique for background detection and subtraction in video sequences 描述 ViB

解析TF-IDF演算法原理:關鍵詞提取,自動摘要,文字相似度計算

Abstract:TF-IDF演算法是一種常用的詞頻統計方法,常被用於關鍵詞提取、文字摘要、文章相似度計算等。 TF-IDF的演算法思路 TF詞頻(Text Frequency):統計出現次數最多的詞 IDF逆文件頻率(Inverse Document Frequ

URL短地址壓縮演算法 微博短地址原理解析 (Java實現)

       最近,專案中需要用到短網址(ShortUrl)的演算法,於是在網上搜索一番,發現有C#的演算法,有.Net的演算法,有PHP的演算法,就是沒有找到Java版的短網址(ShortUrl)的演算法,很是鬱悶。同時還發現有不少網友在發帖求助,怎麼實現Java版的短網址

Apriori演算法基本概念以及原理解析

Apriori演算法中幾個重要的概念 A—>B: 支援度: P(A^B) 表示A和B同時發生時的概率,沒有先後順序。 可信度或置信度: P(B|A) 表示A發生時,B發生的概率,有先後順序。 P(B|A) = P(A^B)/P(A)

[Architect] Abp 框架原理解析(5) UnitOfWork

框架 方法 src options nalu res actions cnblogs 一個數 本節目錄 介紹 分析Abp源碼 實現UOW 介紹 UOW(全稱UnitOfWork)是指工作單元. 在Abp中,工作單元對於倉儲和應用服務方法默認開啟。並在一次請求中,共享

angularjs工作原理解析

body oot 分隔 復制 抖動 修改 重新 接收 裏的 個人覺得,要很好的理解AngularJS的運行機制,才能盡可能避免掉到坑裏面去。在這篇文章中,我將根據網上的資料和自己的理解對AngularJS的在啟動後,每一步都做了些什麽,做一個比較清楚詳細的解析。 首