6、ubuntu16.04 下 pcl的vogelgrid降采样处理 过程

pcl的vogelgrid降采样处理 过程

pcl安装:Ubuntu16.04下面 PCL的最简单的安装方法

PCL可以实现点云栅格化降采样的功能。PCL实现的VoxelGrid是通过将整个空间划分为若干大小相等的三维空间,把空间中的重心点代表整个栅格中的点保留下来,以此来达到实现降采样的目的。
这样处理过的点云的密度将会显著减小,但是能够很好的保留原始的曲面特征。

步骤:

1、新建voxel_grid_filter,voxel_grid_filter文件下新建voxel_grid_filter.cpp 代码见:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
 
#include <pcl/console/parse.h>
#include <pcl/visualization/cloud_viewer.h>

using namespace std;

int main(int argc, char** argv) 
{
     std::vector<int> filenames;
     filenames = pcl::console::parse_file_extension_argument (argc, argv, ".pcd");

     pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>);
     pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZI>);
     
     // 装载点云数据
     pcl::io::loadPCDFile(argv[filenames[0]], *cloud);
     
      //输出采样前的点云信息
      std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height 
       << " data points (" << pcl::getFieldsList (*cloud) << ")."<<endl;

     // 创建滤波器对象
     pcl::VoxelGrid<pcl::PointXYZI> sor;//滤波器处理对象
     
     sor.setInputCloud(cloud);//设置输入点云
     
      //设置滤波器处理时采用的体素大小的参数,体素大小是长宽高均初始化为0.5,可以自己设置改变最后降采样点的数量
     sor.setLeafSize(0.50f, 0.50f, 0.50f);

     sor.filter(*cloud_filtered);//执行下采样,下采样之后的点云数据保存到 cloud_filtered 中
     
     //输出采样后的点云信息
     std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height
          << " data points (" << pcl::getFieldsList(*cloud_filtered) << ")."<<endl;
      
    
     pcl::io::savePCDFileASCII("output_downsampled.pcd", *cloud_filtered); //保存转换后的点云

     pcl::visualization::CloudViewer viewer("Cloud Viewer");//创建名为Cloud Viewer
     
     viewer.showCloud(cloud_filtered);//showCloud函数是同步的,会在此处等待直到渲染显示为止
    
     while (!viewer.wasStopped())
     {
          //在此处添加其他处理
          
     }

     return (0);
}

2、voxel_grid_filter文件下新建CMakeLists.txt 代码见文件:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
 
project(voxel_grid_filter)
 
find_package(PCL 1.2 REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
 
add_executable (voxel_grid_filter voxel_grid_filter.cpp)
target_link_libraries (voxel_grid_filter ${PCL_LIBRARIES})

3、编译:
voxel_grid_filter文件下新建build编译。(在 voxel_grid_filter文件下打开终端跟着做就可以了):

   mkdir build
   cd build
   cmake ..
   make 
   cd ..
   build/voxel_grid_filter twoDroneLocalization.pcd

mkdir build
cd build/
cmake …
make #编译
cd …#切换目录
build/voxel_grid_filter twoDroneLocalization.pcd#执行,twoDroneLocalization.pcd可以换成自己的pcd文件,但是要放在voxel_grid_filte下

4、结束:

降采样前:

三维点云降采样前的样子

降采样后:

三维点云降采样后点样子


在这里插入图片描述

从可视化结果,明显也能看出,点的密度大小与整齐程度不同,虽然处理后数据量大大减少,但很明显其所含有的形状特征与空间结构信息与原始点云差不多。
降采样的结果会保存到同文件夹下的 output_downsampled.pcd 中。文件中包含(除了sample_result):
在这里插入图片描述
在voxel_grid_filter下打开终端,输入pcl_viewer twoDroneLocalization.pcd可查看原始点云,
当前文件夹打开终端输入:pcl_viewer output_downsampled.pcd 可查看酱菜样结果。
需要pcd格式文件做实验的话可以留言。

同样优秀的博客推荐:https://blog.csdn.net/weixin_42208807/article/details/109807006

PCl 经典资料:《点云库PCL学习教程》 朱德海
代码:voxel_grid_filter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜橙の学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值