本文目的
使用 VoxelGrid
滤波器(体素化网格滤波器)对含有大量点的点云进行下采样,方便后续处理。
最近采集点云数据,需要很高的分辨率和精度(大概0.1mm),就使用了号称是世界上精度和分辨率最高的 photoneo
深度相机:
采集一张点云图的大小,就达到了即将100MB的大小:
在后续使用 semantic-segmentation-editor点云标注工具
的时候根本操作不了或者异常卡顿:
能读取,但是卡死
所以点云降采样的需求就来了,使用体素化网格方法实现下采样,即减少点的数量,减少点云数据,并同时保持点云的形状特征,在提高配准、曲面重建、形状识别等算法速度中非常实用。
Get Started
原理
PCL实现的 VoxelGrid
类通过输入的点云数据创建一个三维体素栅格(可把体素栅格想象为微小的空间三维立方体的集合),然后在每个体素(即三维立方体)内,用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点就用一个重心点最终表示,对于所有体素处理后得到过滤后的点云。这种方法比用体素中心来逼近的方法更慢,但它对于采样点对应曲面的表示更为准确。
代码
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
int main(int argc, char **argv)
{
std::string pcd_read_in_path = argv[1];
std::string pcd_write_out_path = argv[2];
pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2());
// Fill in the cloud data
pcl::PCDReader reader;
// Replace the path below with the path where you saved your file
reader.read(pcd_read_in_path, *cloud);
std::cerr << "点云滤波前:" << cloud->width * cloud->height
<< " data points (" << pcl::getFieldsList(*cloud) << ")." << std::endl;
// Create the filtering object
pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.01f, 0.01f, 0.01f);
sor.filter(*cloud_filtered);
std::cerr << "点云滤波后:" << cloud_filtered->width * cloud_filtered->height
<< " data points (" << pcl::getFieldsList(*cloud_filtered) << ")." << std::endl;
pcl::PCDWriter writer;
writer.write(pcd_write_out_path, *cloud_filtered,
Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), false);
return (0);
}
CMakeLists.txt
文件如下:
cmake_minimum_required(VERSION 2.8 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})
编译运行,
原点云含有约318万个点,经过降采样后保留了约11万个点,而且很好保留了原点云的特征:
👆原点云图
👆降采样后的点云图
👆局部放大
链图片转存中…(img-hn4JFDPi-1667478255725)]
👆降采样后的点云图
[外链图片转存中…(img-JLqkiOeG-1667478255726)]
👆局部放大