点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

知乎作者David LEE

本文的目的就是对结构光(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、代码、数据和其他人的作品展示,感兴趣的同学欢迎动手尝试。

好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

揭秘三维视觉之结构光原理相关推荐

  1. 3D-camera结构光原理

    3D-camera结构光原理 目前主流的深度探测技术是结构光,TOF,和双目.具体的百度就有很详细的信息. 而结构光也有双目结构光和散斑结构光等,没错,Iphone X 的3D深度相机就用 散斑结构光 ...

  2. 3D结构光原理及应用浅析

    3D结构光,是近些年立体视觉图像处理应用比较热的方向,区别于双目立体视觉以及TOF(飞行时间),3D结构光深度相机模块 通常由一枚红外投影仪,红外相机以及一块专门用于计算深度的处理器组成,如下图所示: ...

  3. 顺藤摸瓜之3D结构光原理

    1概述: 如何描述二维相平面中的一个点? 该二维相面,即 三维空间 的一个点 两个船桨位于 水面(二维平面)的点,通过支架(光心),两桨(光机相机)相交于一三维空间点的一点. 水面表示相机面和光机面: ...

  4. 将实时三维计算机技术,基于结构光实时三维重建计算机应用技术专业论文.docx...

    基于结构光实时三维重建计算机应用技术专业论文 优秀毕业论文 精品参考文献资料 华 华 东 师 范 大 学 硕 士 学 位 论 文基 于 结 构 光 的 实 时 三 维 重 建 童鱼 查硕 士 学位 论 ...

  5. 3D视觉/人工智能/结构光三维测量

    关注公众号了解更多:

  6. 结构光、双目、ToF——三种3D技术对比

    本文虽然命名为对比文档,但是对比意义不是特别强烈的内容仍不在少数--如三种3D技术的误差等部分--换言之,本文旨在通过对比的形式对三种3D技术的特点和特性进行总结.资料主要来自于网络,部分相关参考文献 ...

  7. 编码结构光三维视觉测量系统(二)

    一.摘要 结构光三维视觉测量方法不需要直接接触被测物体,不会磨损被测物体表面,且具有速度快.精度高.实用性高等特点,是进行三维测量的最佳方法之一.而单目结构光视觉测量系统与双目相比,具有成本低.算法简 ...

  8. 图像条纹检测 python_【连载2.1】结构光三维检测引言面向强反射表面的多传感器三维检测技术研究...

    本章大纲 2.1 引言 2.2 多传感器三维检测系统介绍 2.2.1 多传感器三维检测总体模型2.2.2 多传感器三维检测系统工作原理 2.3 坐标系统一化全局标定方法 2.3.1 全局标定方法介绍2 ...

  9. opencv基础:结构光立体成像原理及标定

    原文链接:https://zhuanlan.zhihu.com/p/78512354(建议参考原文链接) https://mp.weixin.qq.com/s?__biz=MzU1MjY4MTA1MQ ...

最新文章

  1. python爬虫beautifulsoup4系列4-子节点
  2. 定义工厂(Plant)
  3. 数据结构与算法-day3-归并 快速排序
  4. go语言的书籍的淘宝调查
  5. [pytorch、学习] - 5.4 池化层
  6. 03-git上传大项目的时很慢
  7. Android支付实践(三)之银联支付功能(客户端+服务端)
  8. 王传福:电动汽车开始由政策与市场双轮驱动|电动车百人会2019
  9. php给留言分配id_php建立简单的用户留言系统
  10. node.js离线库
  11. 切比雪夫不等式例题讲解_浅谈|f(x)|最大值的最小值问题--切比雪夫最佳逼近直线在高考中的应用...
  12. 解决谷歌浏览器拦截文件只有舍弃选项问题
  13. 组合体视图的画图步骤_画组合体三视图的方法和步骤.ppt
  14. 自定义镜像上传阿里云
  15. 阅读文献:VOLO: Vision Outlooker for Visual Recognition
  16. 腾讯QQ2011Beta4插件管理器(去校…
  17. ApacheCN 公众号文章汇总 2019.6
  18. 机器人煮面机创始人_煮面机器人引领智能餐饮新时代
  19. Lombok实现原理解析
  20. Revit软件中参照线在制作墙体上的使用及快速CAD图纸墙转化

热门文章

  1. 重磅!Facebook更新PyTorch 1.1,打算跨GPU分割神经网络
  2. 冠军揭晓!京东Alpha开发者大赛Pick谁上了C位
  3. ICLR 2019论文投稿近1600篇,强化学习最热门
  4. AI一分钟 | 马斯克证实:特斯拉私有化的幕后推手是沙特主权基金;DeepMind的AI可以检测出超过50种眼疾...
  5. 资源 |​ 史上最全机器学习笔记
  6. CS本科毕业生能拿到45万年薪?
  7. SpringCloudAlibaba:Nacos实现原理详解
  8. 面试官:如果要存ip地址,用什么数据类型比较好
  9. 设计模式在工作中的实践
  10. 当我们在说微服务治理的时候究竟在说什么