algorithm - 长方体的 RANSAC

标签 algorithm 3d geometry point-clouds ransac

我已经能够在 3D 点云上为常用模型(即球体、线、平面)成功实现 RANSAC。然而,我很难思考如何为一个长方体做这件事,特别是一个 3d 盒子。我不确定如何使用点来参数化框。

理想情况下,我希望获得长度、宽度、高度和中心作为我的参数 (Theta)。我对如何使用立方体表面的 3D 点云中的最小数量的点来拟合这些参数感到困惑。 (我也可以访问点法线)。

比如我最终想估计立方体的6个面。我可以只估计三个,然后用它们的平行镜得到所有 6 个。每个面大概都表示为一个平面,需要一个点和一个法线来定义(或者 3 个点)。然而,每个平面的法线都有限制,因为它们都需要彼此正交。我不确定如何在模型估计中包含约束,或者这是否是正确的方法。

任何想法将不胜感激。我目前正在使用 Marco Zuliani 的“RANSAC for Dummies”工具箱实现,如果它完全相关的话。

最佳答案

如果我要设计一种算法来解决这个问题(将立方体拟合到立方体的点云),我会将其分为两个步骤:

  1. 使用某种聚类算法找到六个聚类,每个聚类对应一张脸。在算法执行过程中,我需要六个“候选”区域,每个点都将被视为属于其中一个面部聚类,或者被视为异常值。 DBSCAN 的一些修改形式似乎是一个合适的选择;
  2. 对每张脸进行一些调整,很可能是 RANSAC,因为您已经在使用它。

如果立方体的预期大小已知,您可以将每个点插入 KDTree,并查询半径刚好小于一个面的大小的球体附近,检查平面度(想到主成分)。然后您最终会找到六个面部中心的良好近似候选者。

关于algorithm - 长方体的 RANSAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26612854/

相关文章:

php - 使用任意精度数学的 log() 算法示例

javascript - 检查某个位置的位是否为1

iphone - OpenGL ES 支持环境着色器吗?

r - 在 R Plotly 中更改图例标题

c++ - 为球体生成顶点

c# - System.Numerics 平面是否向后?

c++ - 两个 vector 之间的最短旋转方向

有人可以检查一下算法吗

algorithm - Extract-Min - Fibonacci 堆的最长时间

python - 两个椭圆形(椭圆形)相交的面积?