深度相机 结构光_结构光三维成像原理

深度相机 结构光_结构光三维成像原理版权声明:本文为博主原创文章,未经博主允许不得转载。违者必究。 https://blog.csdn.net/electech6/article/details/78707839 </div> <linkrel="styles…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

				版权声明:本文为博主原创文章,未经博主允许不得转载。违者必究。					https://blog.csdn.net/electech6/article/details/78707839				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

Jetbrains全家桶1年46,售后保障稳定

本文已经首发在个人微信公共号:计算机视觉life(微信号CV_life),欢迎关注!

导读

结构光法:为解决双目匹配问题而生

深度图效果:结构光vs.双目

投射图案的编码方式

    直接编码

    时分复用编码

    空分复用编码

Kinect1原理

iPhone X原深感相机是缩小版的更强大的Kinect1

结构光法优缺点总结

——————————————————————

结构光法:为解决双目匹配问题而生

前面文章《深度相机原理揭秘–双目立体视觉》中提到基于双目立体视觉的深度相机对环境光照强度比较敏感,且比较依赖图像本身的特征,因此在光照不足、缺乏纹理等情况下很难提取到有效鲁棒的特征,从而导致匹配误差增大甚至匹配失败。

而基于结构光法的深度相机就是为了解决上述双目匹配算法的复杂度和鲁棒性问题而提出的,其他处理步骤和双目立体视觉类似,本文不再赘述。结构光法不依赖于物体本身的颜色和纹理,采用了主动投影已知图案的方法来实现快速鲁棒的匹配特征点,能够达到较高的精度,也大大扩展了适用范围。

深度相机 结构光_结构光三维成像原理

结构光深度相机原理示意图(注意E端发射的带图案的光源)

深度图效果:结构光vs.双目

下图左是普通双目立体视觉深度相机拍摄的图像和对应的深度图结果;下图右是结构光法的深度相机投射的图案及对应的深度图结果,明显可以观察到在同样的场景下结构光法得到的深度图更完整,细节更丰富,效果大大好于双目立体视觉法。

深度相机 结构光_结构光三维成像原理

双目立体视觉(左)和结构光(右)深度相机拍摄的图像和对应的深度图

投射图案的编码方式

结构光法投射的图案需要进行精心设计和编码,结构光编码的方式有很多种,一般分为如下几大类:

1、直接编码(direct coding)

根据图像灰度或者颜色信息编码,需要很宽的光谱范围。

优势:对所有点都进行了编码,理论上可以达到较高的分辨率。

缺点:受环境噪音影响较大,测量精度较差。

深度相机 结构光_结构光三维成像原理

直接编码原理示意图

2、时分复用编码(time multiplexing coding)

顾名思义,该技术方案需要投影N个连续序列的不同编码光,接收端根据接收到N个连续的序列图像来每个识别每个编码点。投射的编码光有二进制码(最常用)、N进制码、灰度+相移等方案。

该方案的优点:测量精度很高(最高可达微米级);可得到较高分辨率深度图(因为有大量的3D投影点);受物体本身颜色影响很小(采用二进制编码)。

缺点:比较适合静态场景,不适用于动态场景;计算量较大(因为识别一个编码点需要计算连续N次投影)。

深度相机 结构光_结构光三维成像原理

时分复用编码原理示意图

