2013-02-10 122 views
1

我正在使用點雲庫。我知道有一個函數可以使用RANSAC方法來查找線條,但是我想要做相反的事情。我有一個點雲,我有一個線性方程,現在,我想找到線上或附近(在給定閾值內)的所有點。在點雲上查找點上的點

有什麼功能可以用來實現我的目標嗎?

我真的很感激任何形式的幫助。

回答

1

我試圖使用PCL爲Kinect的處理了幾次,但它並沒有爲我工作了太清楚了。所以我試圖創建我自己的算法來做我想做的事情,對於應用程序,它們的工作速度比PCL快很多:)

我正在開發的項目位於GitHub上,您可以找到一些代碼幫助bool ConvexHull::addPoint(double newX, double newY, double newZ)找到here

這利用使用RANSAC生成3D平面方程,然後將每個點進行比較,以它,計算所述點和所述平面之間的距離,就像Oscee說。

這裏是我認爲的代碼多汁位可以幫助你:

// Find the distance from point to plane. 
// http://mathworld.wolfram.com/Point-PlaneDistance.html 
dist = newX * plane.a; 
dist += newY * plane.b; 
dist += newZ * plane.c; 
dist += plane.d; 
dist /= sqrt(pow(plane.a, 2) + pow(plane.b, 2) + pow(plane.c, 2)); 

dist = (dist >= 0) ? dist : -dist; // Absolute distance. 

if (dist > tolerance) { 
    return false; // Return false as point is outside of tolerance. 
} 

有了這個功能,我在每一個點通過從具有深度值640 * 480的Kinect圖像大於0

對我來說,這工作相當快:)

我希望這可以幫助。

0

我不認爲你需要任何特殊的功能,要做到這一點 - 只需通過你的所有點,計算出點線距離,並接受你的閾值範圍內的人,並拒絕/刪除以外的人。

+0

謝謝Oscee的回覆。我已經嘗試過了。但問題是我有許多行,按照雲中點數的順序排列。如果我運行兩個for循環這樣一個巨大的數字。我必須等很長時間才能得到結果。它工作,我檢查,但需要超過半小時。 :) – Isabela 2013-02-11 18:12:07