双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第1张图片

前 言


三维重建是个跨多学科的应用领域,围绕不同的尺度大小、不同速度要求、不同精度要求、不同硬件成本等要求发展出了各种各样的技术方案。在这个应用领域,充分体现了,没有最好的设备,只有最合适的方案。在本系列文章中,我尝试解释接触过的不同技术方案,如有错误之处,敬请斧正。

双目立体视觉原理


视差 (Disparity) 及 深度计算

人依靠两只眼睛判断深度(物体离眼睛的距离),具体是如何来判断的呢,我们从小到大似乎并未接受过深度计算的训练。视差(Disparity)是解释原理的基本概念之一。我们可以做个简单的实验,将手指置于双目之间,分别开闭左右眼。怎么样,是不是发现手指不在同一个位置?这就是视差。

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第2张图片

可以参考上图,当左右相机同时观察三维点时,该点分别投影在左右相机的相平面上,这两个投影点之间的差异就是视差

这个公式看起来简单直观,其实有不少未解释清楚的地方,比如这两个x是在同一个坐标系内么,这两个像平面一定是平行摆放的吗,为什么可以直接减?等等。

要解释清楚这些问题,上图还是略简陋,让我们换张图来解释。

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第3张图片

图中

是三维物体的顶点坐标,其和左右相机光心
的连线与左右相平面的交点
即为投影点。注意现在说的所有坐标都是定义在同一个坐标系内,坐标原点与标架已经在图中左下角标识出来了。

现在问题来了,已知

,已知
,求
。这是一个初中几何题,答案很简单:

从公式可以看出,视差

和深度
成反比关系。视差越大,可以探测的深度越小。
是两个相机光心的距离,又叫基线(baseline),
是相机的焦距。
与深度均成正比关系。

立体匹配

从上一节可以看到,如果要计算深度,我们需要知道视差、基线、焦距。另外注意,上文的推导是基于理想模型,比如不考虑相机的畸变,不考虑双相机光轴不平行的情况。

在视差计算之前,我们首先给定了两个投影点。但实际应用中,我们并不知道左右相机中哪两个点是对应点。查找对应点是双目立体视觉中非常核心的步骤,可以毫不夸张地说,大部分的结构光重建方案解决的都是如何准确快速地匹配对应点。在介绍具体方案之前,有些通用的背景知识稍微铺垫一下。

对极几何(Epipolar Geometry)是一个内容非常丰富的范畴(本文不想铺展太多,只是选择几个概念简单描述,详细内容可以参考《计算机视觉中的多视图几何》一书)。对极几何描述的是三维点与两个相机相平面之间的特殊几何关系,我们先看下图的模型。

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第4张图片

其中

为两个相机中心,
为空间中一点,
对应像平面上的投影分别为
连线与像平面的交点
称为
极点(Epipoles)
称为
极线(Epipolar Lines)
三点组成的平面称为
极平面(Epipolar Plane)

这个模型有个有趣的性质。当三维点

沿着
方向接近左相机时,我们发现其在左相机上的投影点
并不会移动,但是其在右相机相平面上的投影点
发生了变化,其移动轨迹一定是沿着极线
。反过来,假设我们并不知道
点坐标,只知道
是其在左相机上的投影,要寻找其在右相机相平面中的投影,则只需要沿着极线
搜索即可。这个性质使得对应点匹配的搜索空间直接从2维降低到1维。

聪明的同学看到这肯定会问了,没有

点怎么知道极线在哪,这不是因果不分么?事实上极线的位置仅和
以及相机的内外参有关,和
点位置无关。这就引出了接下来的约束。在对极几何中有个非常著名的约束---对极约束(Epipolar Constraint)形式化地描述了对应点
之间的几何关系:

其中

是基础矩阵(Fundamental Matrix)。这个式子是如此简洁,以至于忍不住想要推导一番,推导过程见附录1。

极线矫正 对极约束描述了对应点匹配可沿极线搜索。在实际应用中,两个相机摆放一定是不平行的,因而相平面中的极线大概率是条斜线,这就给搜索过程带来了不便,为了简化过程,还需要引入额外的极线矫正步骤,使得两相机的极线共线且平行于相平面的

轴。矫正前后的效果如下面两张图所示,应该比较直观。

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第5张图片

双目摄像头 三维坐标 python_聊聊三维重建-双目立体视觉原理_第6张图片

详细算法可以参考 这篇教程。

对应点查找 经过上述处理后,要生成视差图,最核心的步骤就是在相平面的同一行上,查找对应点了。查找的方法有多种,大体上可以分成两类。

  • 提取图像特征 该类方法可以对每张图像单独进行分析,提取“特征”。这里特征可以有不同的表示方法,如边缘、角点等,也可能来自其他主动投射的结构光信息,如正弦条纹相位值、编码值等,通过在双目图像之间查找相同(相似)特征来确定对应点。
  • 使用相关关系 该类方法假设对应点小领域内有相似的亮度模式,因而可以用两者的相关关系来定位。为了增加额外的亮度变化信息,通常会通过主动光源投射随机散斑这类图案。

具体的结构光重建原理会在后续文章中展开讨论。

参考

  • 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

附录

  1. 对极约束证明:

极线

经过点
,则
,且
。因而可得
,将其改写成斜对称矩阵形式,可得:

再来,可以假设存在单应矩阵

,满足
,由此我们可以推导出:

你可能感兴趣的:(双目摄像头,三维坐标,python)