Tips:本文已在项目中应用,若对本方法比较认可和熟悉,可通过了解“0. 应用描述”和“1. 算法理论”部分完成自己的算法。
0. 应用描述
通过深度相机采集到彩色图像(rgb.png)和深度图像(depth.png),并且两张图片是像素对准的,由此可得到数据类型为pcl::PointXYZRGB的点云信息(png格式的深度图像转pcd点云格式(C++))。在进行点云分割时,往往因为两个物体挨得太紧而无法进行分割。一般而言,特征处点云并不见得是有特别明显的点云特征,所以基于点云聚类分割的方法将不容易完成分割。但是,往往特征处的RGB值相比于非特征处是有明显差异的,可以根据特征处的差异值将特征处的点云剔除,然后再进行聚类、点云分割。
1. 算法理论
图像特征以缝隙为例,如图所示为rgb.png的局部放大图,缝隙处的RGB值较非缝隙处有明显差异,可根据这种差异将缝隙处的点云剔除掉,然后再进行点云分割,便可将两个紧密的物体点云分割开。
如图中1框内,中心像素即为要检测的像素,通过比较,发现中心像素与周围8个像素点的RGB值差异不大,不认为是缝隙特征点,保留该点。类似地,2框内中心像素与周围像素有部分差异,可认为是缝隙特征边缘点,根据设定的阈值进行取舍。同样地,3框内中心像素与周围像素存在巨大差异,可认为是缝隙特征点,删除点云中的该点。
依次进行后可发现,点云特征界线变得明显,可通过点云聚类将特征处两侧的点云分割开。
因此,如何取舍一个点云是比较重要的,可根据自己应用的要求设计判断策略。
2. 基于PCL的C++程序实现
本文使用以上提到的判断策略,即对像素紧挨的8个点进行判断,若出现多个像素点与该像素点有明显差异,则删除点云中的对应点;否则,保留该点。
<暂时不予披露,请自行编写。>
3. 效果图
图中点云的中间位置为两个盒子的缝隙,在不加本文分割算法时,两个盒子的点云难以聚类、分割。
加入本文算法后,箱子可以被完全聚类、分割。
4. 总结
通过实验,这一思想可以完成密集的、特征不明显的点云聚类、分割工作。根据应用场景的不同,可以设计不同的特征提取方式,然后根据提取信息对点云进行操作。总之,RGB彩色图片(或灰度图片)的像素特征可作为对点云操作的依据。