Kinect Fusion 的處理流程 工作原理

2021-07-23 00:06:21 字數 1652 閱讀 5518

kinect fusion 通過對從多個角度獲取到的深度影像資料進行融合,來重建物體的單幀

光滑表面模型。當感測器移動的時候,照相機的位置以及姿勢資訊被記錄下來,這些資訊包

括位置和朝向。 由於我們知道了每一幀影象的姿勢以及幀與幀之間的關聯, 多幀從不同角度

採集的資料能夠融合成單幀重建好的定點立方體。 我們可以想象下在空間中的乙個巨大的虛

擬立方體,裡面是我們現實世界的場景,當我們移動感測器的時候,深度資料資訊被不斷加

入。第一步是深度影像資料的轉換。sdk 將 kinect 中獲取的原始深度幀資料轉換為以公尺為

單位的浮點資料,緊接著對該資料進行優化,通過獲取攝像頭的座標資訊,將這些浮點資料

轉換為和 kinect 攝像頭朝向一致的點雲資料。這些點的表面情況通過使用

alignpointclouds 函式獲取。

第二步是計算全域性的攝像頭的姿勢資訊, 包括攝像頭的位置和朝向, 通過使用互動型的

配準演算法在攝像頭移動時不斷獲取其姿勢, 這樣系統始終知道當前攝像頭相對於起始幀時攝

像頭的相對姿勢。kinect fusion 中有兩種配準演算法。第一種叫

nuifusionalignpointclouds,他用來將從重建物件計算得來的點雲與從 kinect 深度影像

資料中獲取的點雲進行配準。 或者單獨的使用比如對同一場景的不同視場角的資料進行配準

; 第二種叫 aligndepthtoreconstruction, 該演算法在對重建立方體進行處理時能夠獲得更

高精度的追蹤結果。 但是對於場景內移動的物體該演算法可能不夠健壯。 如果場景中的追蹤被

中斷,那麼需要將攝像頭的位置和上一次的攝像頭位置對齊才能繼續進行追蹤。

第三步是將從已知姿勢攝像頭產生的深度影像資料融合為代表攝像頭視野範圍內的景

物的立方體。這種對深度資料的融合是逐幀,連續進行的,同時通過平滑演算法進行了去噪,

也處理了某些場景內的動態變化, 比如場景內新增或者移除了小的物體等。 隨著感測器的移

動從不同的視場角度觀察物體表面。 原始影像中沒有表現出來的任何隔斷或者空也會被填充

,隨著攝像頭更接近物體,通過使用新的更高精度的資料,物體表面會被持續優化

最後, 從感測器視點位置對重建立方體進行光線投射, 重建的點陣雲能夠產生渲染了的

三維重建立方體。

kinect fusion 對物體的追蹤僅僅使用 kinect 感測器產生的深度資料流。這種追蹤主

要依賴深度影像資料中不同位置深度資料有足夠的深度差異。 因此它能夠將看到的資料融合

起來以及計算感測器的不同位置差異。如果將 kinect 對準乙個平整的牆面或者又很少起伏

變化的物體,那麼追蹤可能不會成功。場景中物體分散時效果最好,所以在使用 kinect

fusion 對場景進行追蹤時如果出現追蹤失敗的情況,不防試著對場景內的物體進行追蹤。

kinect fusion 中的追蹤有兩種演算法,他們分別通過

aligndepthfloattoreconstruction 和 alignpointclouds 函式實現,他們都可以用於攝

像頭位置的追蹤,但是,如果我們使用 aligndepthfloattoreconstruction 函式來建立一

個重建立方體,可能會有更好的追蹤精度。相比,alignpointclouds 方法可以用於單獨的

,不需要重建立方體就可以將兩個點雲進行對齊。

時間的處理

dateformat format new dateformat yyyy mm dd hh mm ss date date new date date10 string date format.format date long date10 date.gettime 1000l 60l 10l d...

大數的處理

一般情況下,如果涉及到大數問題一般都會採用字元陣列來解決,在使用字元陣列時,需要注意的問題 1.首先宣告整數陣列,陣列中的每個元素都當做單獨的數字進行運算.2.陣列的初始化,根據計算型別的不同初始化操作也不同 3.每個陣列元素進行運算完畢後,必須進行進製處理,進製時原有數字與進製 a i 1 a i...

告警的處理

今天我學習了 幾個告警的處理 haproxy監聽埠監控 將告警處理,然後把配置埠新增到配置檔案中。如果配置匯入失敗,那麼就連線機器把haproxy的程序殺死,然後再匯入 本機dns解析異常 如果有多個dns,那麼把出現故障的dns給注釋掉。如果dns個數很少,那麼新增新的dns,不過新增dns時要注...