- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一套点云,想测试一下3D房间里有没有角点。所以我想讨论我的方法,以及在速度方面是否有更好的方法,因为我想在手机上测试它。
我会尝试使用 hough 变换来检测线,然后我会尝试查看是否有三条线相交并且它们构成了一个也相交的两个平面。
最佳答案
如果点云数据来自深度传感器,那么您的墙壁采样相对密集。我发现与深度传感器(例如 Kinect 或 DepthSense)配合使用效果很好的一件事是@MartinBeckett 建议的 RANSAC 程序的强大版本。不是随机选取 3 个点,而是随机选取一个点,并在云中获取相邻点。有两种方法可以做到这一点:
下一步是根据该组 3D 点生成平面方程。您可以在它们的 3D 坐标上使用 PCA 来获得定义平面的两个最重要的特征向量(最后一个特征向量应该是法线)。
从那里开始,RANSAC 算法照常进行:检查数据中有多少其他点靠近该平面,并找到具有最大支持的平面。我发现最好找到最大的支撑平面,移除支撑的 3D 点,然后再次运行算法以找到其他“更小”的平面。这样你就可以得到你房间里的所有墙壁。
编辑:
为了澄清以上内容:假设平面的支持是所有 3D 点的集合,这些点与该平面的距离至多为某个阈值(例如 10 厘米,应取决于深度传感器的测量误差模型)。每次运行 RANSAC 算法后,都会选择支持度最高的平面。通过对支持集执行 PCA/线性回归,可以使用支持该平面的所有点来细化平面方程(这比仅使用相邻点更稳健)。
为了继续寻找其他平面,应该从 3D 点集中移除先前迭代的支持,以便剩余的点位于其他平面上。只要有足够的点并且最佳平面拟合误差不太大,就可以重复此操作。在你的情况下(寻找一个角落),你需要至少 3 个垂直平面。如果你发现两个大致平行的大支撑平面,那么它们可能是地板和一些柜台,或者两个平行的墙。要么房间没有可见的角落,要么您需要继续寻找支撑较小的垂直平面。
关于c++ - 从点云中检测一组平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731442/
据我了解,它是服务器中长时间运行的进程。能否覆盖网络游戏服务器等长时间运行的程序实例? 最佳答案 您可以将辅助角色视为 Windows 服务或 Unix 守护进程。正如您所说,它是一个永久执行的进程(
尝试创建ChirpStack Azure 云中的 Docker-Compose 容器: docker login azure docker context create aci myacicontex
我找到了关于这个主题的优秀教程,但它留下了一些悬而未决的问题 http://www.silverlightshow.net/items/Silverlight-in-the-Azure-cloud-P
我们正在尝试使用 ADF(Azure 数据工厂)管道从 DB2 数据库(可在本地基础设施上使用)查询示例数据。我们在本地基础设施的虚拟机中托管了 ADF SHIR(自托管集成运行时)。 我们已经为 D
我在尝试将我的 intelliJ 项目与 JetStream Xsede 云中的 JDK 关联时遇到问题。当尝试通过 intelliJ 访问该目录时,我可以看到一个锁定的文件夹图标,不允许访问它。 我
我是一名优秀的程序员,十分优秀!