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的情况,有额外需要可以自行适当增添。


总结

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PCL(Point Cloud Library)是一个广泛使用的开源库,用于点云数据的处理和分析。在PCL中,点云选择是一种功能,它允许用户根据一些条件选择特定的点云子集。 点云选择主要包含两个方面:点云的空间选择和属性选择。 对于空间选择,PCL提供了多种方法。其中,最常用的是通过定义一个几何形状(例如球、立方体或圆柱体)来选择点云中的空间区域。用户可以指定几何形状的中心和半径(或尺寸),PCL会根据用户的指定从点云中选择包含在几何形状内的点集。 对于属性选择,PCL可以根据点云中的某些属性(例如颜色、法线或曲率)来选择点云子集。用户可以定义一个或多个属性的范围,并使用PCL的过滤功能来选择落入指定范围内的点云PCL还提供了其他一些高级的选择功能。例如,使用平面模型拟合算法可以从点云中选择出平面,或者使用形状描述算法(如VFH或SHOT)可以根据点云的形状特征选择出相似的点云。 在使用PCL实现点云选择功能时,需要先加载并处理点云数据。然后根据选择条件使用适当的PCL函数进行选择,并将结果存储在新的点云对象中。最后,可以将选择结果可视化或进行其他进一步的处理。 总之,通过使用PCL提供的功能,可以方便地实现点云选择,根据用户指定的空间和属性条件选择出感兴趣的点云子集,从而为后续的点云分析和处理提供更准确和有效的数据基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值