点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

本文由知乎作者David LEE授权转载,不得擅自二次转载。原文链接:https://zhuanlan.zhihu.com/p/54761392

本文的目的就是对结构光(Structured Light)技术做一个比较全面的简介。

总体而言,所说的结构光主要可以分为两类

  1. 线扫描结构光;

  2. 面阵结构光。

一般说结构光的时候都指代第二类,这里也主要关注面阵结构光。

1. 线扫描结构光

线扫描结构光较之面阵结构光较为简单,精度也比较高,在工业中广泛用于物体体积测量、三维成像等领域。

1.1 数学基础

先来看一个简单的二维下的情况:

通过上图可以看到线扫描结构光装置的一个基本结构。主动光源L缓慢扫过待测物体,在此过程中,相机记录对应的扫描过程,最后,依据相机和光源在该过程中的相对位姿和相机内参等参数,就可以重建出待测物体的三维结构。

由上图可知:

可得

其中,  为投影装置的朝向。  则需要通过对应像素的像素坐标  和焦距f来确定。最终可知P点的三维坐标为:

将之推广至三维空间中:

由小孔成像模型有

由三角测量原理又有

两式联立则有

最后可得

可以看到,三维空间中的情形和之前的二维空间类似,作为俯仰角的  并没有出现在公式中。

1.2 应用

如上图,相机与投影器等相对位姿都经过了精确的校正,并且选取了测量台上的一角作为原点建立物方坐标系。因此,激光投影器所投射的线激光在物方坐标系中可以通过一个平面方程来描述:

而相机光心的位姿通过几何校正也已知,可以通过找到线激光在图像中的对应像素重建出光心与像素的射线,射线和激光平面的交点即为待求的三维空间点。

由小孔成像模型有

代入平面方程中,可得

2. 面阵结构光

面阵结构光大致可以分为两类:随机结构光和编码结构光。随机结构光较为简单,也更加常用。通过投影器向被测空间中投射亮度不均和随机分布的点状结构光,通过双目相机成像,所得的双目影像经过极线校正后再进行双目稠密匹配,即可重建出对应的深度图。如下图为某种面阵的红外结构光。

随机结构光这里就不再说了,因为和普通双目算法是很相似的。一些额外的考虑就是是否给相机加装滤光片、光斑的密度要到什么程度等硬件和光学的问题了。

这里主要讨论编码结构光。编码结构光可以分为两类:

  1. 时序编码;

  2. 空间编码。

2.1 时序编码

如上图,时序编码结构光即为在一定时间范围内,通过投影器向被测空间投射一系列明暗不同的结构光,每次投影都通过相机进行成像。假设共有n张影像,并设被阴影覆盖的部分编码值为1,未被覆盖的部分编码值为0。此时,每个像素都对应唯一一个长度为n的二进制编码,双目影像搜索匹配像素的问题就变成了查找具有相同编码值的像素。如果双目图像已经进行了极线校正,那么所投影的结构光只需要在x方向上不具有重复性即可。

如上图中,红框内的像素的编码为0110,转化为十进制则为5。此时,只需要在右图相同行上检索编码值为5的像素即可。

上图编码方式称为二进制码(binary code),每段区域不断的进行二分下去直至投影的编码宽度等于相机的像素宽度即可。对于宽度为1024的图像,最少需要10张影像来进行编码。

Binary Code 的一种改进为Gray Code. Gray Code比Binary Code具有更好的鲁棒性,它使得相邻两个像素相差1bit。Gray Code的详细介绍和其与Binary Code之间的转换可以参考wikipedia。

注意观察即可看到gray code和binary code在前几行像素上的不同

转换算法:

自然,除了使用二进制的0-1编码之外,还可以使用更多颜色层级的编码。假设使用了M种不同的灰度层级进行编码,则拍摄N张影像可以得到包含  个条带的影响。如下图中M = 3, N = 3时图中有27条条带。

由以上的介绍也可以得出时序编码结构光的优缺点:

优点:

  • 高精度;

缺点:

  • 只适用于静态场景;

  • 需要拍摄大量影像。

2.2 空间编码

为满足动态场景的需要,可以采用空间编码结构光。前面谈到了随机结构光,就是不带编码信息,投影随机纹理,而这里讨论的空间编码结构光特指向被测空间中投影经过数学编码的、一定范围内的光斑不具备重复性的结构光。由此,某个点的编码值可以通过其临域获得。其中,包含一个完整的空间编码的像素数量(窗口大小)就决定了重建的精度。

2.2.1 德布鲁因序列 (De Bruijn) 序列

德布鲁因序列(维基百科)B(k, n) 表示用k个符号(如二进制,k = 2)来表示长度为  的循环编码,n为一个编码值的长度。

