概念
>> 点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)
体素(voxel) >> 立体像素
深度图(depth map,depth buffer, Z-buffer, Z-buffering 和 Z-depth)
>> 一张2D图片,每个像素都记录了从视点(viewpoint)到遮挡物表面(遮挡物就是阴影生成物体)的距离
多边形网格 >> 三维计算机图形学中表示多面体形状的顶点与多边形的集合,它也叫作非结构网格。
来源
激光测量
>> 包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向,以及仪器的发射能量,激光波长有关。
摄影测量
>> 三维坐标(XYZ)和颜色信息(RGB)
Install(failed)
Software
feature
λ 0 λ 0 + λ 1 + λ 2 \frac{\lambda_0}{\lambda_0+\lambda_1+\lambda_2} λ0+λ1+λ2λ0
2D
半径、点密度、面积、半径、点密度、面积
3D
半径、高程差、高程标准差、点密度、线性特征、平面特征、散乱特征、总方差、各向异性、特征熵、特征值和曲率
统计图特征
点特征直方图PFH、快速点特征直方图FPFH、视点特征直方图VFH
处理
滤波
>> 双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致性滤波
关键点
>> ISS3D、Harris3D、NARF,SIFT3D
特征描述
>> 法线和曲率的计算、特征值分析、SHOT、PFH、FPFH、3D Shape Context、Spin Image
分割
>> 区域生长、Ransac线面提取、全局优化平面提取、K-Means、Normalize Cut(Context based)、3D Hough Transform(线、面提取)、连通分析
分类
>> 基于点的分类,基于分割的分类,基于深度学习的分类(PointNet,OctNet)
配准
>> 精配准 稳健ICP、point to plane ICP、Point to line ICP、MBICP、GICP、NICP
SLAM(simultaneous localization and mapping) 即时定位与地图构建
三维重建
>> 泊松重建、 Delaunay triangulations、表面重建,人体重建,建筑物重建,树木重建。结构化重建:不是简单的构建一个Mesh网格,而是为场景进行分割,为场景结构赋予语义信息。场景结构有层次之分,在几何层次就是点线面。
实时重建 :重建植被或者农作物的4D(3D+时间)生长态势;人体姿势识别;表情识别;
点云数据管理
Data
*.PLY
>> Stanford大学开发的一套三维mesh模型数据格式,是一种多边形模型数据格式。
ply //关键字
format ascii 1.0 //文件编码格式
comment author: Greg Turk // 注释
comment object: another cube //注释
element vertex 8 // 定义元素为顶点 数目为8个
property float x // 上述顶点元素中的属性 x,数据类型为float
property float y // 上述顶点元素中的属性 y,数据类型为float
property float z // 上述顶点元素中的属性 z,数据类型为float
property uchar red // 上述顶点元素中的属性 red,数据类型为uchar
property uchar green // 上述顶点元素中的属性 green,数据类型为uchar
property uchar blue // 上述顶点元素中的属性 blue,数据类型为uchar
element face 7 // 定义面元素,数目为7个
property list uchar int vertex_index // 定义面元素内的列表属性,列表开头以uchar的数值表示列表的项目数,后面接着型态为int的顶点索引值(vertex_indices),顶点索引值从0开始。
// {property list <numerical-type>[列表元素数量] <numerical-type>[每个列表元素] <property-name>}
element edge 5 //定义元素为边,数目为5个
property int vertex1
property int vertex2
property uchar red
property uchar green
property uchar blue
end_header // 文件头部分结束
0 0 0 255 0 0 //顶点的开始,分别为x y z r g b
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2 //面的开始,这是个三角行,分别有第0 ,1, 2 相连
3 0 2 3
4 7 6 5 4 // 这是个四边形,顶点分别是第 7 6 5 4个点
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255 // 边的开始,顶点分别是第0个与第一个点,颜色是255,255,255
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255
*.pcd
>> PCL中PCD文件格式的正式发布是0.7版本(PCD_V7),每一个PCD文件包含一个文件头,它确定和声明文件中存储的点云数据的某种特性。PCD文件头必须用ASCII码来编码。
VERSION –指定PCD文件版本
FIELDS –指定一个点可以有的每一个维度和字段的名字
SIZE –用字节数指定每一个维度的大小
>> unsigned char/char (1byte)
>> unsigned short/short (2bytes)
>> unsignedint/int/float (4bytes)
>> double (8bytes)
TYPE –用一个字符指定每一个维度的类型 >> I/U/F
COUNT –指定每一个维度包含的元素数目
WIDTH –用点的数量表示点云数据集的宽度
>> 确定无序数据集的点云中点的个数
>> 确定有序点云数据集的宽度
HEIGHT –用点的数目表示点云数据集的高度
>> 有序点云数据集的高度(行的总数)
>> 序数据集它被设置成1(被用来检查一个数据集是有序还是无序)
VIEWPOINT–指定数据集中点云的获取视点 (坐标系转换)
POINTS–指定点云中点的总数
DATA –指定存储点云数据的数据类型
>> 文件头最后一行(DATA)的下一个字节就被看成是点云的数据部分了,它会被解释为点云数据。
>> PCD文件的文件头部分必须以上面的顺序精确指定,并且换行隔开,即:
VERSION、FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA
# .PCD v.7 - Point Cloud Data file format
VERSION .7 //指定PCD文件版本
FIELDS x y z rgb //指定一个点可以有的每一个维度和字段的名字
SIZE 4 4 4 4 //用字节数指定每一个维度的大小
TYPE F F F F //用一个字符指定每一个维度的类型
COUNT 1 1 1 1 //指定每一个维度包含的元素数目
WIDTH 213 //用点的数量表示点云数据集的宽度
HEIGHT 1 //用点的数量表示点云数据集的高度,无序点云会是1
VIEWPOINT 0 0 0 1 0 0 0 //指定数据集中点云的获取视点。
POINTS 213 //点云中点的数目
DATA ascii //数据保存的编码方式
0.93773 0.33763 0 4.2108e+06 //每个点的数据,根据FIELDS,可知按顺序分别是x,y,z rgb
0.90805 0.35641 0 4.2108e+06
*.LAS
>> LAS数据格式是一种二进制文件格式(2003年推出),LiDAR数据的工业标准格式,LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等。一个符合LAS标准的LIDAR文件分为三个部分:公用文件头块(PUBLICHEADERBLOCK)、变量长度记(VARIABLELENGTHRECORDS)和点数据记录(POINTDATARECORD)。
*.OBJ
>> obj是一种文本文件,通常用以“#”开头的注释行作为文件头,数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。
# The units used in this file are centimeters.
g default // 组名称
v -0.500000 -0.500000 0.500000 // v 代表顶点坐标
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000 //"vt"代表点的贴图坐标
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt 0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt 1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt -1.000000 0.000000
vt -1.000000 1.000000
vn 0.000000 0.000000 1.000000 //vn 代表顶点法线
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s off //表示关闭光滑组
g pCube1 //
usemtl initialShadingGroup //表示使用的材质
f 1/1/1 2/2/2 4/4/3 3/3/4 //f 面,顶点索引/uv点索引/法线索引
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21 1/1/22 3/3/23 5/14/24
*.E58 *.PT
相关库
open3D
>> Open3D 是一个可以支持 3D 数据处理软件快速开发的开源库。Open3D 前端公开了一组用 C++ 和 Python 写成的精心挑选的数据结构和算法,后端高度优化并设置为并行。代码较整洁,而且维护程度较高。作为intel的2018才公布的开源项目,在点云、网格、rgbd数据上都有支持。
PCL
>> PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台。缺点就是:目前库的维护好像停滞了……
CGAL
VCGLIB