在许多机器人应用的领域,能够实时在三维点云中进行平面提取是非常困难的。在论文中提出了一个算法,能够在类似Kinect 传感器采集到的点云进行实时可靠的多平面的检测。

具体的算法一共有三个步骤:
第一步:生成图模型(每一个节点都代表的是一个点集,每条边代表点集之间的关系);
第二步:在构建好的图模型上利用层次聚类的方法进行点集的的融合,直到平面拟合的均方误差超过设定的阈值;
第三步:使用像素级别的局域增招,对上一步提取到的平面进行优化。

论文中演示了该算法在640x480的点云中,以超过35Hz的帧率对场景中所有主要的平面进行可靠的检测。

主流的几类平面提取的方法有:
(1)RANSAC-based methods:long computation time;
(2)Region-grow-based methods(pixel、voxel、line);
(3)turn into normal space, compute the distance between the point cloud and the original;
(4)normal estimation;
(5)Graph-based segmentation;

paper中也是使用图来表达数据之间的关系,但是还是与之前图模型的方法有一定的区别的:1)没有RGB的信息;2)不用对每个点进行法线估计;3)对节点与节点之间的边使用动态的权重

paper中还提到线回归和3D点云的平面提取的区别主要有两点:1)节点是没有重叠性的,节点与节点之间是没有共同的点的;2)尝试融合的次数,会高于线回归,因为线回归只要左右两端进行融合尝试就可以了,但是在三维点云中至少有上下左右四个方向的融合尝试,如果是 比较大的聚类,融合尝试的此时可能会更加多一些。

下面就对算法的三个步骤进行详细的描述:

1.图模型的初始化
将图像中的点云均匀的分成H×W为一个节点,例如图像为10×10,H=W=5,那么就分成(10/5)×(10/5)=4,总共分成四块,也就是有四个节点。但是根据paper中为了更好的使用AHC(层次聚类),需要移除下面几类节点和它们对应的边:

1)节点对应很高的MSE
2)节点缺少数据信息(传感器的限制)
3)节点包含的深度不连续
4)节点在两个平面的边界上

值得一提的是针对这种非重叠的节点,默认是在一个平面上的,所以也就不需要对每个节点中的点进行法线估计,这会很大的提高整个算法的速度。

2.层次聚类(AHC)

1)首先先建立一个最小堆的数据结构,使得能够更有效的找到有最小均方误进行融合;
2)再次计算融合后的平面拟合均方误差,找到获得均方误差最小的对应两个节点;
3)如果均方误差超过一个预先设定的阈值(非固定),一个平面的分割节点就算是找到了,把它从图中提取出来,否则,就把这两个节点融合好,重新加到构建的图中,对建立的最小堆进行更新;
4)重复上述2)、3)操作。

因为最小堆建立,可以被看成是一个近似的完全二叉树,所以在建立最小堆的复杂度是线性时间复杂度,而在排序的时候就是一个O(nlgn)O(nlgn)O(nlgn)的时间复杂度

3.分割优化
在步骤2层次聚类后只能算是比较粗糙的分割,而且在第一个步骤中我们舍弃了很多节点,所以在最后的优化时,我们是基于像素点的优化,主要是有下面三种类型:

1)在边缘处会产生锯齿状的分割:会使得少量异常点包含在估计中,通过腐蚀边界区域优化这种现象;
2)未使用的数据点:就近分类未使用的点周围平面;
3)过度分割:在特别小的图中(通常是小于30个节点)再次进行AHC。

参考文献:
[1]Feng C, Taguchi Y, Kamat V R. Fast plane extraction in organized point clouds using agglomerative hierarchical clustering[C]// IEEE International Conference on Robotics and Automation. IEEE, 2014:6218-6225.

使用层次聚类在结构点云中进行平面的快速提取相关推荐

  1. python 密度聚类 使用_使用python+sklearn实现硬币图像上的结构化Ward层次聚类演示...

    注意:单击此处https://urlify.cn/EFRn6b下载完整的示例代码,或通过Binder在浏览器中运行此示例使用Ward层次聚类计算二维图像的分割,由于聚类在空间上受到了限制,所以每个分割 ...

  2. Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法.    其原理是:最初 ...

  3. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

  4. R语言层次聚类模型示例

    R语言层次聚类模型示例 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树.在聚类树中,不同类别的原始数据点是树的 ...

  5. ML之HierarchicalClustering:自定义HierarchicalClustering层次聚类算法

    ML之HierarchicalClustering:自定义HierarchicalClustering层次聚类算法 目录 输出结果 实现代码 输出结果 更新-- 实现代码 # -*- encodin ...

  6. 聚类算法:Hierarchical Clustering层次聚类

    1. 层次聚类 1.1 层次聚类的原理及分类 1)层次法(Hierarchicalmethods):先计算样本之间的距离.每次将距离最近的点合并到同一个类.然后,再计算类与类之间的距离,将距离最近的类 ...

  7. 聚类分析1:层次聚类

    聚类分析是一种数据归约技术,旨在揭露一个数据集中观测值的子集.它可以把大量的观测值归约为若干个类,而事先并不知道类别的个数与结构. 最常用的两种聚类方法是层次聚类(hierarchical agglo ...

  8. 层次聚类分析代码_你知道如何聚类吗?层次聚类与聚类树

    聚类分析 在生态学研究当中,有些环境中的对象是连续(或者离散)的,而有些对象是不连续的,聚类的目的是识别在环境中不连续的对象子集,从而探索隐藏在数据背后的属性特征.聚类分析主要处理那些对象有足够的相似 ...

  9. 层次聚类算法 算法_聚类算法简介

    层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...

最新文章

  1. 认真对待学习(2月反思)
  2. excel随机数的获取
  3. Fisher判别推导 Logistic回归推导 SVM推导
  4. 20175212童皓桢 Java实验二-面向对象程序设计实验报告
  5. java字符流写入式乱码_字节流乱码与字符流乱码
  6. html 正则表达式验证金额,js金额校验,js正则表达式,包含正负,小数点后两位...
  7. Mongodb使用总结
  8. css3模拟jq点击事件
  9. 深度神经网络 分布式训练 动手学深度学习v2
  10. linux挂载曙光存储,曙光I1620G30获取设备的cpu、内存、存储等参数信息。
  11. 个个给力2010年十大国产软件新品回顾
  12. HTML将广告关闭的JS代码,原生js对联广告代码制作浮动固定层可关闭对联广告横幅...
  13. 负压电源设计 TPS54160 负压 Level Shifting Control for an Inverting Buck-boost
  14. 升级到ckplayerX
  15. HBase流程框架图
  16. autojs之启动页
  17. python脚本1 - PPT导出为图片(WinLinux)
  18. 技术选型电商平台系统的四大方向
  19. 前后台处理得到 前台图片 draw.io/ mxgraph
  20. 正则表达式在线测试通过,java运行通不过

热门文章

  1. CRF as RNN
  2. FCoin爆雷,大咖答主教你如何挽回损失 | 一周问答热议
  3. JDK目录介绍(bin,db,jre,include,lib,src)以及javac,java命令
  4. 简单的指针二叉查找树和数组二叉查找树
  5. GeoServer + openlayers
  6. python识图自动化_Python自动化测试-验证识别
  7. paraview(三)运行和查看Paraview官方案例
  8. 计算机配置高低怎么看,怎么查看电脑配置?(查看电脑配置高低的三种方法!)...
  9. Windows10系统激活技巧
  10. Vue+bpmn.js自定义流程图之palette(二)