《Kinect应用开发实战:用最自然的方式与机器对话》一3.4 深度图像成像原理...
3.4 深度图像成像原理
Kinect有发射、捕捉、计算视觉重现的类似过程。严格说来,Kinect的“深度眼睛”是由一个红外投影机和红外摄像头组合而成的,投影和接收互为重叠,如图3-27所示。
可以说,Kinect的成功也在于其能廉价而有效地捕捉到深度图像。它能收集视野范围内的每一点,并形成一幅代表周围环境的景深图像。传感器以每秒30帧的速度生成景深图像流,实时3D地再现周围环境。
3.4.1 ToF光学测距与结构光测量
红外摄像头大体可以划分为两类(见图3-28):
基于飞行时间(Time of Flight,ToF)原理的摄像头,它通过测量光脉冲之间的传输延迟时间来计算深度信息。例如Mesa Imaging SwissRanger 4000和PMD Technologies CamCube 2.0,它们都价格不菲。
结构光测量,基于光编码,投射已知的红外模式到场景中,通过另外一个红外CMOS成像器所捕获到的该模式的变形,从而最终来确定深度信息的摄像头,如PrimeSensor和Microsoft Kinect。事实上,图3-28c和图3-28d使用的是同一红外摄像头。Kinect属于图3-28d所示情况。
2009年微软收购了以色列公司3DV Systems,它拥有ToF摄像头的专利。ToF是“Time of Flight”的缩写,从字面上也可大致猜出其含义:计算光线飞行的时间。首先让装置发出脉冲光,并且在发射处接收目标物的反射光,即由测量时间差算出目标物的距离。3DV的ZCam就是采用ToF技术,使用红外线以及Accelerometers加速度计感应器,感测立体空间的相对位置变化,建构灰阶距离影像的深度感应器。感光芯片需要飞秒级的快门来测量光飞行时间,据说芯片中用到砷化镓,使其时钟频率提高到上百GHz。于此同时也提高了工艺成本。
光学测距方法是ToF目前较为精确可行的技术,也有诸如LDM激光测距、IDM红外测距等具体产品,但都价格不菲。因此,该项技术对于Kinect这种消费电子产品来说不适用:一方面是测量环境的限制,更主要的是成本因素。这样看来,微软收购3DV Systems,只是为了动作感测的专利权、并取得领先地位。
“结构光”指一些具有特定模式的光,其模式图案可以是点、线、面等。结构光扫描法的原理是首先将结构光投射至物体表面,再使用摄像机接收该物体表面反射的结构光图案,由于接收图案必会因物体的立体型状而发生变形,故可以试图通过该图案在摄像机上的位置和形变程度来计算物体表面的空间信息。普通的结构光方法仍然是部分采用了三角测距原理的深度计算。
结构光测量技术作为一种快速、便携、高精度的三维测量技术,在汽车、航空、模具、医疗等领域均得到了广泛的应用。相位计算是基于相位测量的结构光三维测量中的关键技术之一,最终输出是三维点云,进行相关的三维建模和测量。
3.4.2 Light Coding技术
PrimeSense将其深度测量技术命名为Light Coding,顾名思义,就是用光源照明给需要测量的空间编上码,属于结构光技术的一种,只是深度计算方式不一样,微软Kinect深度图像就是采用了这种技术。
与结构光法不同的是,Light Coding的光源称为“激光散斑”,是激光照射到粗糙物体或穿透毛玻璃后随机形成的衍射斑点。这些散斑具有高度的随机性,而且会随着距离的不同而变换图案。也就是说空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置了。当然,在这之前要把整个空间的散斑图案都记录下来,所以要先做一次光源标定,如图3-29所示。
概括一下,Light Coding与传统的ToF、结构光技术的不同之处在于:
1)和传统的ToF、结构光的光源不同,使用“Light Coding”技术的PrimeSense的PS1080系统级芯片负责对红外光源进行控制,投射出具有三维纵深的“立体编码”。这种光源称为激光散斑,是当激光照射到粗糙物体或穿透毛玻璃后形成的随机衍射斑点。
2)不需要特制的感光芯片,只需要普通的CMOS感光芯片,这让方案的成本大大降低,对Kinect消费及电子产品的市场化至关重要。
3)Light Coding技术不是通过空间几何关系求解的,它的测量精度只和标定时取的参考面的密度有关,参考面越密测量越精确。传统结构光方法采用三角视差测距,基线长度(光源与镜头光心的距离)越长越好。换句话说,不用为了提高精度而将基线拉宽。这其中的奥秘就是“激光散斑原理”。
3.4.3 激光散斑原理
激光在散射体表面的漫反射或通过一个透明散射体(如毛玻璃)时,在散射表面或附近的光场中可以观察到一种无规分布的亮暗斑点,这种斑点称为激光散斑(Laser Speckles)。
如果散射体足够粗糙,这种分布所形成的图样是非常特殊和美丽的,如图3-30所示。
散斑现象普遍存在于光学成像的过程中,很早以前牛顿就此解释过恒星闪烁而行星不闪烁的现象。由于激光的高度相干性,激光散斑的现象就更加明显。最初人们主要研究如何减弱散斑的影响。在研究的过程中发现散斑携带了光束和光束所通过的物体的许多信息,于是激光散斑产生了许多的应用,例如用散斑的对比度测量反射表面的粗糙度,利用散斑的动态情况测量物体运动的速度,利用散斑进行光学信息处理,甚至利用散斑验光等。
激光散斑是由无规散射体被相干光照射产生的,因此是一种随机过程。要研究它必须使用概率统计的方法。通过统计方法的研究,可以认识到散斑的强度分布、对比度和散斑运动规律等特点。最重要的特点就是,这种散斑具有高度的随机性,而且随着距离的不同会出现不同的图案,也就是说,在同一空间中任何两个地方的散斑图案都不相同。只要在空间中打上这样的结构光然后加以记忆就让整个空间都像是被做了标记,然后把一个物体放入这个空间后只需要从物体的散斑图案变化就可以知道这个物体的具体位置。
3.4.4 光源标定
PrimeSense的专利中是这样解释“标定方法”的:每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下来。
假设Kinect规定的用户空间是距离摄像头1~4m的范围,每隔1cm取一个参考平面,那么标定下来我们就保存了300幅散斑图像。标定的间距越小,精度越高,如图3-31所示。需要进行测量的时候,拍摄一幅待测量的散斑图像,将这幅图像和我们保存下来的300幅参考图依次做互相关运算,进而得到300幅相关度图像。而空间中的物体存在的位置,会在相关图像上会显示出峰值,把这些峰值叠加在一起,再经过插值运算后就会得到整个场景的三维形状了。
注 “插值运算”是一种增加图像尺寸的方法。很多数码相机通过此技术实现数字变焦(DigitalZoom)。插值算法有许多种,目的都是有效地平滑扩大图像而不导致锯齿产生。
如果你有一台夜视摄像机(比如Sony HDR-CX700E,启用NIGHTSHOT模式),晚上在房间关掉灯,你可以观察到Kinect红外散斑投影在房间里,星星点点。画面因为红外拍摄的原因都显示为绿色,如图3-32所示。
为什么Kinect注意事项中警告:不要让阳光直射传感器,不要让传感器接近任何热源?
这个问题现在很好理解了,Kinect投射出近红外光源,通过目标物体产生的“散斑”进行“深度计算”。太阳光谱和热源会干扰Kinect投射出的近红外光源,正如微波炉对手机信号或者FM广播的干扰一样。
关于Light Coding的其他相关内容可以到Micosoft Academy或者Google Patents上查询两篇文档:
Range mapping using speckle decorrelation(No. US7433024B2)
DEPTH MAPPING USING PROJECTED PATTERNS(No. 0118123 A1)
相关文章:

