1. 点云的相关概念:

1.1 点云的概念
点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。

1.2 点云的获取设备
深度相机 or 3d激光雷达

1.3 点云的内容
根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向,以及仪器的发射能量,激光波长有关。
根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB)。
结合激光测量和摄影测量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。

1.4 点云的属性
空间分辨率、点位精度、表面法向量。

1.5 点云的存储格式

*.pts; *.asc ; *.dat; .stl ; .imw;.xyz;.las。LAS格式文件已成为LiDAR数据的工业标准格式,LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等。

点云地表dem 点云有什么用_点云


C - class (所属类)

F - flight (航线号)

T - time (GPS时间)

I - intensity (回波强度)

R - return (第几次回波)

N - number of return (回波次数)

A - scan angle (扫描角)

RGB - red green blue (RGB颜色值)

1.6 点云数据类型
(1) pcl::PointCloudpcl::PointXYZ
PointXYZ 成员:float x,y,z;表示了xyz3D信息,可以通过points[i].data[0]或points[i].x访问点X的坐标值。
(2) pcl::PointCloudpcl::PointXYZI
PointXYZI成员:float x, y, z, intensity; 表示XYZ信息加上强度信息的类型。
(3) pcl::PointCloudpcl::PointXYZRGB
PointXYZRGB 成员:float x,y,z,rgb; 表示XYZ信息加上RGB信息,RGB存储为一个float。
(4) pcl::PointCloudpcl::PointXYZRGBA
PointXYZRGBA 成员:float x , y, z; uint32_t rgba; 表示XYZ信息加上RGBA信息,RGBA用32bit的int型存储的。
(5) PointXY 成员:float x,y;简单的二维x-y点结构
(6) Normal结构体:表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值,用第四个元素来占位,兼容SSE和高效计算。

2. 点云处理

2.1 介绍
点云处理的三个层次(Marr将图像处理分为三个层次):
低层次包括图像强化,滤波,关键点/边缘检测等基本操作
中层次包括连通域标记(label),图像分割等操作
高层次包括物体识别,场景分析等操作。工程中的任务往往需要用到多个层次的图像处理手段。

PCL官网对点云处理方法给出了较为明晰的层次划分,如图所示。

点云地表dem 点云有什么用_点云地表dem_02


common: 指代点云类型,包括XYZ,XYZC,XYZN,XYZG等很多类型点云,归根结底,最重要的信息还是包含在pointpcl::point::xyz中。

低层次点云处理: 滤波(filters),关键点(keypoints)/边缘检测。

中层次点云处理: 特征描述(feature),分割(segmention)与分类。

高层次处理: 配准(registration),识别(recognition).

点云在分割的难易程度上比图像处理更有优势,准确的分割也为识别打好了基础。

3. 点云数据处理技术

3.1 点云滤波(数据预处理)

点云滤波定义: 点云滤波,顾名思义,就是滤掉噪声。原始采集的点云数据往往包含大量散列点、孤立点,比如下图为滤波前后的点云效果对比。

点云地表dem 点云有什么用_数据处理_03


点云滤波主要方法:

双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致滤波、VoxelGrid滤波等,这些算法都被封装在了PCL点云库中。

3.2 点云关键点
在二维图像上,有Harris、SIFT、SURF、KAZE这样的关键点提取算法,这种特征点的思想可以推广到三维空间。
从技术上来说,关键点的数量相比于原始点云或图像的数据量减小很多,与局部特征描述子结合在一起,组成关键点描述子常用来形成原始数据的表示,而且不失代表性和描述性,从而加快了后续的识别追踪等对数据的处理了速度,故而,关键点技术成为在2D和3D 信息处理中非常关键的技术。
常见的三维点云关键点提取算法有一下几种:ISS3D、Harris3D、NARF、SIFT3D 这些算法在PCL库中都有实现,其中NARF算法是使用的比较多的

3.3 特征和特征描述

如果要对一个三维点云进行描述,光有点云的位置是不够的,常常需要计算一些额外的参数,比如法线方向、曲率、文理特征等等。如同图像的特征一样,我们需要使用类似的方式来描述三维点云的特征。

