3D相机成像原理简介

随着机器视觉, 自动驾驶等颠覆性的技术逐步发展, 采用 3D 相机进行物体识别, 行为识别, 场景建模的相关应用越来越多, 可以说 3D 相机就是终端和机器人的眼睛。 那什么是 3D 相机呢, 跟之前的普通相机(2D) 比, 又有哪些差别。3D 相机又称之为深度相机, 顾名思义, 就是通过该相机能检测出拍摄空间的景深距离, 这也是与普通摄像头最大的区别。 普通的彩色相机拍摄到的图片能看到相机视角内的所有物体并记录下来, 但是其所记录的数据不包含这些物体距离相机的距离。 仅仅能通过图像的语义分析来判断哪些物体离我们比较远, 哪些比较近, 但是并没有确切的数据。 而 3D 相机则恰恰解决了该问题, 通过 3D 相机获取到的数据,我们能准确知道图像中每个点离摄像头距离, 这样加上该点在 2d 图像中的(x,y)坐标, 就能获取图像中每个点的三维空间坐标。 通过三维坐标就能还原真实场景, 实现场景建模等应用。从上面描述可以看出, 我们的眼睛就是一个天然的 3D 相机, 这主要得益于偏光原理, 当人眼在看任何物体时, 由于两只眼睛在空间有一定间距约为 5cm, 即存在两个视角。 这样形成左右两眼所看的图像不完全一样, 称为视差。 这种细微的视差通过视网膜传递到大脑里, 就能显示出物体的前后远近, 产生强烈的立体感, 这是 1839 年, 英国科学家温特斯顿发现的奇妙现象。 自然的人类就想到通过两个一定距离的普通摄像头来模拟人眼来获取 3D 数据。 这就是最初的双目立体相机, 鉴于双目相机的一些缺陷, 后来人们又发明了结构光和 TOF 的方法来获取 3D 数据。

目前市面上常有的 3D 相机方案就就是这3 种。
(1)结构光(Structured-light), 代表公司有奥比中光, 苹果(Prime Sense), 微软 Kinect-1, 英特尔RealSense, Mantis Vision 等。
(2)双目视觉(Stereo), 代表公司 Leap Motion, ZED, 大疆;
(3)光飞行时间法(TOF), 代表公司微软 Kinect-2, PMD, SoftKinect, 联想 Phab。
下图是这三种方式的一个简单而形象的图片介绍


结构光
结构光, 英文叫做 Structured light, 通常采用特定波长的不可见的红外激光作为光源, 它发射出来的光经过
一定的编码投影在物体上, 通过一定算法来计算返回的编码图案的畸变来得到物体的位置和深度信息。 根
据编码图案不同一般有条纹结构光---enshape , 编码结构光---Mantis Vision, Realsense(F200), 散斑结构光
---apple(primesense), 奥比中光。 下图是一个典型的结构光相机的示意图:

特定波长的 Laser 发出的结构光照射在物体表面, 其反射的光线被带滤波的 camera 相机接收, 滤波片保证
只有该波长的光线能为 camera 所接受。 Asic 芯片对接收到的光斑图像进行运算, 得出物体的深度数据。
其基本的算法原理可参看下图:

A 点: 激光投影模块位置
C 点: CMOS 相机位置
d: BaseLine
l: 参考面到相机的距离
Z(X,Y): 物体表面(x,y)点到标定平面的距离。
物体表面任一点 P(x,y)的深度信息可以通过比较
P(x,y)与激光散斑投射到参考平面(虚线所示)
上的点 P'(x,y)的 x 方向的偏移量得到。

以奥比中光的方案为例, 采用的是散斑结构光的技术, 下图是 camera 接收到的散斑图

苹果公司的 IphoneX 采用收购至 primesense 的技术, 也是散斑结构光, 所谓散斑就是是激光照射到粗糙物
体或穿透毛玻璃后随机形成的衍射斑点。 这些散斑具有高度的随机性, 而且会随着距离的不同而变换图案。

也就是说空间中任意两处的散斑图案都是不同的。 只要在空间中打上这样的结构光, 整个空间就都被做了
标记, 把一个物体放进这个空间, 只要看看物体上面的散斑图案, 就可以知道这个物体在什么位置了。 当
然, 在这之前要把整个空间的散斑图案都记录下来, 所以要先做一次光源标定, 通过对比标定平面的光斑
分布, 就能精确计算出当前物体距离相机的距离。
结构光(散斑) 的优点主要有:
1) 方案成熟, 相机基线可以做的比较小, 方便小型化。
2) 资源消耗较低, 单帧 IR 图就可计算出深度图, 功耗低。
3) 主动光源, 夜晚也可使用。
4) 在一定范围内精度高, 分辨率高, 分辨率可达 1280x1024,帧率可达 60FPS。
散斑结构光的缺点与结构光类似:
1) 容易受环境光干扰, 室外体验差。
2) 随检测距离增加, 精度会变差。



