我正在使用點雲庫。我知道有一個函數可以使用RANSAC方法來查找線條,但是我想要做相反的事情。我有一個點雲,我有一個線性方程,現在,我想找到線上或附近(在給定閾值內)的所有點。在點雲上查找點上的點
有什麼功能可以用來實現我的目標嗎?
我真的很感激任何形式的幫助。
我正在使用點雲庫。我知道有一個函數可以使用RANSAC方法來查找線條,但是我想要做相反的事情。我有一個點雲,我有一個線性方程,現在,我想找到線上或附近(在給定閾值內)的所有點。在點雲上查找點上的點
有什麼功能可以用來實現我的目標嗎?
我真的很感激任何形式的幫助。
我試圖使用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
對我來說,這工作相當快:)
我希望這可以幫助。
我不認爲你需要任何特殊的功能,要做到這一點 - 只需通過你的所有點,計算出點線距離,並接受你的閾值範圍內的人,並拒絕/刪除以外的人。
謝謝Oscee的回覆。我已經嘗試過了。但問題是我有許多行,按照雲中點數的順序排列。如果我運行兩個for循環這樣一個巨大的數字。我必須等很長時間才能得到結果。它工作,我檢查,但需要超過半小時。 :) – Isabela 2013-02-11 18:12:07