2

我正在使用点云库。我知道有一个使用 RANSAC 方法查找行的功能,但我想做相反的事情。我有一个点云,我有一个线方程,现在,我想找到在线上或附近(在给定阈值内)的所有点。

有什么功能可以用来实现我的目标吗?

我真的很感激任何帮助。

4

2 回答 2

1

我曾多次尝试使用 PCL 进行 Kinect 处理,但对我来说效果不太好。所以我尝试创建自己的算法来做我想做的事,并且对于应用程序,它们的工作速度比 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.
}

使用这个函数,我传入 640*480 Kinect 图像中深度值大于 0 的每个点。

对我来说,这工作得很快:)

我希望这有帮助。

于 2013-04-17T17:53:44.473 回答
0

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

于 2013-02-11T12:09:01.347 回答