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。