点云滤波---提取子集滤波器

【5】PCL滤波器之ExtractIndices滤波器 【1】ExtractIndices滤波器 基于某一个分割算法提取点云的子集. 思路:ExtractIndices通过分割算法提取部分点云数据子集的下标索引,代码过程步骤: (1) 使用之前的体素栅格下采样方法进行下采样; (2) SAC平面参数模型提取符合该几何模型的点云数据子集,再利用分割算法进行提取符合几何平面的点云数据子集; (3) 利用negative变量可以提取相反的点云集剩余... 阅读详情

点云滤波---提取子集滤波器

适用对象

点云分割算法可以输出分割目标的索引,该滤波器是点云分割的后续步骤。

工作原理

根据点云分割算法输出的索引从点云中提取点的子集。

PCL核心代码实现

pcl::ExtractIndices<pcl::PointXYZ> extract;	//设置滤波器对象
extract.setInputCloud (pointCloud_raw);		//设置输入的点云
extract.setIndices (inliers);				//设置点云分割后索引
extract.setNegative (false);				//设置提取内点,若是true则表示提取外点
extract.filter (*pointCloud_filter);		//执行滤波

完整代码:

#include <iostream>
#include <pcl/ModelCoefficients.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/extract_indices.h>

int main (int argc, char** argv)
{
  pcl::PCLPointCloud2::Ptr cloud_blob (new pcl::PCLPointCloud2), cloud_filtered_blob (new pcl::PCLPointCloud2);
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>), cloud_p (new pcl::PointCloud<pcl::PointXYZ>), cloud_f (new pcl::PointCloud<pcl::PointXYZ>);

  // Fill in the cloud data
  pcl::PCDReader reader;
  reader.read ("table_scene_lms400.pcd", *cloud_blob);

  std::cerr << "PointCloud before filtering: " << cloud_blob->width * cloud_blob->height << " data points." << std::endl;

  // Create the filtering object: downsample the dataset using a leaf size of 1cm
  pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
  sor.setInputCloud (cloud_blob);
  sor.setLeafSize (0.01f, 0.01f, 0.01f);
  sor.filter (*cloud_filtered_blob);

  // Convert to the templated PointCloud
  pcl::fromPCLPointCloud2 (*cloud_filtered_blob, *cloud_filtered);

  std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points." << std::endl;

  // Write the downsampled version to disk
  pcl::PCDWriter writer;
  writer.write<pcl::PointXYZ> ("table_scene_lms400_downsampled.pcd", *cloud_filtered, false);

  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
  pcl::PointIndices::Ptr inliers (new pcl::PointIndices ());
  // Create the segmentation object
  pcl::SACSegmentation<pcl::PointXYZ> seg;
  // Optional
  seg.setOptimizeCoefficients (true);
  // Mandatory
  seg.setModelType (pcl::SACMODEL_PLANE);
  seg.setMethodType (pcl::SAC_RANSAC);
  seg.setMaxIterations (1000);
  seg.setDistanceThreshold (0.01);

  // Create the filtering object
  pcl::ExtractIndices<pcl::PointXYZ> extract;

  int i = 0, nr_points = (int) cloud_filtered->points.size ();
  // While 30% of the original cloud is still there
  while (cloud_filtered->points.size () > 0.3 * nr_points)
  {
    // Segment the largest planar component from the remaining cloud
    seg.setInputCloud (cloud_filtered);
    seg.segment (*inliers, *coefficients);
    if (inliers->indices.size () == 0)
    {
      std::cerr << "Could not estimate a planar model for the given dataset." << std::endl;
      break;
    }

    // Extract the inliers
    extract.setInputCloud (cloud_filtered);
    extract.setIndices (inliers);
    extract.setNegative (false);
    extract.filter (*cloud_p);
    std::cerr << "PointCloud representing the planar component: " << cloud_p->width * cloud_p->height << " data points." << std::endl;

    std::stringstream ss;
    ss << "table_scene_lms400_plane_" << i << ".pcd";
    writer.write<pcl::PointXYZ> (ss.str (), *cloud_p, false);

    // Create the filtering object
    extract.setNegative (true);
    extract.filter (*cloud_f);
    cloud_filtered.swap (cloud_f);
    i++;
  }

  return (0);
}

测试的时候,需要先下载table_scene_lms400.pcd

参考资料

Extracting indices from a PointCloud

PCL学习记录-5 Filter-5 Extracting indices 滤波器( 基于某一分割算法提取点云中的一个子集)功能及用法解析 通过Extracting indices滤波器,从点云数据中提取出来一个子集。 来源:官方文档:https://pcl.readthedocs.io/projects/tutorials/en/latest/extract_indices.html#extract-indices 一.使用Extracting indices 滤波器,并通过某一分割算法,从点云中提取出来一个点云子集 二.使用Extracting indices 滤波器时,进行分割+取样(后续使用到这个方法时,再添加细节内容,先放.. 阅读详情

相关推荐

PCL点云库学习笔记(滤波)

