0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCL中基础下采样介绍

麦辣鸡腿堡 来源:古月居 作者:敢敢のwings 2023-11-21 17:03 次阅读

基础下采样

1.1 点云随机下采样

点云下采样是对点云以一定的采样规则重新进行采样,目的是在保证点云整体几何特征不变的情况下,降低点云的密度,进而可以降低相关处理的数据量和算法复杂度。

随机下采样顾名思义,随机下采样就似乎在原始点云中随机采样一定点数的点。这种方法最终得到的点云数量也是固定的。

pcl::PointCloud< PointT >::Ptr cloud_sub(new pcl::PointCloud< PointT >);    //随机下采样点云
    pcl::RandomSample< PointT > rs;    //创建滤波器对象
    rs.setInputCloud(cloud);                //设置待滤波点云
    rs.setSample(20000);                    //设置下采样点云的点数
    //rs.setSeed(1);                        //设置随机函数种子点
    rs.filter(*cloud_sub);                    //执行下采样滤波,保存滤波结果于cloud_sub

1.2 体素下采样

体素下采样的原理如图1所示,首先将点云空间进行网格化,也称体素化,即图1(b),网格化后的每一个格子称为体素,在这些划分为一个个极小的格子中包含一些点,然后对这些点取平均或加权平均得到一个点,以此来替代原来网格中所有的点,即图1(c)中蓝色的点。显然,网格选取越大则采样之后的点云越少,处理速度变快,但会对原先点云过度模糊,网格选取越小,则作用相反。

图片

pcl::VoxelGrid< pcl::PointXYZ > sor;    //创建体素网格采样处理对象
 sor.setInputCloud(cloud);             //设置输入点云
 sor.setLeafSize(0.01f, 0.01f, 0.01f); //设置体素大小,单位:m
 sor.filter(*cloud_filtered);          //进行下采样

1.3 均匀采样

均匀采样的原理类似于体素化网格采样方法,同样是将点云空间进行划分,不过是以半径=r的球体,在当前球体所有点中选择距离球体中心最近的点替代所有点,注意,此时点的位置是不发生移动的。

球体半径选取越大则采样之后的点云越少,处理速度变快,但会对原先点云过度模糊,网格选取越小,则作用相反。

pcl::UniformSampling< pcl::PointXYZ > form;   // 创建均匀采样对象
form.setInputCloud(cloud);                  //设置输入点云
form.setRadiusSearch(0.02f);                //设置半径大小,单位:m
form.filter(*after_cloud);                  //执行滤波处理

1.4 增采样

增采样的特点是可极大的增加点云数据,但由于内插点的不确定性会导致最后输出的结果不一定准确。

//创建增采样对象
pcl::MovingLeastSquares< pcl::PointXYZ,pcl::PointXYZ > filter;    
filter.setInputCloud(cloud);                     //设置输入点云
pcl::search::KdTree< pcl::PointXYZ >::Ptr kdtree;  //定义搜索方法
filter.setSearchMethod(kdtree);                  //设置搜索方法
filter.setSearchRadius(0.03);    //设置搜索邻域的半径为3cm  
//Upsampling 采样的方法还有 DISTINCT_CLOUD, RANDOM_UNIFORM_DENSITY
filter.setUpsamplingMethod(pcl::MovingLeastSquares< pcl::PointXYZ, pcl::PointXYZ >::SAMPLE_LOCAL_PLANE);     //对点云进行上采样
filter.setUpsamplingRadius(0.03);    //设置采样半径大小,3cm
filter.setUpsamplingStepSize(0.02);  //设置采样步长大小,2cm
filter.process(*after_cloud);      //执行采样操作

1.5 滑动最小二乘法采样

滑动最小二乘法采样的原理是将点云进行了滑动最小二乘法的映射,使得输出的点云更加平滑。

pcl::PointCloud< pcl::PointNormal >::Ptr smoothedCloud(new pcl::PointCloud< pcl::PointNormal >);   //定义法线
pcl::MovingLeastSquares< pcl::PointXYZ, pcl::PointNormal > filter;
pcl::search::KdTree< pcl::PointXYZ >::Ptr kdtree;  //定义搜索方法
filter.setInputCloud(cloud);    //设置输入点云
filter.setUpsamplingMethod();  //增加密度较小区域的密度对于holes的填补却无能为力,具体方法要结合参数使用
filter.setSearchRadius(10);// 用于拟合的K近邻半径。在这个半径里进行表面映射和曲面拟合。半径越小拟合后曲面的失真度越小,反之有可能出现过拟合的现象。
filter.setPolynomialFit(true);  //对于法线的估计是有多项式还是仅仅依靠切线。true为加多项式;false不加,速度较快
filter.setPolynomialFit(3);      // 拟合曲线的阶数
filter.setComputeNormals(true);  // 是否存储点云的法向量,true 为存储,false 不存储
filter.setSearchMethod(kdtree); //设置搜索方法
filter.process(*smoothedCloud); //处理点云并输出
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    158

    文章

    7332

    浏览量

    174786
  • plc
    plc
    +关注

    关注

    4975

    文章

    12257

    浏览量

    454927
  • 采样
    +关注

    关注

    1

    文章

    109

    浏览量

    25371
