官网的教程中有一个octree的例子,可以实现这个功能
https://pcl.readthedocs.io/projects/tutorials/en/latest/octree_change.html#octree-change-detection

例子中能检测出点云B在点云A上增加的点,但不能检测出减少的点,如果A为背景,B为包含背景和其他物体的点云,那么可以实现在B中去背景的作用,下面的代码对官网的代码做了简单的修改,B的前100个点和A近似相同,后面的是新加的不同的点,结果后面的点都检测出来了。当然前提条件是两个点云坐标系相同,否则需要先做配准。,在配准的时候也可以直接求交集,见本文最后。

// modified from the code in https://pcl.readthedocs.io/projects/tutorials/en/latest/octree_change.html#octree-change-detection
#include <pcl/point_cloud.h>
#include <pcl/octree/octree_pointcloud_changedetector.h>#include <iostream>
#include <vector>
#include <ctime>int
main (int argc, char** argv)
{srand ((unsigned int) time (NULL));// Octree resolution - side length of octree voxelsfloat resolution = 32.0f;// Instantiate octree-based point cloud change detection classpcl::octree::OctreePointCloudChangeDetector<pcl::PointXYZ> octree (resolution);pcl::PointCloud<pcl::PointXYZ>::Ptr cloudA (new pcl::PointCloud<pcl::PointXYZ> );// Generate pointcloud data for cloudAcloudA->width = 100;cloudA->height = 1;cloudA->points.resize (cloudA->width * cloudA->height);for (std::size_t i = 0; i < cloudA->size (); ++i){(*cloudA)[i].x = i;(*cloudA)[i].y = i;(*cloudA)[i].z = i;}// Add points from cloudA to octreeoctree.setInputCloud (cloudA);octree.addPointsFromInputCloud ();// Switch octree buffers: This resets octree but keeps previous tree structure in memory.octree.switchBuffers ();pcl::PointCloud<pcl::PointXYZ>::Ptr cloudB (new pcl::PointCloud<pcl::PointXYZ> );// Generate pointcloud data for cloudB cloudB->width = 128;cloudB->height = 1;cloudB->points.resize (cloudB->width * cloudB->height);for (std::size_t i = 0; i < cloudB->size (); ++i){if(i < 100){(*cloudA)[i].x = i + 0.1;(*cloudA)[i].y = i - 0.1;(*cloudA)[i].z = i + 0.1;} else{(*cloudB)[i].x = 150 + 64.0f * rand () / (RAND_MAX + 1.0f);(*cloudB)[i].y = 64.0f * rand () / (RAND_MAX + 1.0f);(*cloudB)[i].z = 64.0f * rand () / (RAND_MAX + 1.0f);}}// Add points from cloudB to octreeoctree.setInputCloud (cloudB);octree.addPointsFromInputCloud ();std::vector<int> newPointIdxVector;// Get vector of point indices from octree voxels which did not exist in previous bufferoctree.getPointIndicesFromNewVoxels (newPointIdxVector);// Output pointsstd::cout << "Output from getPointIndicesFromNewVoxels:" << std::endl;for (std::size_t i = 0; i < newPointIdxVector.size (); ++i)std::cout << i << "# Index:" << newPointIdxVector[i]<< "  Point:" << (*cloudB)[newPointIdxVector[i]].x << " "<< (*cloudB)[newPointIdxVector[i]].y << " "<< (*cloudB)[newPointIdxVector[i]].z << std::endl;}

除了这个方法之外,还有别的方法,pcl::registration::CorrespondenceEstimation<pcl::PointXYZ, pcl::PointXYZ>determineReciprocalCorrespondences方法的结果的.at(1).index_query。at(1).index_match可以分别对应源目的,这样可以找到交集,在配准的时候直接完成了。

PCL点云去背景(相减)的方法相关推荐

  1. C#实现两个时间相减的方法

    脚本之家看到的,关于两个时间差值的获取 http://www.jb51.net/article/60177.htm using System; using System.Collections.Gen ...

  2. PCL点云曲面重采样三种方法:上采样,下采样,均匀采样

    (1)下采样  Downsampling 一般下采样是通过构造一个三维体素栅格,然后在每个体素内用体素内的所有点的重心近似显示体素中的其他点,这样体素内所有点就用一个重心点来表示,进行下采样的来达到滤 ...

  3. sql日期时间相减语句

    sql日期时间相减语句 本款教程利用了datediff函数,来对数据库教程的日期进行相减查询哦,下面便写了n种关于mssql 日期相减的方法. sql中两个日期相减 1.相差天数 select tru ...

  4. 二进制除法移位相减_在汇编除法中:移位相减是怎么样的原理啊,程序看了几天了还是看不懂,哪位兄弟告诉我,本人感激涕零...

    满意答案 jinqun138 2013.05.24 采纳率:42%    等级:12 已帮助:6963人 二进制的除法本质是通过重复减法运算实现 即通过重复"从被除数的高位依次取出每一位, ...

  5. 两种方法求解 正数数组中 两个数相减 的最大值

    一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相减的最大值,其中被减数的下标不小于减数的下标. 即求出: maxValue = max{arr[j]-arr[i] ...

  6. 更相减损法java代码_Python基于更相减损术实现求解最大公约数的方法

    本文实例讲述了Python基于更相减损术实现求解最大公约数的方法.分享给大家供大家参考,具体如下: 先从网上摘录一段算法的描述如下: 更相减损法:也叫 更相减损术,是出自< 九章算术>的一 ...

  7. C语言实现辗转相除法和更相减损法求两数最大公约数,及求最小公倍数的方法

    在学习从C语言过程中,我们会遇到一个题目,求两个整数的最大公约数,那么接下来分别介绍两种方法求最大公约数 1,辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean Algorithm),是求 ...

  8. matlab错位相减,在非节奏流水施工中,通常用来计算流水步距的方法是()。A.累加数列错位相减取大差值B.累加数列错...

    在非节奏流水施工中,通常用来计算流水步距的方法是().A.累加数列错位相减取大差值B.累加数列错 更多相关问题 引起喉痛的常见喉部疾病有().().().().(). 以下不属于公布目的的审计报告的服 ...

  9. PCL点云处理之计算点到空间直线距离的四种方法(二十三)

    PCL点云处理之计算点到空间直线距离的四种方法(二十三) 问题表述 方法1 方法2 方法3 方法4 全部代码(四个函数) 问题表述 给定空间一条直线的两个点或者给定直线上一点和直线方向向量 求直线外一 ...

最新文章

  1. 【转载】解决Apache2+PHP上传文件大小限制的问题
  2. postfix和dovecot服务异常,重启服务后又会自动停掉的解决办法
  3. flask gevent uwsgi nginx 联合高并发 部署
  4. 怎样学会科学的调研并启动一个项目
  5. 互斥量和信号量的区别
  6. 超实用的浏览器插件:CSDN 一键搜索、自定义工具、全站去广告、一键美化等
  7. 01_11_Strtus2简单数据验证
  8. visualcreators.com公司产品过滤漏洞!
  9. rtx服务器端消息监控插件,RTX2006消息监控插件
  10. python题目-判断素数
  11. arduino android模拟器,模拟仿真Arduino软件(Virtual Breadboard)
  12. 数据科学Python库01:Pandas
  13. html 免备案,域名没有备案使用cdn(免备案cdn推荐)
  14. 【Vivado那些事】OOC综合方式
  15. android 照片变油画,最近很火照片变油画Glaze软件
  16. python27安装get-pip
  17. 网站域名空间服务器,网站 域名 空间 服务器
  18. php采集今日头条出现问题,使用php蓝天采集抓取今日头条ajax的文章内容
  19. The server of Nginx(二)——Nginx基本功能配置
  20. 指数函数误差平方和matlab,数值分析与实验数学081 张燃 3080801119).doc

热门文章

  1. JS - 自由变量与作用域链
  2. Revit建模绘制楼板时剖面图上如何修改使其在墙的外边界?
  3. EasyUI DataGrid DetailView(数据表格详细展示带子表格)
  4. 软考中级-结构化开发
  5. dp与px的转换对照表
  6. Elasticsearch 如何实现时间差查询?
  7. Android Binder机制学习总结(二)-Driver部分
  8. 你真的认为自己熟练Python?带你一篇文章 查漏补缺,感受自己离深入掌握 Python 还有多远。
  9. Java实现之普利姆(Prim)算法
  10. Vue项目设置ico