双目视觉
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式, 他是基于视差原理并利用成像设备
从不同的位置获取被测物体的两幅图像, 通过计算图像对应点间的位置偏差, 来获取物体三维几何信息的
方法。 目前有主动双目, 被动双目之分, 被动双目就是采用可见光, 好处是不需要额外光源, 但是晚上无
法使用, 主动双目就是主动发射红外激光做补光, 这样晚上也能使用。
双目视觉仅仅依靠图像进行特征匹配, 对附加设备要求低, 在使用双目视觉相机前必须对双目中两个
摄像头的位置进行精确标定。 下面图片很好的简单阐述了双目相机如何获取物体的深度数据。 同一直线上
的 3 个点在下端的相机都投影到 cmos 同一个点, 因此单独的这个相机没法分辨三个点的距离, 但是这 3 各
点在上端相机的投影位置不同, 通过三角测量办法和两个相机基线距离 B, 我们就可以计算出这 3 个点离相
机平面距离。

当然完整的双目深度计算非常复杂, 主要涉及到左右相机的特征匹配, 计算会非常消耗资源。
双目相机的主要优点有:
1) 硬件要求低, 成本也低。 普通 CMOS 相机即可。
2) 室内外都适用。 只要光线合适, 不要太昏暗。
但是双目的缺点也是非常明显:
1) 对环境光照非常敏感。 光线变化导致图像偏差大, 进而会导致匹配失败或精度低。

2) 不适用单调缺乏纹理的场景。 双目视觉根据视觉特征进行图像匹配, 没有特征会导致匹配失败。
3) 计算复杂度高。 该方法是纯视觉的方法, 对算法要求高, 计算量较大。
4) 基线限制了测量范围。 测量范围和基线(两个摄像头间距) 成正比, 导致无法小型化。
 


光飞行时间法(TOF)
顾名思义是测量光飞行时间来取得距离, 具体而言就是通过给目标连续发射激光脉冲, 然后用传感器
接收从反射光线, 通过探测光脉冲的飞行往返时间来得到确切的目标物距离。 因为光速激光, 通过直接测
光飞行时间实际不可行, 一般通过检测通过一定手段调制后的光波的相位偏移来实现。
TOF 法根据调制方法的不同, 一般可以分为两种: 脉冲调制(Pulsed Modulation) 和连续波调制
(Continuous Wave Modulation)。 脉冲调制需要非常高精度时钟进行测量, 且需要发出高频高强度激光, 目
前大多采用检测相位偏移办法来实现 TOF 功能。
下面图片描述了 TOF 相机(连续波) 的基本原理, 实际应用中, 通常采用的是正弦波调制。 由于接收
端和发射端正弦波的相位偏移和物体距离摄像头的距离成正比, 因此可以利用相位偏移来测量距离。

因为 TOF 并非基于特征匹配, 这样在测试距离变远时, 精度也不会下降很快, 目前无人驾驶以及一些高
端的消费类 Lidar 基本都是采用该方法来实现。
TOF 的优点主要有:
1) 检测距离远。 在激光能量够的情况下可达几十米。
2) 受环境光干扰比较小。
但是 TOF 也有一些显而易见的问题:
1) 对设备要求高, 特别是时间测量模块。
2) 资源消耗大。 该方案在检测相位偏移时需要多次采样积分, 运算量大。
3) 边缘精度低。
4) 限于资源消耗和滤波, 帧率和分辨率都没办法做到较高。 目前消费类最大也就 VGA。
从上面三种主流的 3D 相机成像方案来看, 各有优劣, 但是从实际应用场景来看, 在非无人驾驶领域, 结构
光, 特别是散斑结构光的用途是最广泛。 因为从精度, 分辨率, 还有应用场景的范围来看双目和 TOF 都没
有办法做到最大的平衡。 而且对于结构光容易受环境光干扰, 特别是太阳光影响问题, 鉴于此类相机都有
红外激光发射模块, 非常容易改造为主动双目来弥补该问题。 针对这三种方案, 我们针对常用场景做了一
些测试