举例:最简单的,k = 2时,采用二进制符号(0, 1),编码值的长度n = 2,可以得到一个长度为 的循环序列:[0, 0, 1, 1]。此时,我们得到4个长度为2的不同的编码:[0, 0], [0, 1], [1, 1], [1, 0].

因此,某种结构光就可以按照该德布鲁因序列进行编码。而获得的结构光影像中,以上4个像素的编码为[0, 0, 1, 1],通过一个大小为2的滑动窗口(假定一个结构光光斑或光束的宽度是一个像素)即可获取每个像素的编码值。同样地,如果是经过极线校正的双目图像,只需要搜索对应的行即可,此时只要求编码在x轴上不具备重复性。此时的结构光就是竖直条带状的。

当然,为了提高编码效率,也可以使用灰度图、彩色图像等比0-1编码具有更多可能编码值的投影方式。例如,对于RGB影像,采用二进制编码(即某种颜色只有 有、无 两种状态),则共有 种颜色组合,去除(0, 0, 0),还剩下7种颜色。因此k = 7, n = 3,这样就可以获得一个长度为343的条带序列。对于这个序列,唯一的约束为:相邻的条带不能为同样的颜色。否则对于解码算法来说很容易造成误差。下图展示了只使用5种颜色(k = 5, n = 3)的结构光序列:

2.2.2 二维空间编码

德布鲁因序列是一种一维编码,可以将之扩展到二维空间中,使得对于一个x * y大小的二维空间,其中一个w * h大小的子窗口所包含的编码值在这整个二维编码序列中只出现一次。

如上面中的4 * 6的M-arrays序列中,每个2 * 2大小的窗口所包含的编码值都是唯一的。

同样也可以利用RGB信息来进行二维编码,有相关算法来产生一些伪随机二维编码。如在下图中,左边展示了一个6 * 6大小的二维矩阵,子窗口的大小为3 * 3。算法首先在左上角的3 * 3子窗口中随机填入各种颜色;然后一个3 * 1大小的滑动窗口移动到右端第一个空白处,并随机填入3中颜色;在填入生成的随机颜色前,算法会先验证子窗口的编码的唯一性能不能得到保证,若不能,则会重新生成3中随机颜色;如此循环,只是在竖直方向上滑动窗口的大小变为1 * 3,直至将整个6 * 6矩阵填满。右图则是该算法产生的某种伪随机二维编码的示例。

通过以上对空间编码的讨论,也可以看出空间编码结构光的一些优缺点:

优点:

  • 无需多张照片,只需要一对影像即可进行三维重建。可以满足实时处理,用在动态环境中。

缺点

  • 易受噪声干扰:由于反光、照明等原因可能导致成像时部分区域等编码信息缺失;

  • 对于空间中的遮挡比较敏感;

  • 相较于时序编码结构光精度较低。

以上是对各种常用的结构光技术的一些介绍。其实,三维重建中最常用的还是随机面阵结构光。通过向空间中投影这样的随机结构光,再结合双目稠密重建,可以获得比单纯使用RGB影像进行三维重建更加可靠和精确的结果。

最后,向对结构光和三维重建感兴趣的同学推荐一个项目:build your own 3D scanner。和名字一样,网站上提供了自己使用触手可及和低成本的设备来DIY一个3D扫描仪所需的一切,包括教程、ppt、代码、数据和其他人的作品展示,感兴趣的同学欢迎动手尝试。

参考文献:

1.http://www.sci.utah.edu/~gerig/CS6320-S2015/CS6320_3D_Computer_Vision.html

2.http://mesh.brown.edu/byo3d/

3.http://www.rtbasics.com/Downloads/IEEE_structured_light.pdf

上述内容,如有侵犯版权,请联系作者,会自行删文。

推荐阅读:

吐血整理|3D视觉系统化学习路线

那些精贵的3D视觉系统学习资源总结(附书籍、网址与视频教程)

超全的3D视觉数据集汇总

大盘点|6D姿态估计算法汇总(上)

大盘点|6D姿态估计算法汇总(下)

机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划

汇总|3D点云目标检测算法

汇总|3D人脸重建算法

那些年,我们一起刷过的计算机视觉比赛

总结|深度学习实现缺陷检测

深度学习在3-D环境重建中的应用

汇总|医学图像分析领域论文

大盘点|OCR算法汇总

重磅!3DCVer-知识星球和学术交流群已成立

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导,650+的星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加群或投稿

