2014-11-24 85 views
1

我正在使用新的Kinect v2,並且正在獲取Kinect的深度圖。 獲得深度圖後,我將深度數據從深度空間轉換爲相機空間。 據我所知,這是通過將每個像素的所有X,Y座標轉換爲Camera Space +將深度值添加爲Z座標(Kinect還給出了以毫米爲單位的深度值,因此它也轉換爲保持米) 。 因此,點雲實際上是在深度值擴展的2D網格上。可視化也證實了這一點,因爲很容易注意到由於上述對話而導致點在網格中排序。從2D網格上的點雲創建網格

對於可視化,我使用OpenGL的舊時尚方式(glBegin(...)和glEnd())。 我想創建一個網格的點。我有種設法用GL_TRIANGLES來做,但我有很多重複的頂點和邊緣。所以我認爲我應該用GL_TRIANGLE_STRIP創建一個更好的三角剖分,但是我被困在這裏,因爲我不能想出一個好的算法,它可以通過我的2D網格以一種可以將它提供給GL_TRIANGLE_STRIP的方式來創建表面很好。

的問題:

  • 對於每一個三角形的頂點,我檢查Z座標。如果超過了某個閾值,我會忽略這個三角形=>這可能會在我的2D網格中產生空洞。

  • 一些深度值是NaN,因爲Kinect不能「看到」那裏沒有任何東西(例如對象太遠或太近)=>這也會在2D網格中創建孔。

有人有任何建議什麼是解決此問題的最佳方法?

+1

首先轉儲所有不添加任何相關內容的頂點(即,它們在深度上彼此幾乎不同),然後製作網格。快速谷歌點雲優化網格返回http://meshlabstuff.blogspot.co.uk/2009/09/meshing-point-clouds.html。只要知道,當涉及到這類東西時,很少會有一種實現只是爲了您的選擇語言而浮動,而是必須閱讀白皮書和其他語言解決方案,並從那裏構建您自己的實現。這是一篇有趣的看文章http://cdn.intechopen.com/pdfs-wm/30515.pdf – 2014-11-24 15:45:54

+0

您好Steve,感謝您的評論。我一定會閱讀你提供的鏈接。作爲第一個龜頭,他們看起來很有前途! 我認爲可能有這種情況下的算法,其中點雲實際上坐落在二維網格上,但我想你所提到的那只是一個樂觀的希望! :) – Silex 2014-11-24 16:48:03

+0

那麼你仍然希望輸出是一個3d模型,所以網格實際上是誤導性的,因爲你需要使最平滑邊緣的頂點而不是那些最好與網格對齊的頂點。白皮書專門處理外觀上的二維點雲,因爲它們的樣本是從單個相機拍攝的。祝你好運! – 2014-11-24 19:49:15

回答

1

你也可以嘗試在三維delanauy三角測量,並尋找外部的四面體。一個簡單的算法是具有四面體和環面的bowyer-watson。 Cgal就是一個很好的例子。