当然这三种方案在发展过程中也有一些互相融合趋势, 如主动双目+结构光, 取长补短, 使 3D 相机能适应
更多的场景。 也有一些同时使用, 如手机前置基本确认会采用结构光来做 FaceId, 但是后置用来做 AR 应用,
结构光和 TOF 都有机会。 虽然项目具体使用哪种方案, 要结合当前硬件资源, 对性能要求等来确定, 但从
最广泛的使用角度来看, 散斑结构光无疑是目前最佳的方案。

相关推荐

通讯协议 SPI通信

SPI通信1.简要分析数据传输有串行传送和并行传送两种方式。并行传送已其高速度曾占领数据传送领域很长一段时间,其中并行传送的集成电路,外围设备从CPU,RAM/ROM到打印机。串行通信端口,即COM1,COM2,一般接鼠标,外置modem或其他串行设备,它在一个方向上只能传送一路信号,一次只能传送一个二进制位,传送一个字节信息时,只能一位一位地依次传送。并行传送:优点:多位数据一起传送,传送速度快。缺点:内存有多少位,就要用多少数据线,所以需要大量的数据线,成本高。串行传送:优点:使用

D学习中- 2821

通信协议之485

标题通信协议之485标题RS-485通信协议标准通信协议是指双方实体完成通信或服务所必须遵循的规则和约定,主要实现两个设备之间的数据交换功能.通信协议分硬件层协议和软件层协议。硬件层协议决定数据如何传输,比如要设备A要想设备B发送0x63,0x63的二进制数为0110 0011,这8个二进制数要从设备A传输到设备B,涉及到1怎么传,0怎么传,这就是硬件层要解决的问题。硬件层协议目前比较多见的有RS-232、RS-485和SPI等。其中串行通信RS-485规定:逻辑“1”以两线间的电压差为+(2-

D学习中- 2万+

ARM7与Cortex-M的区别

ARM7:ARMv4架构ARM7没有MMU(内存管理单元),只能叫做MCU(微控制器),不能运行诸如Linux、WinCE等这些现代的多用户多进程操作系统,因为运行这些系统需要MMU,才能给每个用户进程分配进程自己独立的地址空间。ucOS、ucLinux这些精简实时的RTOS不需要MMU,当然可以在ARM7上运行。ARM9:ARMv5架构ARM11:ARMv6架构ARM9、ARM11,是嵌入式CPU(处理器),带有MMU,可以运行诸如Linux等多用户多进程的操作系统,应用场合也不同于ARM7。A

D学习中- 1919

freertos介绍

初识FreeRTOS1.什么是FreeRTOS?Free Real Time Operating System实时操作系统。RTOS 不是指某一个确定的系统,而是指一类系统。比如 uC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类操作系统。操作系统允许多个任务同时运行,这个叫做多任务。实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务。任务调度在各个任务之间的切换非常快,就给人们造成了同一时刻有多个任务同时运行

D学习中- 2758

直流有刷/无刷电机的介绍

直流有刷电机与无刷电机的介绍有刷电机与无刷电机各有各的优缺点,主要根据应用场合和实际需求来选择,总结如下表所示:下面首先介绍有刷电机与无刷电机工作原理,最后从调速方式及性能差异这两个方面详细的阐述了有刷电机与无刷电机的区别。有刷电机与无刷电机工作原理  1、有刷电机电机工作时,线圈和换向器旋转,磁钢和碳刷不转,线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。在电动车行业有刷电...

D学习中- 5517

股权九条生命线

在股权设计实务中,经常会有“股权九条生命线”的说法,对于未经过系统学习公司法的企业家们,都会觉得“不明觉厉”,争相学习。但并不知道这些生命线对于有限公司与股份有限公司,上市公司与挂牌公司、普通公司未作区别,不能区别情况,以至于曲解。本文即给大家做一下绝对控制线、相对控制线、安全控制线的详细注解,让大家知其然,也知其所以然。壹绝对控制线——67%【释义】一些重大事项的如公司的股本变化,关于公...

D学习中- 1029

投资人投你的5个关键

本文为远望资本创始合伙人、迅雷创始人程浩在创业心学实验室5期结课暨公开课中以《投资人如何评判创业公司》为主题发表的演讲。程浩在演讲中表示,凡是一句话讲不清楚商业模式的创业者,往往都是自身没想清楚。在互联网这个行业,最有效的护城河是“网络效应”。如果你发现做的事没有护城河,意味着你这个钱赚不长久。评判CEO的四大标准:领导能力、创业精神、执行能力、学习能力。以下为演讲节选:我从投资人的角度来讲...

D学习中- 1092

如何准备第一次融资

现在的互联网创业离不开资本,环境越来越热,参与的人也越来越多, 但大部分人可能对融资的事情都是从媒体里看到的。神奇的故事不绝于耳,5分钟说服投资人,15分钟某某投资人当场拍板投资,这些事情不否认它是存在,也许是在某个时间真实发生过的,同样在未来也是有再次发生可能性的。但这种小概率的事件,当作故事听听是可以的。如何准备创业路上的第一次融资?需要准备什么?怎么样了概率才比较高?下面就来讲点实在的...

D学习中- 826

梳理资本的投资逻辑

投资的本质是希望今天付出的一笔钱,能够在未来收回更多钱春种一粒粟,秋收万颗子01 行业的维度第一,看行业的商业模式公司即使有很优秀的管理层,但如果在一个很烂的行业,不管你怎么敬业、挣扎,业绩都不会太好。而有一些行业,你会发现赚钱实在太容易了,很典型的就是白酒行业。2013 年、2014 年“三公经费”严管,大多数公司股价下调但还是很好赚钱。因此,从行业的维度看,首先是看行业的商业模式,也...

D学习中- 2118

股权结构设计

现在是合伙创业的新时代,合伙创业已经成为互联网时代成功企业的标配。创业企业的基础,一是合伙人,二是股权。归根到底,是合伙人股权。它基本奠定了一家创业企业的基因,每个创业者都有一个IPO的目标,希望自己的创业项目将来有一天能去主板或者海外敲钟,除了老干妈的老板,资本市场必然要求企业股权清晰、合理。初创公司股权结构应该怎么设计?举例三种模型初创公司合伙人之间科学合理的股权结构一、创始人在发起设立...

D学习中- 2399

年中,加油!

最近接到新的项目,不能按时更新了。加油!新的开始,更加努力!

D学习中- 614

STM32F103RCT6陀螺仪的接线反了怎么改?

STM32F103RCT6陀螺仪的接线反了怎么改?这两个地方改下就可以了

D学习中- 1142

职场三原则

职场三原则安全进步收益1 安全 工作 信用 人身a保住自己工作的位置 作死行为 容易被抓 惩罚严重 埋雷行为 不容易被抓 惩罚严重冒险行为 容易被抓 惩罚不严重变通行为 不容易被抓 惩罚不严重 有交易价值声明损失,提议交易 会盘活关系b保住自己个人信用c人身安全2 进步原则3 收益原则...

D学习中- 6204

Ubuntu16.04 python2.7升级python3.5

正常情况下,你安装好ubuntu16.04版本之后,系统会自带 python2.7版本,如果需要下载新版本的python3.5,就需要进行更新。下面给出具体教程:1.首先在ubuntu的终端ternimal输入命令:   1 sudo apt-get install python3 (博主选择的是安装python3.5,命令为:sudo apt-get install python3.5)...

D学习中- 790

stm32 数据类型的定义及常用的U8,U16,U32是什么)

