文章图片
前 言 三维重建是个跨多学科的应用领域,围绕不同的尺度大小、不同速度要求、不同精度要求、不同硬件成本等要求发展出了各种各样的技术方案。在这个应用领域,充分体现了,没有最好的设备,只有最合适的方案。在本系列文章中,我尝试解释接触过的不同技术方案,如有错误之处,敬请斧正。
双目立体视觉原理 视差 (Disparity) 及 深度计算
人依靠两只眼睛判断深度(物体离眼睛的距离),具体是如何来判断的呢,我们从小到大似乎并未接受过深度计算的训练。视差(Disparity)是解释原理的基本概念之一。我们可以做个简单的实验,将手指置于双目之间,分别开闭左右眼。怎么样,是不是发现手指不在同一个位置?这就是视差。
文章图片
可以参考上图,当左右相机同时观察三维点时,该点分别投影在左右相机的相平面上,这两个投影点之间的差异就是视差:
文章图片
这个公式看起来简单直观,其实有不少未解释清楚的地方,比如这两个x是在同一个坐标系内么,这两个像平面一定是平行摆放的吗,为什么可以直接减?等等。
要解释清楚这些问题,上图还是略简陋,让我们换张图来解释。
文章图片
图中
文章图片
是三维物体的顶点坐标,其和左右相机光心
文章图片
的连线与左右相平面的交点
文章图片
、
文章图片
即为投影点。注意现在说的所有坐标都是定义在同一个坐标系内,坐标原点与标架已经在图中左下角标识出来了。 现在问题来了,已知
文章图片
,已知
文章图片
文章图片
,求
文章图片
。这是一个初中几何题,答案很简单:
文章图片
从公式可以看出,视差
文章图片
和深度
文章图片
成反比关系。视差越大,可以探测的深度越小。
文章图片
是两个相机光心的距离,又叫基线(baseline),
文章图片
是相机的焦距。
文章图片
与深度均成正比关系。 立体匹配
从上一节可以看到,如果要计算深度,我们需要知道视差、基线、焦距。另外注意,上文的推导是基于理想模型,比如不考虑相机的畸变,不考虑双相机光轴不平行的情况。
在视差计算之前,我们首先给定了两个投影点。但实际应用中,我们并不知道左右相机中哪两个点是对应点。查找对应点是双目立体视觉中非常核心的步骤,可以毫不夸张地说,大部分的结构光重建方案解决的都是如何准确快速地匹配对应点。在介绍具体方案之前,有些通用的背景知识稍微铺垫一下。
对极几何(Epipolar Geometry)是一个内容非常丰富的范畴(本文不想铺展太多,只是选择几个概念简单描述,详细内容可以参考《计算机视觉中的多视图几何》一书)。对极几何描述的是三维点与两个相机相平面之间的特殊几何关系,我们先看下图的模型。
文章图片
其中
文章图片
为两个相机中心,
文章图片
为空间中一点,
文章图片
在
文章图片
对应像平面上的投影分别为
文章图片
。
文章图片
连线与像平面的交点
文章图片
称为
极点(Epipoles),
文章图片
称为
极线(Epipolar Lines),
文章图片
三点组成的平面称为
极平面(Epipolar Plane)。 这个模型有个有趣的性质。当三维点
文章图片
沿着
文章图片
方向接近左相机时,我们发现其在左相机上的投影点
文章图片
并不会移动,但是其在右相机相平面上的投影点
文章图片
发生了变化,其移动轨迹一定是沿着极线
文章图片
。反过来,假设我们并不知道
文章图片
点坐标,只知道
文章图片
是其在左相机上的投影,要寻找其在右相机相平面中的投影,则只需要沿着极线
文章图片
搜索即可。这个性质使得对应点匹配的搜索空间直接从2维降低到1维。 聪明的同学看到这肯定会问了,没有
文章图片
点怎么知道极线在哪,这不是因果不分么?事实上极线的位置仅和
文章图片
以及相机的内外参有关,和
文章图片
点位置无关。这就引出了接下来的约束。在对极几何中有个非常著名的约束---对极约束(Epipolar Constraint)形式化地描述了对应点
文章图片
之间的几何关系:
文章图片
其中
文章图片
是基础矩阵(Fundamental Matrix)。这个式子是如此简洁,以至于忍不住想要推导一番,推导过程见附录1。 极线矫正 对极约束描述了对应点匹配可沿极线搜索。在实际应用中,两个相机摆放一定是不平行的,因而相平面中的极线大概率是条斜线,这就给搜索过程带来了不便,为了简化过程,还需要引入额外的极线矫正步骤,使得两相机的极线共线且平行于相平面的
文章图片
轴。矫正前后的效果如下面两张图所示,应该比较直观。
文章图片
文章图片
详细算法可以参考 这篇教程。
对应点查找 经过上述处理后,要生成视差图,最核心的步骤就是在相平面的同一行上,查找对应点了。查找的方法有多种,大体上可以分成两类。
- 提取图像特征 该类方法可以对每张图像单独进行分析,提取“特征”。这里特征可以有不同的表示方法,如边缘、角点等,也可能来自其他主动投射的结构光信息,如正弦条纹相位值、编码值等,通过在双目图像之间查找相同(相似)特征来确定对应点。
- 使用相关关系 该类方法假设对应点小领域内有相似的亮度模式,因而可以用两者的相关关系来定位。为了增加额外的亮度变化信息,通常会通过主动光源投射随机散斑这类图案。
参考
- https://courses.cs.washington.edu/courses/cse455/09wi/Lects/lect16.pdf
- http://www.cs.tut.fi/~suominen/SGN-1656-stereo/stereo_instructions.pdf
- https://blog.csdn.net/Ketal_N/article/details/83744626
- CS231A: Computer Vision, From 3D Reconstruction to Recognition
- 计算机视觉中的多视图几何 (豆瓣)
- https://www.ims.tuwien.ac.at/people/michael-hornacek/downloads/rectification-tutorial.pptx
- http://www.sci.utah.edu/~gerig/CS6320-S2013/Materials/CS6320-CV-F2012-Rectification.pdf
- http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/FUSIELLO2/node3.html
- 对极约束证明:
文章图片
经过点
文章图片
,则
文章图片
,且
文章图片
。因而可得
文章图片
,将其改写成斜对称矩阵形式,可得:
文章图片
再来,可以假设存在单应矩阵
文章图片
,满足
文章图片
,由此我们可以推导出: 【双目摄像头|双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理】
文章图片
推荐阅读
- 算法|一文详解三维重建中的立体匹配
- 人工智能|下一代社交平台(三维重建万物)
- Python面向对象编程(OOP)(教程)
- 在Python教程中读写文件
- 在Mac OS X上安装Anaconda
- 蓝桥杯|第十二届蓝桥杯python
- python|第十二届蓝桥杯国赛三等奖 大学Python组,部分试题答案
- Python|第十二届青少年蓝桥杯 Python 组3月中/高级试题
- 揭开生成对抗网络(GAN)的神秘面纱