前言
由于需要对RGBD相机中,Depth采集到的图像分割除物体,本文整理PCL官方集成的常用点云分割算法。
官方点云集中在拥有完整点云时候的分割,而RGBD相机受限制于其视角,存在遮挡和无法观测的区域,所以怀揣着该应用的母的来对官方几个常见分割算法做梳理。
所有算法来自于官方Tutorial,参考:
http://www.pointclouds.org/documentation/tutorials/
1、 Euclidean Cluster Extraction
http://www.pointclouds.org/documentation/tutorials/cluster_extraction.php#cluster-extraction
介绍
最为简单的一种,思路是将点云中空间欧几里得距离近的聚集到一起。
算法步骤
1、 对输入的无序点云创建Kd-tree表达 P。 实现快速搜索。
2、 设置空的聚类列表C,以及等待被检查的点集Q
3、 对于P中的每个点 pi,进行下列步骤:
- 将pi添加到当前点集Q
- 对Q中的每个点pi,执行:
- 搜索 pi为中心,半径为d_th的球面内的所有点构造集合 P_k^i
- 对P_k^i中每一个点 p_k^i ,若未处理过,加入到Q中
- 当Q中所有点都被处理过,将Q加入聚类列表C,将Q重新置空。
4、当所有点pi都被处理时,算法终止。此时C中存放了所有聚类。
参数详解
该方法设置 一个阈值: d_th, 需要小于物体间距,大于同一物体点云的最大间隔.
RGBD相机应用
经过改进实际可以只执行一次,即使用物体中心点做初始化。
2、Region growing segmentation
输出的聚类点云,彼此之间的特点在于都位于同样平滑的表面。基于表面向量的比较。
算法过程
首先对点云基于曲率排序。从最小曲率的点开始,因为它一般在最平滑的地区,有利于减少分割的整体数量。
基于有序的点云,可以开始区域增长:
- 选中的点加入到点集seeds
- 对每个seed点,寻找临近点集
- 每个临近点与seed点比较法向量角度,小于阈值则添加到当前区域中
- 之后,对每个临近点测试曲率值,若曲率小于阈值,添加到seeds中
- 当前seed从seeds中移除
若seeds空了说明算法一个区域增长完成,然后将从头开始过程。
感受
与欧几里得聚类类似。先做值排序。
参数
曲率阈值 - 影响多么平滑的点会进入seeds
角度阈值 - 影响分割时,同一个聚类内的点法向量相似度
3、Color-based region growing segmentation
与2类似,只是使用颜色来增长。
应用过分割判断,若一个聚类的数量小于阈值,则它将和最相近的其他聚类融合。
4、Min-Cut Based Segmentation
专门分割前后景。
算法过程
1、 对给定点云构建图,每个单独点生成一个顶点,同时生成另外两个顶点:source和sink。每个顶点用边连接source和sink. 除此之外,每个顶点有边连接最邻近的点。
2、 算法对每条边赋予权重。有三种不同权重:
- Smooth cost: 点云点之间的权重
- 公式: dist 代表点之间的距离。
- Data cost: 包含前景和背景的惩罚。第一个是这些连接点云点和source vertex的边,是用户指定的常值。第二个是连接sink节点的边,由下式计算:
-
, distanceToCenter 是在horizontal plane下到期望物体中心的的距离。
-
公式中的Radius 是输入参数,可以粗略考虑为从物体中心多远距离没有前景点(物体horizontal半径)。 [ 物体大小? ]
-
3、 所有准备就绪后,执行最小cut的搜索。基于cut的分析,点云被分割为前景和后景点。
思考
用图的模型综合考虑两个因素: 1) 平滑程度,点之间的距离 2)距离物体中心的惩罚。
该算法需要已知物体中心,可以用矩形框中心点结合 depth来获得. radius的参数有点限制了,这岂不是物体先验大小? 或者给一个室内物体整体大小的值。
是否会影响大小不一的物体?通用性如何? 看看论文。
更多参考:
http://gfx.cs.princeton.edu/pubs/Golovinskiy_2009_MBS/index.php
2009年 ICCV
论文中 automatic 版本效果还行。而PCL的实现需要手动指定 Radius. 舍弃.
5、 Conditional Euclidean Clustering
介绍
实际上是前面提到的1-3的融合。
总结
各类算法都较为成熟,但可能并不通用。而且基本针对的是完整点云。
而RGBD相机由于其视角和遮挡的特殊性,需要额外对待。
目前看来针对物体分割,
- 欧几里得聚类反而是最简单而最实用的。
- 融合语义的Min-Cut算法也可以考虑。但目前尚不想加入物体大小先验. 保持其通用性: 如玩具尺度不确定.