在Keil MDK 开发环境里,比如一个 无符号32位整形数据会有很多种表示方法:1,unsigned int 32 (C语言标准表达方法)2,uint32_t ;3 ,u32;这三种方式都是在表达同一个意思,可为什么ST的开发人员要搞的这么乱呢?其实ST 搞这么多花样,无非是想开发人员在写代码时定义数据类型能少写几个符号,然后又因为前后版本升级,为了兼容旧版本(主要是V2.0)才会出现...

D学习中- 3290

字符与字节的定义与区别和不同编码方式对应所占字节数

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。“字节”与“字符”的区别它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:①ASCII码中:一个英文字母(不分大小写)占一个字节的空间,一个中...

D学习中- 2928

STM32F103xC,STM32F103xD和STM32F103xE大容量增强型芯片的特性

1)大容量芯片是什么?答:高达512K字节的闪存和64K字节的SRAM的芯片为大容量。2)小容量,中等容量和大容量的芯片区别? 因为STM32F103xx是一个完整的系列,其成员之间是完全地脚对脚兼容,软件和功能上也兼容。在参考手册中,STM32F013x4和STM32F103x6被归为小容量产品,STM32F103x8和STM32F103xB被归为中等容量产品,STM32F...

D学习中- 6148

STM32芯片型号的命名规则

市面流通的STM32型号有:基本型:STM32F101R6 STM32F101C8 STM32F101R8 STM32F101V8 STM32F101RB STM32F101VB增强型:STM32F103C8 STM32F103R8 STM32F103V8 STM32F103RBSTM32F103VB STM32F103VE STM32F103ZESTM32芯片型号的命名规则说明:以S...

