结构光三维重建基本原理
点击上方“3DCVer”,选择“星标”
干货第一时间送达

结构光三维重建系统是由一个相机和一个投影仪组成,关于结构光三维重建系统的理论有很多,其中有一个简单的模型是把投影仪看做相机来使用,从而得到物体的三维信息。接下来我将详细介绍这个模型的原理。
在把投影仪当相机使用之前,我们得知道如何通过两个相机的信息得到物体的三维信息。

如图所示是一个双目相机系统,如果只有一个相机(以左相机为例),相机上的一个像素点可以对应三维空间中光心与相机成像点连线OLP上的无穷个点,所以仅凭一个相机的信息是无法得到空间中物体的三维信息。但是如果能有另一个相机(右相机),则物体的三维信息可以唯一确定。因为离左相机不同距离的物体,在右相机上的成像位置是不同的,例如,图中线OLP上的点,在右相机的成像位置为图中红线,如果能知道物体在左相机成像位置PL以及物体在右相机的成像位置PR的话,就可以唯一确定物体三维位置P。
熟悉双目成像系统的小伙伴应该知道,要真正求解出物体的三维坐标值,我们需要知道左右相机的内参矩阵KL和KR,以及左右相机之间的外参R,T。其中R是右相机坐标系和左相机坐标系之间的旋转矩阵,T是右相机坐标系和左相机坐标系之间的平移矩阵。
下面我将推导已知三维空间中的物体在左右相机上的成像位置分别为PL(uL,vL)和PR(uR,vR)的情况下,如何解出物体的三维信息P(X,Y,Z)。
由于世界坐标系的原点可以是空间中的任意一点,为了使计算简单,不妨让其与左相机坐标系的原点重合。则左相机的外参矩阵(左相机和世界坐标系的转换矩阵)
,
右相机的外参矩阵(右相机和世界坐标系的转换矩阵),
根据相机模型我们可以得到如下方程等式:

联立上述方程组,方程组中有5个未知数,sL,sR,X,Y,Z,和六个方程。完全足够解出5个未知数。对于双目系统来说,最大的问题是怎么找到左相机成像点(uL,vL)对应的右相机成像点(uR,vR),这个方法有很多,首先通常需要依据极线约束对左右相机图像做立体矫正,把对应点在图像中二维的搜索放到一维(同一行)上,然后在根据各种代价计算找到准确匹配点,具体方法这里就不详述了。
知道如何通过左右相机得到物体的三维信息后,我们来看怎么把投影仪看做相机,或者说看做相机的逆。相机捕捉的是物体反射的光信息,而投影仪是把光信息投射到物体上。如果我们对投影仪投射的每个像素点的光进行编码,把编码后的光投射到物体表面上,并通过对相机捕捉到的物体表面光信息进行解码,就可以知道打在物体表面的光是由投影仪那个像素发出的,也就可以知道物体表面会在虚拟的投影仪图像上的成像位置。
投影光编码的方式很多,通常的编码是分别对投影图片的行和列编码,以格雷码为例,常见的格雷码编码如下图所示。

列格雷码示例
通过对相机图片上拍摄的物体表面投射的列格雷码光编码及行格雷码光编码进行解码,就可以知道物体在相机图片上成像位置(uc,vc)及其对应的投影仪虚拟的成像位置(up,vp),则上述双目方程可以改为:

其中Kc和Kp分别代表的是相机和投影的内参,和双目系统一样,我们不妨假设世界坐标系的原点与相机坐标系重合,则
,Rp=R,Tp=T,其中R,T分别为投影仪坐标系对相机坐标系的旋转和平移矩阵。
在上述方程中,一共有五个未知数sc,sp,X,Y,Z,和六个方程。实际上,六个方程可以解六个未知数,即使我们只需要知道知道up和vp中的一个,这也是为什么在结构光三维重建时我们通常只需要投一个方向的条纹(横条纹或者竖条纹)的原因。
通过上述方程,我们可以解出物体的三维信息,以投影列格雷码(获得up)为例,物体的三维信息的解法推导如下:

则结构光三维成像系统物体的三维解为:

自此,我们就把将投影仪看成的模型推导完毕,想要真正的完成物体的三维重建,我们还需要知道如何获取相机和投影仪的标定参数,以及如何对投影光进行编码和解码,实际上除了格雷码编码外,还有很多常见光编码方式,如相移法,格雷码+相移法,多频外差法等,每个编码方法都有他们的优劣。今后我将对一一介绍以上内容。
本文的参考文献是High-accuracy, high-speed 3D structured light imaging techniques and potential applications to intelligent robotics,这篇文章很详细的介绍了如何通过结构光系统获得物体的三维信息。Ps:这篇文献中给出的三维解有印刷错误,笔者在这篇文章中给出了正确解,感兴趣的小伙伴也可以自己推导。
本文仅做学术分享,如有侵权,请联系删文。
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片: 
带尺寸的图片: ![]()
居中的图片: 
居中并且带尺寸的图片: ![]()
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
| 项目 | Value |
|---|---|
| 电脑 | $1600 |
| 手机 | $12 |
| 导管 | $1 |
设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列 | 第二列 | 第三列 |
|---|---|---|
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
| TYPE | ASCII | HTML |
|---|---|---|
| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
| Quotes | "Isn't this fun?" | “Isn’t this fun?” |
| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎
更多推荐


所有评论(0)