UI设计不够高端?这5个小技巧可以试试
UI培训设计是对软件的人机交互、操作逻辑、界面美观度的整体设计。好的UI设计不仅要让软件变得漂亮舒适,还要充分考虑到用户的操作问题。 从事UI设计的朋友们,肯定知道我们在做UI设计时,其实是可以通过一些小技巧来帮我们设计的界面更加的漂…

Apache学习路线
参考资料: 1、《Apache源代码全景分析》 2、《鸟哥服务器架设篇》 一、不同的开发人员应该关注的知识点 Apache管理员 配置文件、配置指令 模块开发人员 全部内容 服务器开发人员 MPM并发处理框架 普通人员 …

大火的Apache Spark也有诸多不完美
现在如果你想要选择一个解决方案来处理企业中的大数据并不是难事,毕竟有很多数据处理框架可以任君选择,如Apache Samza,Apache Storm 、Apache Spark等等。Apache Spark应该是2016年风头最劲的数据处理框架,它在数据的批处理和实时…
【怎样写代码】确保对象的唯一性 -- 单例模式(二):解决方案
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

零基础如何学习java技术?
想要学习java技术,担心自己是零基础学不会?最近有很多同学会问到这样的问题,千锋教育小编告诉你,零基础是可以学习java技术的,但是要去正规的java培训机构学习,下面来看看详细的介绍。 零基础如何学习java技术?我们…