常用的特征描述算法有:法线和曲率计算、特征值分析、PFH、FPFH、3D Shape Context、Spin Image等。

**PFH:**点特征直方图描述子,**FPFH:**跨苏点特征直方图描述子,FPFH是PFH的简化形式。

点云地表dem 点云有什么用_点云_04


3.4 点云配准

点云配准的概念也可以类比于二维图像中的配准,只不过二维图像配准获取得到的是x,y,alpha,beta等放射变化参数,二三维点云配准可以模拟三维点云的移动和对其,也就是会获得一个旋转矩阵和一个平移向量,通常表达为一个4×3的矩阵,其中3×3是旋转矩阵,13是平移向量。严格说来是6个参数,因为旋转矩阵也可以通过罗格里德斯变换转变成13的旋转向量。

常用的点云配准算法有两种:正太分布变换和著名的ICP点云配准,此外还有许多其它算法,列举如下:

ICP:稳健ICP、point to plane ICP、point to line ICP、MBICP、GICP

NDT 3D、Multil-Layer NDT

FPCS、KFPSC、SAC-IA

Line Segment Matching、ICL

点云地表dem 点云有什么用_自动驾驶_05


3.5 点云分割与分类

点云的分割与分类也算是一个大Topic了,这里因为多了一维就和二维图像比多了许多问题,点云分割又分为区域提取、线面提取、语义分割与聚类等。同样是分割问题,点云分割涉及面太广,确实是三言两语说不清楚的。只有从字面意思去理解了,遇到具体问题再具体归类。一般说来,点云分割是目标识别的基础。

分割:区域声场、Ransac线面提取、NDT-RANSAC、K-Means、Normalize Cut、3D Hough Transform(线面提取)、连通分析

分类:基于点的分类,基于分割的分类,监督分类与非监督分类

3.6 SLAM图优化
SLAM又是大Topic,SLAM技术中,在图像前端主要获取点云数据,而在后端优化主要就是依靠图优化工具。而SLAM技术近年来的发展也已经改变了这种技术策略。在过去的经典策略中,为了求解LandMark和Location,将它转化为一个稀疏图的优化,常常使用g2o工具来进行图优化。下面是一些常用的工具和方法。
g2o、LUM、ELCH、Toro、SPA
SLAM方法:ICP、MBICP、IDC、likehood Field、 Cross Correlation、NDT

3.7 目标识别检测
这是点云数据处理中一个偏应用层面的问题,简单说来就是Hausdorff距离常被用来进行深度图的目标识别和检索,现在很多三维人脸识别都是用这种技术来做的。

3.8 变化检测
当无序点云在连续变化中,八叉树算法常常被用于检测变化,这种算法需要和关键点提取技术结合起来,八叉树算法也算是经典中的经典了。

3.9 三维重建

我们获取到的点云数据都是一个个孤立的点,如何从一个个孤立的点得到整个曲面呢,这就是三维重建的topic。

在玩kinectFusion时候,如果我们不懂,会发现曲面渐渐变平缓,这就是重建算法不断迭代的效果。我们采集到的点云是充满噪声和孤立点的,三维重建算法为了重构出曲面,常常要应对这种噪声,获得看上去很舒服的曲面。

常用的三维重建算法和技术有:

泊松重建、Delauary triangulatoins

表面重建,人体重建,建筑物重建,输入重建

实时重建:重建纸杯或者龙作物4D生长台式,人体姿势识别,表情识别

点云地表dem 点云有什么用_点云地表dem_06


3.10 点云数据管理

点云压缩,点云索引(KDtree、Octree),点云LOD(金字塔),海量点云的渲染

4. PCL库简介
点云数据处理中,不仅涉及前段数据的输入,中间数据和处理,还涉及到后端点云的渲染显示,如果这些函数都要我们亲自来实现,那么开发效率必然受到极大影响。在点云数据处理领域,有一个不可或缺的助手:PCL (Point Cloud Library)。PCL在点云数据处理中的地位犹如OpenCV在图像处理领域的地位,如果你接触三维点云数据处理,那么PCL将大大简化你的开发。