PCD头文件
VERSION:指定PCD文件版本
FIELDS:指定一个点可以有的每一个维度和字段的名字
SIZE:用字节数指定每一个维度的大小
TYPE:用一个字符指定每一个维度的类型
COUNT:每一个维度包含的元素数目
WIDTH:无序点云数据集的点云个数;有序点云数据集的宽度(一行点的数目)
HEIGHT:无序数据集值为1;有序点云数据集的高度(行总数)
VIEWPOINT:指定数据集中点云的获取视点,视点信息被指定为平移+四元数,默认值为0 0 0 1 0 0 0
POINTS:指定点云中的点数
DATA:指定存储点云数据的数据类型,ASCII码(便于点云的修改)和二进制(简单快速)
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 320
HEIGHT 240
VIEWPOINT 0 0 0 1 0 0 0
POINTS 76800
DATA ascii
PCD作为文件格式的优势:
存储和处理有序点云数据集的能力;二进制数据类型下载存储到磁盘速度很快;存储不同的数据类型,无效点的存储为NAN类型;特征描述子的n维直方图。
PCD文件读取和写入
#include<iostream>
#include<pcl/point_types.h>
#include<pcl/io/pcd_io.h>
using namespace std;
using namespace pcl;
int main()
{
PointCloud<PointXYZ>::Ptr cloud(new PointCloud<PointXYZ>);
// one
PCDReader reader;
reader.read(file, *cloud);//file为pcd文件所在路径
//two
//io::loadPCDFile(file,*cloud);
//io::savePCDFile(file, *cloud);
return 0;
}
kd-tree和octree
kd-tree:一种数据结构,带有其他约束条件的二分查找树。kd-tree的每一级在指定维度上分开所有的子节点,较小数值在左子树,较大数值在右子树。
octree:对三维空间的几何实体进行体元剖分,每个体元具有相同的时间和空间复杂度,通过循环递归的划分方法对大小为2n2n2n的三维空间的几何对象进行剖分,从而构成一个具有根节点的方向图。若被划分的体元具有相同属性,则该体元构成一个叶节点,否则继续对该体元剖分成8个子立方体。