PCL点云库学习笔记(六)点云滤波一、概述二、使用直通滤波器三、使用VoxelGrid滤波器进行下采样 点云滤波 一、概述 由于测量误差,某些数据集会出现大量阴影点。 通过对每个点的邻域进行统计分析,并修剪不符合特定条件的那些异常值,可以过滤掉某些异常值。 PCL中的稀疏离群值的消除,是基于输入数据集中点到邻域点的距离分布。 对于每个点,将计算从该点到其所有邻居的平均距离。 通过假定结果分布是具有均值和标准差的高斯分布,可以将其平均距离在由全局距离均值和标准差定义的区间之外的所有点视为离群值。 二、使用直通

Catog的博客 1211

PCL 随机采样一致方法(RANSAC)分割

随机采样一致方法(RANSAC) 采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。RANSAC算法假设数据中包含正确数据和异常数据(或称为噪声)。正确数据记为内点(inliers),异常数据记为外点(outliers)。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。该算法核心思想就是随机性和假设性,随机性是根据正确数据出现概率去随机选取抽样数据,根据大数定律,随机性模拟可以近似得到正确结果。假设性是假设选取出的抽样数据都是正确数据,然后用这些正确数

生活如此美好,致敬每一个热爱“热爱”的人! 3026

PCL学习:滤波—ExtractIndices滤波器

ExtractIndices ExtractIndices滤波器,基于某一分割算法提取点云中的一个子集。 pcl::ExtractIndices< PointT > #include <iostream> #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h> #includ...

zfjBIT的专栏 4582

PCL学习笔记(十七)-- ExtractIndices滤波器分割子集

一、简介 利用ExtractIndices滤波器,可以提取出点云中的子集。 二、代码分析 1)首先,需要对所用到的点云格式进行转换: pcl::PCLPointCloud2::Ptr cloud_blob(new pcl::PCLPointCloud2), cloud_filtered_blob(new pcl::PCLPointCloud2); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl..

不学会C++不改名 2174

table_scene_lms400.rar

table_scene_lms400.pcd数据

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4309

PCL 库特征提取

(Point Cloud Library)是用于处理2D/3D 图像以及点云的一个大型开源项目。学习PCL最好的途径是阅读其官网文档(虽然PCL的网站文档稍微有点“丑”,但是其内容十分详尽。从应用的角度而言,PCL可以用于点云的分割、分类、校准以及可视化等方面。从理论角度而言,PCL中包含的众多算法能更好得帮助人们理解与创造新的点云算法。无论是工业应用还是科研攻关,PCL都能在三维数据处理领域祝您一臂之力。激光雷达作为自动驾驶最常用的传感器,经常需要使用激光雷达来做建图、定位和感知等任务。

人无远虑,必有近忧 3160

dummy机械臂代码学习(六)

CLI-Tool文件夹下又包含四个子文件夹,以及一个gitignore文件、一个run_shell.py的python文件、一个run.bat文件和一个zadig exe文件。库解析命令行参数,并根据不同的命令执行相应的操作。Zadig是一个用于Windows操作系统的开源工具,它的主要功能是安装和配置USB驱动程序。的目的呢就是确保在版本控制过程中,不必要的或自动生成的文件被忽略掉,来保持代码仓库的干净和整洁。,DummyStudio的软件作者已放在GitHub,我们主要看CLI-Tool文件夹就行。

jumaohhh的博客 1434

PCL教程-点云滤波之直通滤波器

算法原理 直通滤波的作用是过滤掉在指定维度方向上取值不在给定值域内的点。 实现原理如下: 首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。直通滤波器简单高效,适用于消除背景等操作。 PCL中的pcl:PassThrough类实现对用户给定点云某个字段的限定下,对点云进行简单的基本过滤,例如限制过滤掉点云中所有Z字段不在某个范围内的点,该类的使用比较灵活但完全取决于用户的限定

DayDayUp 8883

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

YOLOv11 改进策略:引入 NWD 损失函数提高小目标检测精度

YOLO(You Only Look Once)是一种实时目标检测算法,能够有效地预测图像中多个物体的边界框和类别概率。其高效性使它成为自动驾驶、视频监控等领域的理想选择。NWD 是一种基于 Wasserstein 距离的损失函数,其通过归一化处理,更好地评估预测框和真实框之间的几何偏差。这种方法不仅仅关注重叠区域,而且考虑中心点和尺度信息,提高了对小目标的敏感度。

走向CTO的路上... 2007

13 从点云中提取子集--滤波器

使用滤波器,基于某一分割算法提取点云中的子集。

qq_73014654的博客 279

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

PCL的点云滤波

    点云数据中会存在噪声点,离群点这些我们在后续操作中不需要的点,所以需要滤波删除这些点。这个过程也可以称为点云预处理。同时预处理还包括孔洞修复,数据压缩等,这里我们暂时只讨论噪声点和离群点,其他后续如有需要再学习。通过预处理后,才能更好的进行配准、特征提取、曲面重建、可视化等后续应用处理。pcl/filters模块提供了一些滤波处理算法,接下来对其中的一部分进行介绍。 使用直通滤波器对点云进...

qq_43407445的博客 2119

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 571

【RL in VLA】VLA中的强化学习

本文提出了一种名为 Reinforcement Learning Distilled Generalist(RLDG) 的方法,通过强化学习生成高质量训练数据来微调机器人基础模型。通过在多个精确操作任务上的实验,我们证明了 RLDG 在成功率和泛化能力上显著优于使用人类演示的传统微调方法。RLDG 不仅减少了对人类演示数据的依赖,还展示了在复杂多阶段任务中的灵活性和有效性。

三木今天学习了嘛の博客 2257

PCL——点云滤波

1、使用直通滤波器对点云进行滤波处理 对指定的某一维度实行一个简单的滤波,即去掉在用户指定范围内部(或外部)的点 代码实现: #include <iostream> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> int main (int argc, char** argv...

emm@amiao的博客 1518

[STC32G144K246入门第三步]驱动串口收发(接收不定长数据)

本文介绍了STC32G144K246单片机的串口功能配置与使用。该芯片具有8组独立USART,支持异步/同步模式,各串口可独立配置波特率并支持DMA传输。重点讲解了串口寄存器配置方法,包括引脚设置、波特率计算和中断处理。特别指出RX引脚需配置为开漏或准双向口以避免接收乱码。还介绍了通过定时器实现不定长数据接收的技术方案,并提供了完整的初始化代码和中断处理函数示例。文中包含串口时序图、寄存器配置表等实用参考信息,适合嵌入式开发者快速上手多串口应用开发。

sinat_58149788的博客 197

PCL点云库学习笔记(4)——点云滤波

1.PCL滤波算法及相关概念 1)需要进行滤波的情况及对应的处理方式: 点云数据密度不规则需要平滑处理——按具体给定的规则限制过滤 因遮挡造成离群点 大量数据——降采样 噪声数据 2)双边滤波:通过取临近点的加权平均来修正当前采样点的位置,从而达到滤波的效果。同时剔除与当前采样点差异较大的相邻采样点,达到保持原有特征的目的。 2.直通滤波器对点云处理 指定某一维度实行简单滤波,即去掉用户指定范围内部(或者外部)的点。 #include <iostream> #include <ctime&

