本文主要是介绍【PCL】(九)点云体素下采样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(九)Filtering 体素下采样
点云样例:
https://raw.github.com/PointCloudLibrary/data/master/tutorials/table_scene_lms400.pcd
以下程序实现对读取的点云进行体素下采样,并将得到的点云保存。
voxel_grid.cpp
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>int main ()
{pcl::PCLPointCloud2::Ptr cloud (new pcl::PCLPointCloud2 ());pcl::PCLPointCloud2::Ptr cloud_filtered (new pcl::PCLPointCloud2 ());// 读取点云数据pcl::PCDReader reader;reader.read ("table_scene_lms400.pcd", *cloud); std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height << " data points (" << pcl::getFieldsList (*cloud) << ")." << std::endl;// 使用体素大小为1cm的体素下采样滤波器进行滤波pcl::VoxelGrid<pcl::PCLPointCloud2> sor;sor.setInputCloud (cloud);sor.setLeafSize (0.01f, 0.01f, 0.01f); sor.filter (*cloud_filtered);std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points (" << pcl::getFieldsList (*cloud_filtered) << ")." << std::endl;// 保存下采样的点云pcl::PCDWriter writer;writer.write ("table_scene_lms400_downsampled.pcd", *cloud_filtered, Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), false);return (0);
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(voxel_grid)
find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable (voxel_grid voxel_grid.cpp)
target_link_libraries (voxel_grid ${PCL_LIBRARIES})
编译并运行:
./voxel_grid
PointCloud before filtering: 460400 data points (x y z intensity distance sid).
PointCloud after filtering: 41049 data points (x y z intensity distance sid).
原始点云(460400 个点):
下采样后的点云(41049 个点):
这篇关于【PCL】(九)点云体素下采样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!