点云三维重建有关原理

3D信息采集常使用移动测绘系统(Mobile Mapping System),MMS包括移动激光扫描系统和数码相机。移动激光扫描系统主要由激光扫描仪和惯性导航系统组成,用于测量点的三维坐标和激光反射强度;数码相机用于测量点的三维坐标和颜色信息。根据移动激光扫描系统和数码相机采集的数据可以得到点云数据,包括三维坐标、激光反射强度、颜色信息。

车载装置上装有雷达和GPS/IMU,雷达可以获取车载装置到扫描点的距离与偏角,这样就可以得到扫描点在GPS坐标系中的三维坐标,而雷达与GPS都在车载上,两者的相对位置固定,于是又可以将点的GPS坐标系中的坐标转换为雷达坐标系中的坐标,而雷达坐标系是可以转化为大地坐标系的,这样每个扫描点在GPS坐标系中的坐标就转换为大地坐标系中的坐标。为了便于处理,再将大地坐标系中的坐标转换为本地坐标系中的坐标,事实上点云文件中的三维坐标指的是本地坐标系中的坐标。

3D建模的原理
3D建模的过程实际上是一个三维重建过程,这个过程包括点云数据预处理、分割、三角网格化、网格渲染。

由于激光扫描获取的数据中常常伴有杂点或噪声,影响了后续的处理,因此为了获取完整的模型,需要对点云数据进行一定的预处理,常用的方法有滤波去噪、数据精简、数据插补等。

分割是指将整个点云聚类为多个点云,每个点云对应独立的物体对象。分割算法大体上是先选定一个点,利用kd树计算以该点为中心的球,球内的点都属于该物体,球的半径设为一个阈值,之后遍历该物体的其他点都这么处理,最终会将点云分割成一个一个的物体。

为了便于后续的网格渲染,需要提前将点云进行三角网格化,采用的算法通常是凸包或凹包算法。
以上几步基本上已经得出了点云的空间拓扑结构,要得到逼真的物体,还需要网格渲染。网格渲染主要为纹理映射,就是将数码相机中的图像望网格上贴。
经过以上几步就完成了整个3D建模。

PCL库

PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。

PCL是一个模块化的C++模板库,其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

libpcl filters:如采样、去除离群点、特征提取、拟合估计等数据实现过滤器;
libpcl features:实现多种三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率,PFH和FPFH特征,旋转图像、积分图像,NARF描述子,RIFT,相对标准偏差,数据强度的筛选等等;
libpcl I/O:实现数据的输入和输出操作,例如点云数据文件(PCD)的读写;
libpcl segmentation:实现聚类提取,如通过采样一致性方法对一系列参数模型(如平面、柱面、球面、直线等)进行模型拟合点云分割提取,提取多边形棱镜内部点云等等;
libpcl surface:实现表面重建技术,如网格重建、凸包重建、移动最小二乘法平滑等;
libpcl register:实现点云配准方法,如ICP等;
libpclkeypoints:实现不同的关键点的提取方法,这可以用来作为预处理步骤,决定在哪儿提取特征描述符;
libpcl range :实现支持不同点云数据集生成的范围图像。

利用PCL编程,通常需要以下几步:
创建处理对象:(例如过滤、特征估计、分割等);
使用setInputCloud通过输入点云数据,处理模块;
设置算法相关参数;
调用计算(或过滤、分割等)得到输出。

书籍:

《计算机视觉中的多视几何》(Muiltiple View Geometry,简称MVG) (Richard Hartley 韦穗<译>)

文献:

·Sift 特征点检测

[1] Distinctive Image Features from Scale-Invariant Keypoints

·增量 SFM

[2] Photo Tourism Exploring Photo Collections in 3D

[3] Structure-from-Motion Revisited

·稠密匹配&&多视角立体视觉

[4] Multi-View Stereo for Community Photo Collections

·表面重建

[5] Reconstruction and Representation of 3D Objects with Radial Basis

·纹理贴图

[6] Let it be color! Large-Scale Texturing of 3D Reconstructions

3) 下面是比较著名的开源系统:

·MVE:

https://www.gcc.tu-darmstadt.de/home/proj/mve/index.en.jsp

·Bundler:

http://www.cs.cornell.edu/~snavely/bundler/

·VisualSFM:

http://ccwu.me/vsfm/

·openMVG:

https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/

·ColMap:

https://demuc.de/colmap/

Source and Executable Download:

http://www.cs.jhu.edu/~misha/Code/

4) 相关开源代码

COLMAP - Structure-from-Motion and Multi-View Stereo:

https://github.com/colmap/colmap

Multi-View Environment:

https://github.com/simonfuhrmann/mve

Algorithm to texture 3D reconstructions from multi-view stereo images:

https://github.com/nmoehrle/mvs-texturing

SFMedu: A Matlab-based Structure-from-Motion System for Education:

https://github.com/jianxiongxiao/SFMedu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值