RANSAC 线 3d 拟合 3D 线段

RANSAC line3d fitting by 3d line segments

本文关键字:3D 线段 拟合 3d RANSAC      更新时间:2023-10-16

我有很多 3D 线段。 其中一些几乎是平行的 有些朝向不同的方向。我想避免 异常值并获得最佳线 3d 来表示给定的 3D 线 段。

我有点困惑 RANSAC 方法如何适用于这种情况......

我应该先找到一条随机线,还是应该将其视为给定的 3D 点问题。?

任何人都可以向我发布在 C++ 中暗示这一点时要遵循的结构。

谢谢

RANSAC 是将数据拟合到模型的好工具。如果您在线段集合中有一条 3D 线,则通过运行 RANSAC 并选择最大化内浮线数量的线就足够了。但是,由于集合中有很多行,因此您应该尝试不同的方法(即使是非 RANSAC 的方法,正如我稍后告诉您的那样(。

例如,您可以先运行 RANSAC,尝试查找与尽可能多的段匹配的线。找到该行后,从集合中删除内嵌段并再次运行 RANSAC。

要创建一条线,您只需要一个线段,因此构建线模型非常容易。

要确定线段是否适合线,您可以使用点积计算两者之间的角度(越接近 0 越好(以及从线段的中点到线的距离。

另请注意,第一步可以过滤掉非常小的细分。您可以稍后保存一些迭代并避免干扰结果。

我也可以想到霍夫变换方法。由于您可以从每个线段创建一条线,因此您可以获取其线的参数(法线或方向矢量以及到原点的距离(,将它们量化为可接受的箱大小,并在矩阵中为这些参数添加投票。最后,你的线位于投票矩阵的峰值。