在点云中找到线上的点

时间:2013-02-10 12:22:55

标签: point-clouds point-cloud-library

我正在使用Point Cloud Library。我知道有一个函数可以使用RANSAC方法查找行,但我希望与此相反。我有一个点云,我有一个线方程,现在,我想找到线上或附近(在给定阈值内)的所有点。

我可以使用任何功能来实现我的目标吗?

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分: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.
}

使用此功能,我会从深度值大于0的640 * 480 Kinect图像的每个点传递。

对我而言,这种方法非常快:)

我希望这会有所帮助。

答案 1 :(得分:0)

我认为您不需要任何特殊功能 - 只需遍历所有要点,计算点线距离并接受阈值范围内的距离并拒绝/删除外部距离。