3、空分复用编码(spatial multiplexing coding

根据周围邻域内的一个窗口内所有的点的分布来识别编码。

该技术的优势:适用于运动物体。

缺点:不连续的物体表面可能产生错误的窗口解码(因为遮挡)。

深度相机 结构光_结构光三维成像原理

空分复用编码原理示意图

Kinect1原理

业界比较有名的结构光方案就是以色列PrimeSense公司的Light Coding的技术,该方案最早被应用于Microsoft的明星产品Kinect1(Kinect2是基于TOF的技术)上。下面以Kinect1为例,介绍一下其工作原理。

深度相机 结构光_结构光三维成像原理

Microsoft和PrimeSense合作的Kinect1

Kinect1的红外IR发射端投射人眼不可见的伪随机散斑红外光点到物体上,每个伪随机散斑光点和它周围窗口内的点集在空间分布中的每个位置都是唯一且已知的。这是因为Kinect1的存储器中已经预储存了所有的数据。

深度相机 结构光_结构光三维成像原理

Kinect1投影的伪随机散斑

这些散斑投影在被观察物体上的大小和形状根据物体和相机的距离和方向而不同。如下图所示。

深度相机 结构光_结构光三维成像原理

Kinect1根据三种不同的距离使用了三种不同尺寸的散斑,如下图所示。这样的目的是为了在远中近三种距离内都能得到相对较好的测量精度:

近距离(0.8 – 1.2 m):可以获得较高的测量精度

中距离(1.2 – 2.0 m):可以获得中等的测量精度

远距离(2.0 – 3.5 m):可以获得较低的测量精度

深度相机 结构光_结构光三维成像原理

Kinect1测量精度如下:

spatial x/y resolution: 3mm @2m distance

depth z resolution: 1cm @2m distance

iPhone X原深感相机是缩小版更强大的Kinect1

2013年11月苹果公司以3.45亿美元收购了PrimeSense公司。之后,苹果一直在推动PrimeSense的深度相机向小型化发展。

2016年7月,苹果公布了新型3D手势控制专利,是一个内嵌在类似手机的iOS设备上的图形投影仪,可以识别出用户的手势操作。

2017年9月,苹果发布了重磅产品iPhone X。其中摄像技术最大的创新就是使用了前置深度相机(苹果称之为Truedepth)。虽然苹果没有透露具体的技术细节,但是从官网介绍来看,投影3万个不可见的红外光点完全符合结构光方案(而不是TOF)的特征。另外结构光方案和TOF方案相比,还具有功耗低,精度高的优势。这对移动设备做近距离的人脸识别来说,是极大的技术优势。

深度相机 结构光_结构光三维成像原理

点阵投影在人脸上的示意图

(投影的是人眼不可见的红外光,这里只是示意图)

iPhone X利用前置的原深感相机开发了一系列新奇有趣的玩法,比如FaceID、前置背景虚化、人像光效、动画表情、clips等。可见iPhone X的结构光深度相机和Kinect1相比深度图测量更加精细准确,性能有了质的飞跃。

深度相机 结构光_结构光三维成像原理

iPhone X基于原深感相机开发的动画表情功能

因此iPhone X的前置原深感相机可以认为是一个缩小版的功能更强的Kinect1。

结构光法优缺点总结

根据前面的原理介绍,我们总结一下基于结构光法深度相机的优缺点。

1、优点

1)、由于结构光主动投射编码光,因而非常适合在光照不足(甚至无光)、缺乏纹理的场景使用。

2)、结构光投影图案一般经过精心设计,所以在一定范围内可以达到较高的测量精度。

3)、技术成熟,深度图像可以做到相对较高的分辨率。

2、缺点

1)、室外环境基本不能使用。这是因为在室外容易受到强自然光影响,导致投射的编码光被淹没。增加投射光源的功率可以一定程度上缓解该问题,但是效果并不能让人满意。

2)、测量距离较近。物体距离相机越远,物体上的投影图案越大,精度也越差(想象一下手电筒照射远处的情景),相对应的测量精度也越差。所以基于结构光的深度相机测量精度随着距离的增大而大幅降低。因而,往往在近距离场景中应用较多。

3)、容易受到光滑平面反光的影响。

最后,给出几种主流的结构光的深度相机及参数。

深度相机 结构光_结构光三维成像原理

几种结构光深度相机的参数

深度相机 结构光_结构光三维成像原理


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/213548.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring Boot 无侵入式 实现API接口统一JSON格式返回

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:小魏小魏我们去那里呀 blog.csdn.net/qq_34347620/article/details/10…

  • 详述ViewState用法

    详述ViewState用法与刚接触ASP.NET页面的开发人员交谈时,他们通常向我提出的第一个问题就是:“那个ViewState到底是什么?”他们的语气中流露出的那种感觉,就象我来到一家异国情调的餐馆,侍者端上一道我从未见过的菜肴时的那种感觉-既疑惑不解,又充满好奇。但肯定有人认为它不错,否则就不会提供了。所以,我会先尝一尝,或许会喜欢上它,尽管它看上去的确很古怪!对于ViewState也是如此,但是如果适应了它的风格,…

  • 从头开始学MySQL——-存储过程与存储函数(1)

    从头开始学MySQL——-存储过程与存储函数(1)10.1.1创建存储过程存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。创建存储过程的语句为CREATEPROCEDURE,创建存储函数的语句为CREATEFUNCTION。调用存储过程的语句为CALL。调用存储函数的形式就像调用MyS……

  • Oracle提权[通俗易懂]

    Oracle提权[通俗易懂]三种方式1.普通用户模式:拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令2.DBA用户模式:(自动化工具)sqlmap–is-dba测试是否是dba权限拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试3.注入提升模式:(sqlmap)拥有一个oracle注入点,可以通过注入点执行系统命令,此种模式没有实现回显,需要自己验证。三种方式的提权工具…

  • phpstrom 2022激活码(JetBrains全家桶)

    (phpstrom 2022激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 在处理PowerBuilder的itemchanged事件中,acceptText的使用介绍[通俗易懂]

    在处理PowerBuilder的itemchanged事件中,acceptText的使用介绍[通俗易懂]在窗口的itemchanged事件中,获取当前输入的值时,往往是无法拿到值的,此时值还没有提交,所以获取的都是null,此时可以通过使用dwcontrol.acceptText()来设置值的提前存

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号