知识储备 PCL常用点云分割算法整理

前言

由于需要对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节点的边,由下式计算:
    • backgroundPenalty=(\frac{distanceToCenter}{radius}), 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

http://www.pointclouds.org/documentation/tutorials/conditional_euclidean_clustering.php#conditional-euclidean-clustering

 

介绍

实际上是前面提到的1-3的融合。

 

总结

各类算法都较为成熟,但可能并不通用。而且基本针对的是完整点云。

而RGBD相机由于其视角和遮挡的特殊性,需要额外对待。

目前看来针对物体分割,

  • 欧几里得聚类反而是最简单而最实用的。
  • 融合语义的Min-Cut算法也可以考虑。但目前尚不想加入物体大小先验. 保持其通用性: 如玩具尺度不确定.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章