我正在使用Point Cloud Library。我知道有一个函数可以使用RANSAC方法查找行,但我希望与此相反。我有一个点云,我有一个线方程,现在,我想找到线上或附近(在给定阈值内)的所有点。
我可以使用任何功能来实现我的目标吗?
我真的很感激任何帮助。
答案 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)
我认为您不需要任何特殊功能 - 只需遍历所有要点,计算点线距离并接受阈值范围内的距离并拒绝/删除外部距离。