【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理)

2023-05-16

本文已经首发在个人微信公共号:计算机视觉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)、容易受到光滑平面反光的影响。


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


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



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理) 的相关文章

  • 利用python语言制作简单的音乐播放器

    from tkinter import from tkinter import filedialog from pygame locals import import time import pygame import sys pygame
  • 小四轴——空心杯电机引起的电源干扰

    问题 用STM32做了一个微型四轴的飞控 xff0c 使用的是空心杯电机 xff0c 使用一个MOS管驱动 xff0c 但是现在电机只要运行起来 xff0c 就会产生非常大的干扰 xff0c 直接导致STM32复位或不运行 经过换电容 xf
  • PX4开发(1):ubuntu下pixhawk开发环境搭建

    1 介绍 之前买了个330的四轴 xff0c 最近想利用起来 xff0c 所以买了个pixhawk来玩 pixhawk是开源的 xff0c 所以想看看能不能在其基础上开发出什么 要做开发首先要配置环境 xff0c 由于官方推荐在linux环
  • μC/OS-II 要点分析 ------ PendSV_Handler

    首先贴出今天要与大家分享的内容源码 xff08 位于内核源码的 os cpu a asm 中 xff09 xff1a PendSV Handler CPSID I MRS R0 PSP CBZ R0 PendSV Handler Nosav
  • PX4开发(2):QGroundControl的使用及电调校准——准备起飞

    1 介绍 上一节把固件烧写好了 xff0c 接下来进行传感器的校准了 xff0c 传感器校准要使用官方的地面站 xff0c 也就是QGC QGroundControl xff0c 官网下载点击这里 安装好QGC后打开 xff0c 然后将pi
  • Linux驱动开发04:块设备驱动和网络设备驱动

    介绍 因为块设备驱动和网络设备驱动实际中用得较少 xff0c 所以只给出驱动模板 xff0c 我也没有具体测试 xff0c 等到实际用到是再研究吧 xff0c 溜了溜了 块设备驱动模板 span class hljs keyword str
  • 支撑程序员的三种精神

    我注意到有三种精神指引着软件开发人员的灵魂 伟大的艺术家精神 xff0c 可信赖的员工精神和自私的实用主义精神 伟大的艺术家精神 如果你听到一种声音说 你不能这样画 xff0c 然后 xff0c 你继续这样画 xff0c 这种反对的声音就会
  • docker数据迁移

    docker数据迁移 前言 开发服务器随着docker运行服务的变多 xff0c docker目录占用磁盘空间也在逐渐变大 xff0c 终于在最近磁盘彻底占满导致容器启动不起来并提示 34 no device space left 34 为
  • 超好看的个人主页官网源码+带动态特效

    正文 这款个人主页源码感觉是我有史以来见过最好看的 xff0c 功能和页面也比较多 xff0c 简约又不失格调 官网带动态特效视频源码 xff0c 修改主页文件即可 程序 wwvwd lanzouw com i6RWe0ag8gde 图片
  • A2W、W2A、A2T、T2A的使用方法

    1 A2W和W2A 在 Window核心编程 xff0c 多字节和宽字节之间转换比较麻烦的 xff0c MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解 那么使用ATL的
  • C语言中int到float的强制类型转换

    最近在看一本名为的书 由于我所看过的计算机理论方面的书较少 xff0c 加上自己大学期间一直也不用功 xff0c 所以对于计算机的工作原理以及程序的工作方式我始终只知甚少 xff0c 印象也十分模糊 不过 xff0c 应该说我碰到了一本好书
  • MFC中如何将焦点设置到指定控件上

    MFC中如何将焦点设置到指定控件上 需求 xff1a 窗口打开的时候就将焦点 xff08 光标 xff09 设置到某个指定的控件上去 实现方法 xff1a 设置焦点需要用到setFocus这个方法 xff08 几乎任何编程环境都这样VC x
  • _tcschr、_tcsrchr

    tcschr tcsrchr 好处 xff1a 是可以不管是用unicode 编码还是其他 代码都不用改 C 43 43 标准库函数提供了字符和字符串的操作函数 xff0c 并提供了其UNICODE版本 xff0c 如 xff1a 1 tc
  • vc++ 6.0编译后生成的文件

    vc 43 43 6 0编译后生成的文件 程序在编译后 在目标路径下会生成多个文件 Debug文件夹 exe ilk obj pch pdb idb pdb cpp dsp ncb plg exe 是生成的可执行文件 ilk 当选定渐增型编
  • 除了pid还有什么控制算法,类似pid算法还有哪些

    什么是专家PID xff1f 他和传统的PID有什么区别 xff1f PID是智能控制啊 比如要控制一个水管的水流量 通过流量计 开关阀 让PID来控制开关阀的开关大小使水流量正确 专家PID记得是PID的高级设置 某些个场合一般的PID无
  • c++编译错误:invalid new-expression of abstract class type

    error invalid new expression of abstract class type UserdataActionI 原因 xff1a 出现这个错误原因是new 了一个抽象类出错 xff0c 说明父类 xff08 接口 x
  • Servlet jsp跳转到Servlet 出现404错误的路径设置方法

    jsp跳转到Servlet 出现404错误的路径设置方法 解决一 xff1a 最近又遇到了这种问题 xff0c 百度了好久 xff0c 发现有人说要在action的路径里面写Servlet文件的绝对路径 xff0c 比如说 xff0c 单独
  • 产品经理做APP从头到尾的所有工作流程详解!

    xff08 一 xff09 项目启动前 从事产品的工作一年多 xff0c 但自己一直苦于这样或者那样的困惑 xff0c 很多人想要从事产品 xff0c 或者老板自己创业要亲自承担产品一职 xff0c 但他们对产品这个岗位的认识却不明晰 xf
  • 使用阿里云搭建自己的原型发布站点

    最近在做项目时 xff0c 使用了Axure团队协同工具 AxureShare 时 xff0c 发现了一个问题 xff1a 由于AxureShare服务器在国外 xff0c Axure共享生成的链接访问时非常慢 xff0c 网上找了很多解决
  • 【FTP工具linux错误】Job for vsftpd.service failed because the control process exited with error code

    环境 xff1a 阿里云centos7 2搭建ftp 问题 xff1a 启动vsftpd服务 xff0c 报错 xff1a Job for vsftpd service failed because the control process

随机推荐