三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
算法原理请参考此文: kinect fusion 3D重建基本算法 http://log.csdn.net/xiaohu50/article/details/51592503
三维重建为三维空间实体建立适合计算机表示和处理的三维数学模型,建立一个相对于真实三维世界坐标系的计算机世界坐标系中的三维映射模型。
三维重建的关键因素为尺度(点的邻域覆盖单位)、相对位置(刚体物体的体元相对位置及位置映射)、原点位置。
对于尺度问题,通常有两种解决方法。第一种,直接得到实体到计算机世界坐标系的绝对映射关系,这就需要一个固定的位置映射系统,比如一个多个单目相机固定的摄影台,或者一个可以运动的双目摄像机。第二种,直接使用单目相机,使用特征配准或者位置点优化的方法,构建稀疏点集,进而构建模型,此种方法称为SLAM。
使用多目或者双目摄像机系统的系统,关键点在于表面重建,局部的表面重建递进完成可以构建最终的完整表面;使用单目相机关键在于稀疏点的构建,寻找表面的显著点,构建一个物体的完整网格,再次通过补全网格的方法构建模型。
一、绝对尺度
获得绝对尺度对于模型三维重建是非必须的,但对于一个扩展的三维重建应用在某些方面是必须的,比如希望与真实环境交互的移动机器人(扫地机器人、无人机、无人潜艇)。
多目系统可以根据固定的相机位置获取计算机世界中的度量单位代表的真实世界尺度,双目相机也可以根据双目的基线获得此意义。单目相机是怎么样得到这个真实尺度的呢?通过相机的内参——焦距的定义。
尺度的获取方式:多目和深度相机可以直接根据得到的深度值,进而由透视关系得到绝对尺度。对于单目相机,必须完成整个稀疏构建过程才能得到相对精确的深度,只有完成整个SLAM过程,才能得到真实尺度。
二、相对位置
相对位置的获取为表面重建问题,可分为稀疏表面重建和稠密重建。
深度相机根据双目时差原理等直接获得三维表面,这个表面是透视畸变的,可以通过透视校正的方法进行标准化补偿,得到 确定 面元,这就做到了表面重建的第一步。再经过一系列处理,最后通过ICP方法等稠密匹配的方法可以迭代构建整个三维模型。KinectFusion使用了特定的方法?
单目相机对于稠密匹配在算法的设计代价上是得不偿失的,而对于稀疏构建是合适的。而尺度的未知和深度的未知即是 地图构建和相机同步定位 对于稀疏构建则是必须同时进行的,这就是常见的SLAM问题。
三、原点位置
坐标系原点位置,是在三维表面重建时附带的一个小的问题,计算机数据世界坐标系的原点位置确定与否代表了不同的构建方案。
VS2013编译PCL1.8.0 还是失败了,没有编译成功,修改为KinectFusion的文章吧
VS2013社区版对个人开发者免费,终于可以不用该死的盗版了。Win10科技预览版X64系统开发版本下载,与Vs2013可以完美融合。
PCL的源代码版本已经进化到1.8.0,不知道增加了多少新特性,还是拿来编译一下试一试。对于VS2012无法编译PCL1.7.2的问题,原因是OpenNI不支持1600以上数字的编译器,即最高支持到VC10。
以下是注意事项:
1. OpenNI:
关于OpenNI的支持问题,把OpenNI 的包含文件 xxxxxGrab.h里面的 if ...>1600去掉,编译会完美通过;
2.Boost:
关于Boost的使用问题,Boost不支持CMAKE编译,支持VC12的最低版本为1.5.6.0,GIT有完整的Win二进制安装包;
3.VTK:
关于VTK的问题,使用罪行版本的VTK6.1,注意 源码里面的一个错误 :在58行处找到 宏定义 ,转到声明处, 补全定义数字 ,我补全的为 8;
<del> 118> Build all projects
========== Build: 118 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========</del>
4.CMAKE:
关于CMAKE,使用CMAKE3.0以上,添加了对VC12的支持。
四、深度相机方案对比:
文章链接:深度相机-三种方案对比(结构光、双目、TOF)
文章链接:深度相机-TOF总结
关键技术规格:
1.检测范围;2.检测精度;3.检测角度;4.帧率。
5.模块大小; 6.功耗
目前主流的深度摄像头方案在检测距离上、精度、检测速度上相差不大,区别在于:
1、结构光方案优势在于技术成熟,深度图像分辨率可以做得比较高,但容易受光照影响,室外环境基本不能使用;
2、TOF方案抗干扰性能好,视角更宽,不足是深度图像分辨率较低,做一些简单避障和视觉导航可以用,不适合高精度场合。受环境影响小,传感器芯片并不成熟,成本很高,实现量产困难。
3、双目方案,成本相对前面两种方案最低,但是深度信息依赖纯软件算法得出,此算法复杂度高,难度很大,处理芯片需要很高的计算性能,同时它也继承了普通RGB摄像头的缺点:在昏暗环境下以及特征不明显的情况下并不适用。
双目RGB、结构光、TOF三种主流技术的详细的比较:
方案 | 双目 | 结构光 | TOF |
---|---|---|---|
基础原理 | 双目匹配,三角测量 | 激光散斑编码 | 反射时差 |
分辨率 | 中高 | 中 | 低 |
精度 | 中 | 中高 | 中 |
帧率 | 低 | 中 | 高 |
抗光照(原理角度) | 高 | 低 | 中 |
硬件成本 | 低 | 中 | 高 |
算法开发难度 | 高 | 中 | 低 |
内外参标定 | 需要 | 需要 | |
总结:
1.双目方案,最大的问题在于实现算法需要很高的计算资源,导致实时性很差,而且基本跟分辨率,检测精度挂钩。也就是说,分辨率越高,要求精度越高,则计算越复杂,同时,纯双目方案受光照,物体纹理性质影响。
2.结构光方案,目的就是为了解决双目中匹配算法的复杂度和鲁棒性问题而提出,该方案解决了大多数环境下双目的上述问题。但是,在强光下,结构光核心技术激光散斑会被淹没。因此,不合适室外。同时,在长时间监控方面,激光发射设备容易坏,重新换设备后,需要重新标定。
3.TOF方案,传感器技术不是很成熟,因此,分辨率较低,成本高,但由于其原理与另外两种完全不同,实时性高,不需要额外增加计算资源,几乎无算法开发工作量,是未来。
三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)的更多相关文章
- 深度相机Astra Pro测试教程
最近在微信群内,很多群友在群友的推荐下,购买了Astra pro的深度相机,价格地道,物超所值!群友反馈积极,所以这里出一波简单的教程. 以下内容知识抛砖引玉,主要讲解windows下和Ubunt ...
- [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比
前言 尽管每辆汽车都有后视镜,但不可避免地都存在一个后视镜的盲区,倒车雷达则可一定程度帮助驾驶员扫除视野死角和视线模糊的缺陷,提高驾驶安全性.上一节已经分析清倒车雷达的语音模块(上一节),本节将深入分 ...
- 【计算机视觉】深度相机(一)--TOF总结
http://www.voidcn.com/blog/lg1259156776/article/p-6302915.html 1.1 TOF初探 TOF是Time of flight的简写,直译为飞行 ...
- 【计算机视觉】深度相机(四)--Realsense概览
本文参考下文,做一点个人使用补充. http://blog.csdn.net/app_12062011/article/details/52662143 转自: http://blog.csdn. ...
- [Unity3D]深度相机 Depth Camera
作为3D世界里最重要的窗口,摄像机的应用就显得很重要,毕竟在屏幕上看到的一切都得用摄像机矩阵变换得来的嘛.论坛上看到了一篇帖子讲非天空盒的背景做法,让我想起其实很多界面合成画面可以用摄像机之间的交互来 ...
- TensorFlow与主流深度学习框架对比
引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年 ...
- hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...
- 深度学习新星:GAN的基本原理、应用和走向
深度学习新星:GAN的基本原理.应用和走向 (本文转自雷锋网,转载已获取授权,未经允许禁止转载)原文链接:http://www.leiphone.com/news/201701/Kq6FvnjgbKK ...
- ROS与深度相机入门教程-在ROS使用kinect v1摄像头
ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...
随机推荐
- matlab读取mysql数据
conn = database('ci_bootstrap_3','root','1q1q1q1q','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3 ...
- 04-Linux系统编程-第01天(文件IO、阻塞非阻塞)
03-系统函数 系统编程章节大纲 1 文件I/O 2 文件系统 3 进程 4 进程间通信 5 信号 6 进程间关系 7 守护进程 8 线程 9 线程同步 10 网络基础 11 socket编程 12 ...
- ES6中的Symbol
---恢复内容开始--- Symbol 1.1 概述 保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 在es6之前,JavaScript ...
- idea整合eclipse后快捷键
- 利用负margin实现元素居中
原理就是对当前元素的position设置为absolute并且相对于父元素定位,先设置left:50%;top:50%使当前元素的左上角处于父元素的中心位置,之后再应用负margin特性使其中心位于父 ...
- 33.bulk json格式的理解
bulk json格式的理解 一.常规格式 按常规理解,bulk中json格式可以是以下方式 [{ "action": { }, "data": { } }] ...
- JS控制全屏,监听退出全屏事件
实现方案 //进入全屏 function requestFullScreen(de) { if(de.requestFullscreen){ //W3C de.requestFullscreen(); ...
- 邓_ Phpcms·二次开发
PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...
- cxdbtreelist的按记录查找节点
lst_projet.DataController.DataSet.Locate('pm_id',vPm_ID,[]); bl:= lst_projet.DataController.DataSet. ...
- 【hihocoder 1511】树的方差
[题目链接]:http://hihocoder.com/problemset/problem/1511 [题意] [题解] 有个方差的公式 V(X)=E(X2)−E(X)2 这里E(X)指的是X的期望 ...