我正在使用点云库。我知道有一个使用 RANSAC 方法查找行的功能,但我想做相反的事情。我有一个点云,我有一个线方程,现在,我想找到在线上或附近(在给定阈值内)的所有点。
有什么功能可以用来实现我的目标吗?
我真的很感激任何帮助。
我正在使用点云库。我知道有一个使用 RANSAC 方法查找行的功能,但我想做相反的事情。我有一个点云,我有一个线方程,现在,我想找到在线上或附近(在给定阈值内)的所有点。
有什么功能可以用来实现我的目标吗?
我真的很感激任何帮助。
我曾多次尝试使用 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 的每个点。
对我来说,这工作得很快:)
我希望这有帮助。
我认为您不需要任何特殊功能来做到这一点 - 只需遍历所有点,计算点线距离并接受阈值内的点并拒绝/删除外面的点。