Rank() over()的用法
Rank() over()的用法 创建一个test表,并插入6条数据。CREATE TABLE test (a INT,b INT,c CHAR ) INSERT INTO test VALUES(1,3,E) INSERT INTO test VALUES(2,4,A) INSERT INTO test VALUES(3,2,D) INSERT INTO test VALUES(3,5,B) INSERT INTO test VALUES(4,2,C) …

5G将成开启物联网时代的金钥匙
物联网其实并非新鲜事物,在互联网兴起之初,就有人提出了万物皆可通过网络互联,这被认为是物联网最早的定义。其实早在1995年比尔盖茨在其书《未来之路》也提到了物联网,当初并未引起重视。如今,随着互联网与先进通信技…
【怎样写代码】确保对象的唯一性 -- 单例模式(三):单例模式
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

学习Python有什么优势?
学习Python的人越来越多,很多人就想知道,编程语言有那么多种,学习Python有什么优势?为什么这么多人会选择学习Python技术?今天我们就来聊一聊Python语言。 学习Python有什么优势? 入手快。Python语言相对于其他编程语言来说&am…

取消水晶报表的数据库登录框 分享
这两天在和斌做后台中的报表,暂定使用水晶报表,目前还只是处于对水晶报表的初级应用阶段,也就是知道如何 汇个总、写个函数、传个参数。 问题总是层出不穷,在最后整合报表,进行报表显示测试的时候,发现每次…

有光照就能上网 0.2秒即可下载一部高清电影
再也不用费尽心思询问 WIFI 密码了,以后,哪里有光照,哪里就可以上网。中国“可见光通信系统关键技术研究”近日取得重大突破,实时通信速率提升至 50Gbps,也就是说: 0.2 秒即可完成一部高清电影的下载。 有光…
【怎样写代码】确保对象的唯一性 -- 单例模式(四):饿汉式单例类与懒汉式单例类的讨论
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

学Java需要学哪些书?
java技术所要学到的东西是很多的,只要入了这一行,学习是不能停止的,工作节奏在加快,新知识也源源不断,学习的最好途径就是看书,小编给大家推荐这几本java方面的书,搭配学习课程,让学…
【怎样写代码】确保对象的唯一性 -- 单例模式(五):一种更好的单例实现方法(静态内部类)
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

郭为:大数据时代的企业管理挑战
互联网时代,创新使得财富积累的速度前所未有的快,贫富不均也前所未有地分化。这个时代,世界的竞争变成人与人的竞争,人与人的竞争就是智慧的竞争,就是人的创新能力的竞争。如何才能提高人的竞争力,是管理科…

如何挑选靠谱的Java培训机构
想要学习java技术的人越来越多,市面上出现的java培训机构也越来越多,很多人都想找一个靠谱的java培训机构,那么到底该如何挑选靠谱的Java培训机构呢?看看下面小编为大家做的详细介绍吧。 如何挑选靠谱的Java培训机构? 首先挑选java培训机…