收藏 人收藏

    评论

    相关推荐

    GSM900 PCL指什么?

    GSM900 PCL指什么?
    发表于 05-11 09:32

    关于232的NCL,PCL的疑问

    有没有大神接触过这种232通讯的仪表,上面有NCL RXD,NCL TXD;PCL RXD,PCL TXD。这种能用DB9的芯片去采集数据吗?我用DB9的RXD去接它的 NCL TXD,数据偶尔会有一位的偏移,请问该怎么正确的采集它的数据,拜谢
    发表于 11-07 16:15

    PCL点云库介绍及项目配置方式

    关于PCL点云库,大家百度的时候可以找到很多相关的介绍,反正一堆专业性概念,相关的技术层面以及一些强大的应用叙述云云,不过关于这些小编实在不感冒,能先把这个工具好好用起来再说吧。关于PCL相关的论坛
    发表于 07-02 07:44

    如何去配置PCL

    PCL是什么?怎样去编写并调试PCL程序?
    发表于 10-09 08:19

    pcl程序怎么去放入嵌入式去使用

    对于写好的pcl程序,怎么去放入嵌入式去使用呢?问了带我的老大,回答是pcl移植到x86平台是最方便的,移到ARM平台也可以,因为是c语言写的,用ARM的c交叉编译器编译一遍即可。也就是 ARM
    发表于 12-14 09:08

    PCL应用示例

    作为PCL系列的一个简单的应用示例,该图是与通常的1轴工作台的机械系统连接的示例。按照从CPU接收的各动作数据中指定的方向运转电机,定位在工作台的行程内。原点调整时,减速(SD)传感器设为ON后减速
    发表于 11-04 16:18

    PCL6143运动控制器原理及应用

    PCL6143运动控制器的原理及应用 可以用于设计开发相应的芯片电路。介绍PCL6143 的功能结构、主要寄存器以及指令系统。设计了一款基于PC104总线的四轴运动控制卡, 介绍了如
    发表于 09-26 08:14

    PCL6143运动控制器的原理及应用

       介绍PCL6143的功能结构、主要寄存器以及指令系统。设计了一款基于PC104总线的四轴运动控制卡,介绍了如何编写运动控制卡的功能函数库。
    发表于 12-13 17:16 106次下载
    <b class='flag-5'>PCL</b>6143运动控制器的原理及应用

    PCL86牛输出耳放电路图

      PCL86牛输出耳放电路图
    发表于 09-29 22:30 4150次阅读
    <b class='flag-5'>PCL</b>86牛输出耳放电路图

    Lane Tech HS PCL自动灯开源

    电子发烧友网站提供《Lane Tech HS PCL自动灯开源.zip》资料免费下载
    发表于 02-08 15:28 0次下载
    Lane Tech HS <b class='flag-5'>PCL</b>自动灯开源

    在Ubuntu上编译安装pcl教程

    编译安装PCL(Point Cloud Library)是在Ubuntu上使用自定义选项进行安装的一种方式。
    的头像 发表于 10-26 09:36 437次阅读

    PCL中最远点采样是什么

    最远点采样(Farthest Point Sampling) 这里我们来单独看一下调用代码,这里可以看到PCL中支持直接调用farthest_sampling这个函数可以实现最远点采样。 最远点
    的头像 发表于 11-21 17:18 328次阅读

    PCL中法线空间采样介绍

    法线空间采样 NormalSpaceSampling即:法线空间采样,它在法向量空间内均匀随机抽样,使所选点之间的法线分布尽可能大,结果表现为地物特征变化大的地方剩余点较多,变化小的地方剩余点稀少
    的头像 发表于 11-21 17:28 337次阅读

    PCL泊松盘采样具体流程

    泊松盘采样 泊松盘采样(possion disk sampling)的特点是任何两个点的距离都不会隔得太近。 比如下图,左边是随机生成的点,右边是泊松盘采样生成的点。 具体流程如下: 1、设定好两个
    的头像 发表于 11-21 17:42 447次阅读
    <b class='flag-5'>PCL</b>泊松盘<b class='flag-5'>采样</b>具体流程

    PCL中非均匀体素采样介绍

    非均匀体素采样 SamplingSurfaceNormal,将输入空间划分为网格,直到每个网格中最多包含N个点,并在每个网格中随机采样点。 使用每个网格的N个点计算法线。 在网格内采样的所有点都分配
    的头像 发表于 11-21 17:50 434次阅读