私はポイントクラウドライブラリを使用しています。RANSACメソッドを使用して行を検索する関数があることは知っていますが、その逆を実行したいと思います。点群があり、線の方程式があります。次に、線上または線の近く(指定されたしきい値内)のすべての点を見つけたいと思います。
目標を達成するために使用できる機能はありますか?
どんな助けでもよろしくお願いします。
私はポイントクラウドライブラリを使用しています。RANSACメソッドを使用して行を検索する関数があることは知っていますが、その逆を実行したいと思います。点群があり、線の方程式があります。次に、線上または線の近く(指定されたしきい値内)のすべての点を見つけたいと思います。
目標を達成するために使用できる機能はありますか?
どんな助けでもよろしくお願いします。
Kinect処理にPCLを数回使用しようとしましたが、うまくいきませんでした。だから私は自分のやりたいことをするために自分のアルゴリズムを作成しようとしました、そしてアプリケーションのために、それらはPCLのものよりはるかに速く動作します:)
私が取り組んでいるプロジェクトはGitHubにあり、ここbool ConvexHull::addPoint(double newX, double newY, double newZ)
で見つけるのに役立つ可能性のあるコードを見つけることができます。
これは、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.
}
この関数を使用して、深度値が0より大きい640 *480Kinect画像のすべてのポイントを渡します。
そして私にとって、これは非常に高速に動作します:)
これがお役に立てば幸いです。
そのために特別な機能は必要ないと思います。すべてのポイントを調べ、ポイントラインの距離を計算し、しきい値内のポイントを受け入れ、外側のポイントを拒否/削除するだけです。