利用 PCL 可以分割坐落于某一平面上的物体,首先要对整体点云执行平面分割,以找到场景中的某一平面,然后利用 pcl::ExtractPolygonalPrismData
类,可以分割出在该平面之上的物体聚类。
具体的使用流程是:
- 加载点云
- 滤波之类的预处理(这一步可有可无,取决于你的点云是否需要滤波)
- 对整体点云执行 RANSAC 平面分割,得到某一平面的内点索引
inliers
和平面方程系数coefficients
- 利用
pcl::ExtractIndices
类提取内点,将提取到的内点保存到新的点云中 - 为内点点云创建二维凸多边形(或者凹多边形)
- 利用
pcl::ExtractPolygonalPrismData
类,分割出位于平面之上的物体
以下是我的代码
#include <pcl/io/pcd_io.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/segmentation/extract_polygonal_prism_data.h>
#include <pcl/surface/concave_hull.h>
#include <pcl/visualization/pcl_visualizer.h>
int main (int ar