D学习中- 9084

STM32系统学习——USART(串口通信)

串口通信是一种设备间非常常用的串行通行方式,其简单便捷,大部分电子设备都支持。一、物理层常用RS-232标准,主要规定了信号的用途、通信接口以及信号的电平标准。“DB9接口”之间通过串口信号线建立起连接,串口信号线使用”RS-232标准“传输数据信号,这些信号通过记过电平转换芯片转换成控制器能识别的TLL标准的电平信号,才能实现通信。1.电平标准可分为TTL标准以及RS-232标准。...

D学习中- 2278

HAL库函数--1

1.void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);//这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。2、void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);//这个函...

D学习中- 2510

C++ 面向对象

C++类 & 对象C++ 在 C 语言的基础上增加了面向对象编程。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++ 类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定...

D学习中- 588

ROS源码阅读---局部路径规划之DWAPlannerROS分析

1 体系结构(1)主要成员base_local_planner::LocalPlannerUtil planner_util_;用来存储运动控制参数以及costmap2d、tf等,会被传入dp_costmap_2d::Costmap2DROS* costmap_ros_;base_local_planner::OdometryHelperRos odom_helper_;用来辅...

D学习中- 2066

全局路径规划之--Dijkstra算法

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点...

D学习中- 4190

全局路径规划之-A*算法

A* 寻路算法原文地址:http://www.gamedev.net/reference/articles/article2003.asp概述虽然掌握了A*算法的人认为它容易,但是对于初学者来说,A*算法还是很复杂的。搜索区域(The Search Area)我们假设某人要从A点移动到B点,但是这两点之间被一堵墙隔开。如图1,绿色是A,红色是B,中...

D学习中- 9137

关于move_base包的理解

关于move_base包的理解move_base是ROS下关于机器人路径规划的中心枢纽。它通过订阅激光雷达、map地图、amcl的定位等数据,然后规划出全局和局部路径,再将路径转化为机器人的速度信息,最终实现机器人导航。上面这个图很好的展示了move_base的整个框架,下面我更加详细的介绍一下每个模块的功能及其是如何衔接的。首先amcl模块是ROS的导航定位模块,amcl也叫...

D学习中- 1万+

ROS 开机自启动的方法和步骤

(一)如果人工手动启动机器人,当给机器人加电时候,我们需要ssh到机器人端,然后启动激光的驱动launch文件,机器人启动的launch文件,导航的launch文件等,这对机器人的操作很不方便。登录turtlebotworkstation@workstation:~$ ssh turtlebot@192.168.1.143turtlebot机器人室内定位和导航turtlebot:...

D学习中- 4687

ubuntu16.04任务栏和菜单栏消失问题

之前安装bazel时按照某教程在 /home文件夹下建立了.cache文件夹这是导致问题的起源。上网搜了一些相关问题大多数让安装compiz并进行相关设置:sudo apt-get install compizconfig-settings-manager 这个貌似适用于16.04之前的版本;还有让重新安装desktop的,试过之后都没有解决问题。后来在https://asku...

D学习中- 2679

ros +ubuntu 16.04+ kinect v2 安装 及no device found解决方法

安装libfreenect2git clone https://github.com/OpenKinect/libfreenect2.gitcd libfreenect2sudo apt-get install build-essential cmake pkg-config libusb-1.0-0-dev libturbojpeg libjpeg-turbo8-dev lib...

D学习中- 1976

ROS 中udev/rules/ 配置 USB 映射 绑定串口

修改串口数据是在 /etc/udev/rules.d/ 文件夹下面 如下图:我们打开一个雷达的串口配置文件 rplidar.rules 看里面内容如下:当我们想配置自己的底层USB接口,新建一个文件,再按照此格式来写。只需修改启动启动的 " "中的内容即可,第一个KERNEL=="ttyUSB*" 这个可不用改。 最后一个SYMLINK+=" 自己随意写名称" 就是映射到的名...

D学习中- 4457

ROS降低ORBBEC相机的频率,帧率

orbbec双目摄像头就使用的是astra驱动,降低帧率的方法如下。注意:前提是默认安装好了astra_launch驱动等文件,可参考https://blog.csdn.net/qq_41925420/article/details/90632074首先下载ros_astra_camera源码 https://github.com/orbbec/ros_astra_camera然...

D学习中- 1597
上一篇: C++ 面向对象
下一篇: HAL库函数--1
探索线上卖货
探索线上卖货 企业官方账号 企业官方账号
博客等级 码龄9年 112粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值