PCL之体素网格滤波器--VoxelGrid
作用:使用体素化网格方法实现下采样,可在保持点云形状特征的情况下减少点云的数量;在提高配准、曲面重建、形状识别等算法的速度。
原理:PCL实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格,然后在每个体素内,用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点就用一个重心点最终表示,对于所有体素处理后得到过滤后的点云。
效果: 这种方法比用体素中心来逼近的方法更慢,但它对于采样点对应曲面的表示更为准确。
代码展示:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/pcl_visualizer.h>using namespace std;int main() {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);// 加载点云// 点云文件地址:https://github.com/PointCloudLibrary/data/blob/master/tutorials/table_scene_lms400.pcdpcl::io::loadPCDFile<pcl::PointXYZ>("source/table_scene_lms400.pcd",*cloud);// 创建滤波器对象pcl::VoxelGrid<pcl::PointXYZ> sor;sor.setInputCloud (cloud); //设置需要滤波的点云sor.setLeafSize (0.1f, 0.1f, 0.1f); //设置滤波时创建的体素体积为0.1m3sor.filter (*cloud_filtered); //执行滤波处理,并将结果输出cloud_filteredcout << "Cloud after filtering: " << cloud_filtered->points.size() << endl;pcl::visualization::PCLVisualizer::Ptr view(new pcl::visualization::PCLVisualizer("ShowCloud"));// 创建两个视口: 第一个用于显示原始点云, 第二个用于显示滤波后的点云int v1(0);view->createViewPort(0.0, 0.0, 0.5, 1.0, v1);view->setBackgroundColor(0, 0, 0, v1);view->addText("Raw point clouds", 10, 10, "v1_text", v1);int v2(0);view->createViewPort(0.5, 0.0, 1, 1.0, v2);view->setBackgroundColor(0.1, 0.1, 0.1, v2);view->addText("filtered point clouds", 10, 10, "v2_text", v2);view->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);view->addPointCloud<pcl::PointXYZ>(cloud_filtered, "cloud_filtered", v2);// 设置点云的渲染颜色view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_filtered", v2);view->addCoordinateSystem(1.0);view->initCameraParameters();while (!view->wasStopped()) {view->spinOnce(100);}return 0;
}
结果展示
PCL之体素网格滤波器--VoxelGrid相关推荐
- 【PCL自学:Filtering】PCL中的各类滤波器介绍与使用 (持续更新)
PCL_filter模块中各类滤波器目录 一.直通滤波器(PassThrough):用于阈值滤除 1.直通滤波器介绍 2.示例代码 二.体素滤波器(VoxelGrid filter):用于下采样 1. ...
- PCL超体素分割代码vs2019+pcl1.11.1实现
文章目录 1.VS代码实现 2.点云数据 3.结果 1.VS代码实现 声明:代可以在vs2019+pcl1.11.1上直接运行:由于没有RGBA数据,在demo点云文件上增加了RGBA信息,验证了代码 ...
- PCL——超体素(SuperVoxel)、超体聚类分割
- SLAM第12讲 建图实践部分
1 实践:单目稠密重建 1.1 我们需要下载示例程序所需要的数据集http://rpg.ifi.uzh.ch/datasets/remode_test_data.zip.它提供了一架无人机采集到的单目 ...
- 直接激光雷达里程计:基于稠密点云的快速定位
点云PCL免费知识星球,点云论文速读. 文章:Direct LiDAR Odometry:Fast Localization with Dense Point Clouds 作者:Kenny Chen ...
- 基于激光雷达和单目视觉融合的SLAM和三维语义重建
文章:SLAM and 3D Semantic Reconstruction Based on the Fusion of Lidar and Monocular Vision 作者:Lu Lou, ...
- 2022/6/29学习日志
2.4.1 基于KD-Tree的空间结构 首先根据某一选轴点策略,确定坐标轴维度.(维度?)垂直于坐标轴的平面作为超平面来分割集合,取对应维度的坐标值,求出坐标值的中位数,取中位数对应的点为根节点,用 ...
- 经典文献阅读之--DLO
0. 简介 这篇SLAM论文<Direct LiDAR Odometry: Fast Localization with Dense Point Clouds>作为NASA喷气推进实验室C ...
- 一文看懂激光点云滤波处理
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文章导读 点云滤波通常是点云预处理的第一步,只有将噪声点.离群点. ...
最新文章
- 在线qmc0转换mp3工具_如何将M4A格式的音频转换为MP3格式?只需一步搞定
- 维特森 VTD72K14 多圈空心角度传感器 角位移传感器
- 在linux下安装配置DNS服务器
- 在eclipse中反编译并查看jar包的class文件,批量反编译
- 【原创】C++变量作用域(三)
- Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次
- de.hybris.platform.servicelayer.dto.converter.ConversionException
- Linux重定向的理解
- paypal创建订单后怎么获得id_5步创建Facebook商店(最新版教程)学习如何在Facebook上卖货...
- RE2正则表达式引擎资料
- 暑假集训 div1 B Derangement 交换数字 思维死角
- 平滑滤波器模板尺寸与平滑效果的关系_冲压模具丨折弯尺寸、毛刺、、卯合、滑块不顺的根源...
- 推理证明技巧之人肉计算机,四大推理方法搞定高中证明题
- 2022-07-12
- 一键重启tomcat
- 查看ESP32模组中Flash颗粒以及芯片信息
- 《神经网络与深度学习》习题答案
- 8.9 HITTING SET problem
- [生存志] 第145节 班固著汉书
- 浏览器在b站等网站看视频无法用鼠标滑轮控制声音
热门文章
- python 发送 smtp
- .Net程序集强签名详解
- asp.net 2.0 中如何让membership接口使用自定义数据库。
- 批量自动化配置Dell服务器idrac管理口IP
- Linux下超简单的Mysql自动备份+定期删除之前备份文件脚本
- 升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案
- log4j不输出日志的解决方案
- Storm编译打包过程中遇到的一些问题及解决方法
- Android Studio 编译异常Could not execute build using Gradle installation解决办法
- JS传值中文乱码解决方案