那些你所不知道的结构光技术相关推荐

  1. 你所不知道的经典期货技术分析

    众所周知,投资期货是需要技术的,如果盲目的投资自然会有资金上的损失,所以在投资期货的时候都需要一定的技术,但是这个技术的获得也是非常困难的事情.尤其是新手.所以对于新手来说想要获得技术还是要一些捷径, ...

  2. 互联网人群画像和你所不知道的真相

    作为新时代互联网营销的关键部分,人群画像引起了诸多兴趣,近年颇为风靡.几乎所有的互联网广告供应商都不约而同的强调,他们有足够精确的人群画像数据,确保能够找到广告主真正的受众.但是事情果真如此吗?人群画 ...

  3. Android Context完全解析,你所不知道的Context的各种细节

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47028975 前几篇文章,我也是费劲心思写了一个ListView系列的三部曲,虽然 ...

  4. android 3d引擎_手机资讯:?iPhone XS 采用的 3D 结构光技术与安卓手机 TOF 技术有什么不同...

    如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多知识的,这些知识很多小伙伴一般都是不知道的,就好比最近就有很多小伙伴们想要知道​iPhone XS 采用的 3D 结构光技术与安 ...

  5. 一些你所不知道的VS Code插件

    摘要: 你所不知道的系列. 原文:提高 JavaScript 开发效率的高级 VSCode 扩展之二! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 作为一名业余爱好者.专业人员,甚 ...

  6. 白菜任务之家:哪些你所不知道的暴利产品,很便宜但是很暴利

    @[TOC白菜任务之家:哪些你所不知道的暴利产品,很便宜但是很暴利] 当下很多人抱怨说,现在钱太难挣了.还有人说,现在没什么好的项目可做?有人说,现在的消费者都太挑剔了.事实真的是这样吗? 那我们就要 ...

  7. 学院旅行计算机学院,计算机学院学生会 | 关于我们,你所不知道的……

    原标题:计算机学院学生会 | 关于我们,你所不知道的-- 19级的东软萌新, 你们知道吗? 在东软的某个角落有一群人 会计.会通.会美工. 且说.能文.能夙兴. 有乐.知政.能发气. 神人聚于此, 其 ...

  8. 你所不知道的console.log()(console.log详解)

    console.log,作为一个前端开发者,想必每天都会用它来做分析调试,但这个简单函数背后你所不知道的一面,很多人未必使用过,有一些也是很方便使用的 基础 首先,简单科普这个函数的作用.前端开发者可 ...

  9. 你所不知道的HTML5——语音合成

    你所不知道的HTML5--语音合成 前端能力的增强很大程度上依赖于 HTML5 的新 API,从这篇文章开始我也会对平时做不常用的一些 API 做一下学习总结 今天的文章就从语音合成开始 为什么想到这 ...

  10. android仿秒拍源码,你所不知道的程序员 程序员其实真的很…【Bus Weekly】三十六期...

    原标题:你所不知道的程序员 程序员其实真的很-[Bus Weekly]三十六期 快,点击蓝色"字体"关注这个公众号,一起涨姿势- 现如今,程序员在中国的科技 圈可以说已经达到了举足 ...

最新文章

  1. 怎么git 自己建的服务器_Git服务器搭建,以及Git基本操作
  2. python3 RSA 用私钥对随机密钥进行解密
  3. NODE-WEBKIT教程(12)全屏
  4. C#中File类的常用读取与写入文件方法的使用
  5. 【计组实验】P1 logisim完成单周期处理器开发 MIPS指令集
  6. 13.5.SolrCloud集群使用手册之数据导入
  7. mysql 数据库 安全_如何确保您MySQL数据库安全
  8. hadoop join之map side join
  9. scheduling java_JAVA定时任务实现的几种方式
  10. 重构图书馆惊魂夜(理解模型,关注设计)
  11. 高光谱地物识别练习-从ENVI标准波普库中选择端元进行物质识别
  12. 意超级杯尤文小胜AC米兰 C罗获转会后首个冠军
  13. [Angular2 Animation] Control Undefined Angular 2 States with void State
  14. UpdateProgress使用,出不来特效问题小结
  15. EasyRecovery易恢复15免费数据恢复软件功能介绍
  16. 数据挖掘导论课后习题答案-第七章
  17. 火车票分段分批放票的时间
  18. 淘宝、百度、腾讯、京东 那不得不说的四角恋故事
  19. win 7 系统(x64)安装vs2012时遇到的问题
  20. BT.656、PAL、NTSC标准并行数据结构

热门文章

  1. BLN/BNA--surfer文件格式说明
  2. swing的maven项目打成jar包
  3. 新年贺卡用python_Photoshop 一张简洁的新年贺卡制作方法
  4. 如何读懂接口服务器协议,一篇文章读懂什么是串口通信及其工作原理
  5. Matlab 自定义colormap
  6. jmeter学习指南之生成html性能结果报告(篇幅较长谨慎阅读)
  7. 人类DNA国标-中英对照表
  8. 吴氏太极拳宗师王茂斋简介
  9. 采用云原生架构:架构演进和成熟度
  10. HyperLynx(七)微带线串扰的仿真