ActiveMQ在C#中的应用
ActiveMQ是个好东东,不必多说。ActiveMQ提供多种语言支持,如Java, C, C, C#, Ruby, Perl, Python, PHP等。由于我在windows下开发GUI,比较关心C和C#,其中C#的ActiveMQ很简单,Apache提供NMS(.Net Messaging …

数据中心防雷SPD技术漫谈
雷电是大自然里一种普遍现象,在世界的任意角落都会有雷电天气出现,只不过数量不同而已。雷电对大地及地面物体的放电现象成为雷击,这种放电过程会产生强烈的闪电并伴随巨大的声音,对被击物体有严重的危害,会在物体的两…
【怎样写代码】确保对象的唯一性 -- 单例模式(六):扩展案例
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Python数据分析可以应用到哪些领域
随着大数据的应用越来越广泛,应用的行业也越来越多,我们每天都可以看到一些关于数据分析的新鲜应用,从而帮助人们获取到有价值的信息。例如,网购时经常发现电商平台向我们推荐商品,往往这类商品都是我们最近浏览的&…
printf(%d, -10u); 这个输出什么呀, 0或1?
printf("%d", -1<0u); 这个输出什么呀, 0或1?周银辉 既然我这么问了, 那么答案自然不是1,而是0看看下面的代码: 对于-10u输出为-1,似乎理所当然,但为什么-1<0u却输出0呢,也就是说-1不小于0u,好神奇啊…

Enterprise Library 4 缓存应用程序块的设计
缓存应用程序为以下目的而设计: 提供一个大小可管理的 API 集合。允许开发人员添加标准的缓存操作到他们的应用程序中,而不用学习应用程序块的内部工作。用 Enterprise Library 配置控制台来简化配置。有效率的执行。线程安全。某些东西在被多个程序线程…

【软件测试培训】了解jmeter分布式测试
一提到分布式测试,大家肯定会觉得,哇!好高大上,一定很高深的吧,这里老师推出不做傻白甜系列文章,带同学们一步一步理解jmeter的分布式测试。 首先我们来看下jmeter自动化测试的流程 ,见如下图1 【软件测试…

存储过程中返回结果集
存储过程中返回结果 从存储过程中返回结果有三种方式: 1、 返回结果集 这是客户端应用程序返回结果的最通用的方法。结果集是通过使用select语句选择数据产生的。结果集可以从永久表、临时表或局部变量中产生。将结果返回到另一个存储过程不是一种有效的方法。存储…

我的股票交易策略
投资股市已经成为我们进行资产配置的一个重要选择。在这个市场中主流的投资方式无外乎 价值投资 和 趋势投资 两种。价值投资需要了解各种财务指标来评价各支股票,在被市场低估时买入,在被市场高估时卖出。这对于非财务背景的人来说门槛偏高。趋势投资需…

你负责选歌,索尼负责用 AI 谱出风格相似的曲子
近日,索尼巴黎计算机科学实验室(CSL)正在开发一套算法系统 Flow Machines,该系统根据用户的品味谱写歌曲,其歌曲在迎合用户口味的基础上,适用于所有现有音乐风格。 技术人员搭建了一个拥有 13000 多首音乐的…

java培训:Java的十大算法
想要学好java语言,就要打好基础,java要学习的东西有很多,今天小编就来和大家说下java的十大算法。 算法一:快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn) 次比较。…

PetShop之表示层设计 - 《解剖PetShop》系列之六
六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心。正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的。一件交付给客户使用的产品,如果在用户界面(User Inte…

物联网时代营销怎么做?
这几年和大数据、O2O一样热门的词还包括“物联网”, 物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。其英文名称是:“internet of things(IoT)”。顾名思义,物联网就是物物相连的互联网。 说的再通俗一…
怎样去掉 CSDN-Markdown 上传图片中的水印
自己一直使用 Markdown 写技术图文,我们知道在 Markdown 中插入图片需要这个图片的URL地址,那么必须得找一个图床来存放图片。 // Markdown 中插入图片的语法结构 我的方法是这样的:在 CSDN 上发一篇…