张飞飞的博客 1296

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PCL学习笔记——点云滤波(三)

五. 使用ExtractIndices滤波器从一个点云中提取一个子集 基于某一分割算法提取点云中的一个子集 代码如下: #include <iostream> #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #incl...

直撞三千 827

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【PCL】(二十)ExtractIndices滤波器提取点云中的点

以下代码实现用ExtractIndices滤波器根据分割算法输出的索引从点云中提取点的子集。

weixin_44378835的博客 932

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PCL_6---点云滤波

标题1、直通滤波器对点云进行滤波代码实验结果 经典滤波算法: 双边滤波 高斯滤波 条件滤波 直通滤波 基于随机采样一致性滤波 1、直通滤波器对点云进行滤波 代码 #include <iostream> #include <ctime> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> int main (int argc, char** argv) { srand(

平平酱的博客 877

PCL中点云滤波器的使用(Filtering In PCL)

1 开发环境配置 (1) VS2015 & PCL1.8.1 (2) 配置PCL头文件及库目录 Include: $(PCL_ROOT); $(PCL_ROOT)\include\pcl-1.8; $(PCL_ROOT)\3rdParty\Eigen\eigen3; $(PCL_ROOT)\3rdParty\FLANN\include; $(PCL_ROOT)\3rdParty\V...

Asher_zheng的专栏 4395

pcl之点云滤波(一)

pcl点云处理

weixin_43263382的博客 485

用pcl读ply文件_PCL滤波介绍(3)

(1)从一个点云中提取索引(2019-12-23 这里说明一个这种提取索引的方法还是特别有用的,并且在较大的工程项目中,避免了过多的数据字段的复制等操作。本章给出基本实例,欢迎关注公众号,参与交流和分享) 如何使用一个,基于某一分割算法提取点云中的一个子集。代码解析#include <iostream> #include <pcl/ModelCoeffic...

weixin_39840111的博客 330

July 30, 2020

特别说明 1.本专栏(每日300行)里面的代码片段,只是自己学习记录用,如有侵权请联系我,我立即删除!!! 2.本页代码均来源于《点云库pcl从入门到精通》,如需要用于商业用途,请注明版权所有者(《点云库pcl从入门到精通》)。 目录代码片段1: PCLPlotter可视化特征直方图代码片段2:使用直通滤波器对点云进行滤波处理代码片段3: 使用VoxelGrid滤波器对点云进行下采样代码片段4:使用StatisticalOutlierRemoval滤波器移除离群点代码片段5:使用参数化模型投影点云代码片段

naonao8986421的博客 256
上一篇: 点云滤波---投影滤波器
下一篇: 点云滤波---条件滤波器
Leo-Ma
博客等级 码龄11年 1701粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值