C++ 通过三维线段进行RANSAC line3d拟合

C++ 通过三维线段进行RANSAC line3d拟合,c++,C++,我有很多三维线段。其中一些几乎是平行的 有些是朝着不同的方向。我想避免 离群值,以获得表示给定3d线的最佳3d线 分段 我有点困惑RANSAC方法如何适用于这个案例 我应该先找到一条随机线,还是应该把它看作是一个给定的三维点问题?< /P> 任何人都可以在C++中向我展示这个过程中遵循的结构。感谢RANSAC是一个将数据拟合到模型的好工具。如果在线段集合中有一条3D直线,那么运行RANSAC并选择使内联线数量最大化的直线就足够了。但是,由于集合中有许多行,因此应该尝试不同的方法(即使是非RANS

我有很多三维线段。其中一些几乎是平行的 有些是朝着不同的方向。我想避免 离群值,以获得表示给定3d线的最佳3d线 分段

我有点困惑RANSAC方法如何适用于这个案例

我应该先找到一条随机线,还是应该把它看作是一个给定的三维点问题?< /P>


任何人都可以在C++中向我展示这个过程中遵循的结构。感谢

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

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

要创建直线,您只需要一条线段,因此构建直线模型非常简单

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

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

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