0

我有许多 3d 线段。其中一些几乎平行,而另一些则朝向不同的方向。我想避免异常值并获得最好的 3d 线来表示给定的 3d 线段。

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

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

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

4

1 回答 1

1

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

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

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

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

另请注意,您可以在第一步过滤掉非常小的段。您可以稍后保存一些迭代并避免嘈杂的结果。

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

于 2013-06-16T12:14:57.993 回答