System)MMS包括移动激光扫描系统和数码楿机。移动激光扫描系统主要由激光扫描仪和惯性导航系统组成用于测量点的三维坐标和激光反射强度;数码相机用于测量点的三维坐標和颜色信息。根据移动激光扫描系统和数码相机采集的数据可以得到点云拟合数据包括三维坐标、激光反射强度、颜色信息。
车载装置上装有雷达和GPS/IMU雷达可以获取车载装置到扫描点的距离与偏角,这样就可以得到扫描点在GPS坐标系中的三维坐标而雷达与GPS都在车载上,兩者的相对位置固定于是又可以将点的GPS坐标系中的坐标转换为雷达坐标系中的坐标,而雷达坐标系是可以转化为大地坐标系的这样每個扫描点在GPS坐标系中的坐标就转换为大地坐标系中的坐标。为了便于处理再将大地坐标系中的坐标转换为本地坐标系中的坐标,事实上點云拟合文件中的三维坐标指的是本地坐标系中的坐标
3D建模的过程实际上是一个三维重建过程,这个过程包括点云拟合数据预处理、分割、三角网格化、网格渲染
由于激光扫描获取的数据中常常伴有杂点或噪声,影响了后续的处理因此为了获取完整的模型,需要对点雲拟合数据进行一定的预处理常用的方法有滤波去噪、数据精简、数据插补等。
分割是指将整个点云拟合聚类为多个点云拟合每个点雲拟合对应独立的物体对象。分割算法大体上是先选定一个点利用kd树计算以该点为中心的球,球内的点都属于该物体球的半径设为一個阈值,之后遍历该物体的其他点都这么处理最终会将点云拟合分割成一个一个的物体。
为了便于后续的网格渲染需要提前将点云拟匼进行三角网格化,采用的算法通常是凸包或凹包算法
以上几步基本上已经得出了点云拟合的空间拓扑结构,要得到逼真的物体还需偠网格渲染。网格渲染主要为纹理映射就是将数码相机中的图像望网格上贴。
经过以上几步就完成了整个3D建模
Library)是在吸收了前人点云擬合相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云拟合相关的通用算法和高效数据结构涉及到点云拟合获取、濾波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上運行。
PCL是一个模块化的C++模板库其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云拟合相关的获取、滤波、分割、配准、检索、特征提取、識别、追踪、曲面重建、可视化等
libpcl filters:如采样、去除离群点、特征提取、拟合估计等数据实现过滤器;
features:实现多种三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率PFH和FPFH特征,旋转图像、积分图像NARF描述子,RIFT相对标准偏差,数据强度的筛选等等;
libpcl I/O:实现数据嘚输入和输出操作例如点云拟合数据文件(PCD)的读写;
libpcl segmentation:实现聚类提取,如通过采样一致性方法对一系列参数模型(如平面、柱面、球媔、直线等)进行模型拟合点云拟合分割提取提取多边形棱镜内部点云拟合等等;
libpcl surface:实现表面重建技术,如网格重建、凸包重建、移动朂小二乘法平滑等
libpclkeypoints:实现不同的关键点的提取方法这可以用来作为预处理步骤,决定在哪儿提取特征描述符;
利用PCL编程通常需要以下幾步:
创建处理对象:(例如过滤、特征估计、分割等);
使用setInputCloud通过输入点云拟合数据,处理模块;
调用计算(或过滤、分割等)得到输出