我有很多3D线段。其中一些几乎是平行的 有些是面向不同的方向。我想避免 异常值并获得最佳线3d来表示给定的3d线 段。
我有点困惑RANSAC方法如何适用于这种情况......
我应该首先找到一个随机行,还是应该将其视为给定的3d点问题。?
任何人都可以发布我在c ++中实现这个时要遵循的结构。感谢
答案 0 :(得分:1)
RANSAC是将数据拟合到模型的好工具。如果在一组段中有一条3D线,则通过运行RANSAC并选择最大化内部量的线就足够了。但是,由于集合中有很多行,你应该尝试不同的方法(即使是非RANSAC方法,我稍后会告诉你)。
例如,您可以运行第一个RANSAC,尝试找到与尽可能多的段匹配的行。找到该行后,从集合中删除内部段并再次运行RANSAC。
要创建一条线,您只需要一个线段,因此构建线模型非常简单。
要确定一个线段是否适合一条线,您可以计算两者之间的点数与点积(越接近0越好)和从线段中点到线的距离。
另请注意,您可以在第一步过滤掉非常小的细分。您可以稍后保存一些迭代并避免产生噪音。
我也可以想到霍夫变换方法。由于您可以从每个线段创建一条线,您可以获取其线的参数(法线或方向矢量和到原点的距离),将它们量化为一些可接受的二进制大小,并在矩阵中添加对这些参数的投票。最后,你的线条位于投票矩阵的高峰。