PCL 实现点云相减


前言

PCL点云库里点云相加实现方法很简单,直接用+=就行,例有点云cloud0cloud1

pcl::PointCloud<PointT>::Ptr cloud0(new pcl::PointCloud<PointT>());
pcl::PointCloud<PointT>::Ptr cloud1(new pcl::PointCloud<PointT>());
*cloud0 += *cloud1;

此时cloud0就是先前cloud0cloud1结合后的点云,但是如果已知cloud0是cloud1的子集,想要知道两者相减后的结果,官方没有现成的函数。

一、PCL是什么?

点云库 (PCL) 是一个独立的、大规模的、开放的 2D/3D 图像和点云处理项目。PCL 是根据BSD 许可条款发布的,因此可免费用于商业和研究用途。

在这里插入图片描述

二、使用步骤

1.引入库

代码如下(示例):

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/common.h>
#include<pcl/octree/octree.h>

2.关键函数

//实现:cloud2 = cloud0 - cloud1
//param[in]  pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud1://减数点云
//param[in] pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud0://被减数点云
//param[out] pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud2://差点云
void CloudSubtraction(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud1, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud0, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud2) {
    
    
    float resolution = 0.10f; //八叉树分辨率,根据点云需要自行调整
    pcl::octree::OctreePointCloudChangeDetector<pcl::PointXYZ>octree(resolution); 

    //添加cloud1到八叉树中
    octree.setInputCloud(cloud1->makeShared());
    octree.addPointsFromInputCloud();

    octree.switchBuffers(); 

    //添加cloud0到八叉树中
    octree.setInputCloud(cloud0->makeShared());
    octree.addPointsFromInputCloud();

    std::vector<int>newPointIdxVector;   //存储新加入点索引的向量
    octree.getPointIndicesFromNewVoxels(newPointIdxVector);

    cloud2->width = newPointIdxVector.size();
    cloud2->height = 1;
    cloud2->is_dense = false;
    cloud2->points.resize(cloud2->width * cloud2->height);

    for (size_t i = 0; i < newPointIdxVector.size(); i++) {
    
    
        cloud2->points[i].x = cloud0->points[newPointIdxVector[i]].x;
        cloud2->points[i].y = cloud0->points[newPointIdxVector[i]].y;
        cloud2->points[i].z = cloud0->points[newPointIdxVector[i]].z;
    }
}

实现两点云相减,以点云的形式返回相减结果,此处只考虑了点类型为pcl::PointXYZ的情况,有额外需要可以自行适当增添。


总结

函数返回两点云相减的结果,需要注意的是,减数点云必须要确保为被减数点云的子集,否则该函数将没有意义。

猜你喜欢

转载自blog.csdn.net/Dbojuedzw/article/details/129884789