【问题标题】:Find points on the line in point cloud在点云中查找线上的点
【发布时间】:2013-04-18 19:34:09
【问题描述】:

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

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

我非常感谢任何形式的帮助。

【问题讨论】:

    标签: point-clouds point-cloud-library


    【解决方案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.
    }
    

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

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

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢 Oscee 的回复。我已经试过了。但问题是我的行数按照云中的点数排列。如果我运行两个如此庞大的 for 循环。我得等很久才能得到结果。它有效,我检查了但需要半个多小时。 :)
      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2019-02-15
      相关资源
      最近更新 更多