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

点云三维重建有关原理相关推荐

  1. 彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进

    视觉三维重建 = 定位定姿 + 稠密重建 + surface reconstruction +纹理贴图.三维重建技术是计算机视觉的重要技术之一,基于视觉的三维重建技术通过深度数据获取.预处理.点云配准 ...

  2. 图像与点云三维重建算法

    图像与点云三维重建算法 单图像三维重建算法介绍 在开始讨论之前先说一下为什么要做单图像三维重建,原因其实很直观.总结起来就是两个字,"需要".我们很需要这类应用,如果可以做出来,不 ...

  3. 什么是云手机?云手机的原理是什么?

    什么是云手机? 云手机(Cloud Phone)是在云上运行APP的仿真手机.云手机服务根据不同场景提供多种规格的云手机,稳定24小时不间断,全面兼容Android原生APP,流畅运行大型手游,是移动 ...

  4. 云技术是什么_三分钟了解云技术的原理与发展

    什么是云技术 定义 云技术(Cloud technology)基于云计算商业模式应用的网络技术.信息技术.整合技术.管理平台技术.应用技术等的总称,可以组成资源池,按需所用,灵活便利.云计算技术将变成 ...

  5. 深度图像转换为点云数据计算原理及代码实现

    深度图像转换为点云数据计算原理及代码实现 1.开发环境 2. 深度图转点云计算原理 3.代码实现 3.1 头文件Depth_TO_PointCloud.h 3.2Depth_TO_PointCloud ...

  6. 示例程序:关于双目视觉,标定,立体匹配(视差算法),点云,双目三维重建的原理以及代码

    Evision双目视觉 关于双目视觉的一些总结 说明 前言 相机模型 标定 视差算法:立体匹配 测量,三维重建 示例程序 参考文献 关于双目视觉的一些总结 说明 如果读者对于本文或者Evision程序 ...

  7. 让文物“活”起来,火山引擎视频云三维重建技术揭秘

    动手点关注 干货不迷路 中国历史悠久,文化底蕴深厚,文物数目众多,文物作为前人智慧的结晶,其文献价值不言而喻.古籍是记录中华文明的重要载体,也是流传至今的宝贵文化遗产,文物保护也是一项长期重要的基础工 ...

  8. matlab点云三维重构,无序点云三维重建方法技术

    [技术实现步骤摘要] [专利摘要]本专利技术提供一种,包括以下步骤:S1.分区:根据研究内容,将采集到的点云分为变形区的点云和非变形区的点云:S2.点云数据压缩:对非变形区的点云,进行点云数据压缩:压 ...

  9. 点云配准方法原理(NDT、ICP)

    配准是点云处理中的一个基础问题,众多学者此问题进行了广泛而深入的研究,也出现了一系列优秀成熟的算法,在三维建模.自动驾驶等领域发挥着重要的作用. 本文主要介绍粗配准NDT (Normal Distri ...

最新文章

  1. fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1
  2. java中class对象的理解 讲得相当不错 很接地气 引用下
  3. 加强原始创新和基础研究的前提:三项破解之策
  4. 调优之系统篇--cpu,内存
  5. NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
  6. Linux下select, poll和epoll IO模型的详解
  7. 创建ACCESS数据库,并且创建表和数据。重点:关闭ACCESS数据库引用
  8. 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
  9. 让struts2和servlet共存
  10. linux下grpc安装编译,linux下安装grpc插件 (c++和go语言)
  11. java毕设用的框架_分享四个Java低代码快速开发平台贼好用, 私活毕设神器
  12. sql2008中打开“外围应用配置器”和启用 OpenRowSet 和 OpenDataSource函数
  13. jQuery数组处理汇总
  14. JDBC学习(五、预编译语句对象)
  15. 互动媒体技术之绘画系统
  16. matlab 绘图颜色参考 linspace
  17. 如何读写8bit rgb彩色png图像
  18. SafetyNet 漏洞rootutils 利用
  19. Open3D 渐进式形态学滤波
  20. IPV6地址解析与DAD机制实验分析

热门文章

  1. 用命令行编译java并生成可执行的jar包
  2. Android开发--FileInputStream/OutStream/Sdcard写入
  3. Python学习之数组
  4. oracle的cols,Oracle cols_as_rows 比对数据
  5. 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
  6. php比较函数代码,php字符串比较函数
  7. ubuntu mysql5.6 编译安装_Ubuntu14.04编译安装mysql5.6.26
  8. java写微信小程序答辩问题_微信小程序毕业设计选题和毕业论文怎么写,答辩流程是怎样的?...
  9. 为什么用pyqt的不多_家具看起来都差不多?其实不一样!
  10. python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...