PCL知识点——体素化网格方法对点云进行下采样

本文介绍了PCL库中利用体素化网格方法进行点云下采样,以减少点数量的同时保持形状特征。VoxelGrid类创建三维体素栅格,通过点的重心来近似表示点云,提高算法效率。此外,还讲解了点云数据结构,如PointXYZ、PointXYZI等,并涉及点云数据的读写,以及在ROS环境下实时获取与可视化的应用。
摘要由CSDN通过智能技术生成
体素化网格方法:

“使用体素化网格方法实现下采样,即减少点的数量,减少点云数据,并同时保持点云的形状特征,在提高配准、曲面重建、形状识别等算法速度中非常实用。
PCL实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格(可把体素栅格想象为微小的空间三维立方体的集合),然后在每个体素(即三维立方体)内,用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点就用一个重心点最终表示,对于所有体素处理后得到过滤后的点云。这种方法比用体素中心来逼近的方法更慢,但它对于采样点对应曲面的表示更为准确。”

2 知识点补充

2.1 点云数据结构

根据激光测量原理得到的点云,包含三维坐标信息(xyz)和激光反射强度信息(intensity),激光反射强度与仪器的激光发射能量、波长,目标的表面材质、粗糙程度、入射角相关。根据摄影测量原理得到的点云,包括三维坐标(xyz)和颜色信息(rgb)

PCL的基本数据类型是PointCloud,一个PointCloud是一个C++的模板类,它包含了以下字段:

width(int):指定点云数据集的宽度
对于无组织格式的数据集,width代表了所有点的总数
对于有组织格式的数据集,width代表了一行中的总点数
height(int):制定点云数据集的高度
对于无组织格式的数据集,值为1
对于有组织格式的数据集,表示总行数
points(std::vector):包含所有PointT类型的点的数据列表

PLC的衍生类型如下:

PointXYZ - float x, y, z
PointXYZI - float x, y, z, intensity
PointXYZRGB - float x, y, z, rgb
PointXYZRGBA - float x, y, z, uint32_t rgba
Normal - float normal[3], curvature 法线方向,对应的曲率的测量值
PointNormal - float x, y, z, normal[3], curvature 采样点,法线和曲率
Histogram - float histogram[N] 用于存储一般用途的n维直方图

2.2 点云数据的读写
#include <iostream>
#include <pcl/io/pcd_io.h>  //PCD数据,读写类相关的头文件
#include <pcl/point_types.h>  //PCL中支持的点类型头文件,包含一些PointT类型的结构体声明,如:pcl::PointXYZ该类型


int read();
void write();

int main(int argc,char** argv)
{
   
	int ret_r = read();
	write();


	return 0;
}


int read()
{
   
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);//创建一个PointCloud<PointXYZ> Ptr共享指针并进行实例化。
	//pcl::PointCloud<pcl::PointXYZ>可以类比vector<int>	
	if(pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd",*cloud)==-1)//打开点云文件
	{
   
		PCL_ERROR("Couldn't read file test_pcd.pcd\n");
		return -1;
	}
	
	// 很重要!!!!
	//sensor_msgs::PointCloud2 cloud_blob;  //sensor_msgs::PointCloud2是一类点云结构(ROS点云话题),可以和pcl::PointCloud<T>这个转换
	//pcl::io::loadPCDFile("test_pcd.pcd", cloud_blob);
	//pcl::fromROSMsg(cloud_blob, *cloud);  //将sensor_msg
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值