前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白系列(5)| 计算机视觉:3D立体视觉

小白系列(5)| 计算机视觉:3D立体视觉

原创
作者头像
一点人工一点智能
发布2023-09-04 11:02:13
4480
发布2023-09-04 11:02:13
举报

01  介绍

本文中,我们将讨论立体视觉,这是一种使用两个或多个摄像机来生成全视场三维测量的机器视觉技术。

02  什么是立体(3D)视觉?

计算机立体视觉是从二维图像中提取三维信息的过程,例如由CCD相机产生的图像。它结合每个视角中物体的相对位置,来融合多个视角的数据。因此,我们在高级驾驶辅助系统和机器人导航等应用中使用立体视觉。

这类似于人类视觉的工作原理。我们大脑同时整合来自两只眼睛的图像,从而产生三维视觉:

图片
图片

尽管每只眼睛只产生二维图像,但人脑可以通过结合两个视角并识别它们之间的差异来感知深度。我们称这种能力为立体视觉。

03  感知深度

假设有左右两个摄像机,它们都产生了场景的二维图像。设S 为场景中一个真实世界(三维)物体上的一个点:

图片
图片

为了确定生成的三维图像中S 的深度,我们首先在左右两个二维图像中找到与其对应的两个像素点LR 。我们可以假设我们知道两个摄像机的相对位置。计算系统使用相机之间的相对距离的先验知识,通过三角测量来估计深度d

人脑的工作方式也是如此。它感知深度和三维形状的能力被称为立体视觉。

04  计算机系统如何实现立体视觉

我们需要估计每个点的深度,从而从二维图像中生成三维图像。从那里,我们可以确定点的相对深度并得到深度图:

图片
图片

深度图是一种包含了从一个视点分离场景物体表面的数据的图像(或图像通道)。这是在3D计算机图形和计算机视觉中表示场景深度的常见方式。我们可以在上述图像的左下角看到深度图的一个示例。

05  立体视觉的几何基础

对极几何是立体视觉的几何学基础。3D点与它们在2D图像上的投影之间存在多种几何关系。这些关系是基于针孔相机模型开发的。我们假设可以使用这些关系来表示法线。

当一个3D物体在图像中被捕捉(投影)时,它被投影到一个2D(平面)投影空间中。这种所谓的“平面投影”会导致深度的丢失。

两个立体图像之间的视差是物体的表观运动。如果我们闭上一只眼睛,然后迅速睁开,同时保持另一只眼睛闭着,我们会观察到靠近我们的物体移动得很多,而距离我们较远的物体几乎不动。我们将这种现象称为“视差”。

5.1 方向向量

在对极几何中,方向向量是从图像中的一个像素点发出的一个三维向量:

图片
图片

方向向量,顾名思义,是光线从哪个方向到达像素传感器的方向。因此,这条线携带了所有可能成为图像中2D像素候选源的3D点。在上图中,方向向量L_{s1}S_1 起源于点L_{s1} ,它是与场景中的3D点S_1 对应的“左侧”2D像素。

5.2 方向向量的交点

场景中一个3D点的方向向量会在从不同视角拍摄的图像中投射出相应的2D点。因此,一对立体图像将会有从表示3D场景中共同的3D点的2D像素发出的方向向量。方向向量上的所有点都是候选源。由于两个向量只能在一个唯一的点上相交,我们将交点视为源点。

图片
图片

在上图中,左图和右图的方向向量(分别为L_{s1}S_1R_{s1}S_1 )在单个源点S_1 处相交。这个场景中的3D源点是光线从中投射出左图像的像素L_{s1} 和右图像的像素R_{s1} 的点。

5.3 深度计算

我们假设我们知道相机之间的距离,并且相对于物体和相机之间的距离来说,这个距离非常小。在这个假设下,我们可以通过三角测量确定空间中的3D点的位置。深度是在连接两个相机的线上的垂直投影:

图片
图片

上面的图像显示了从连接两个相机的线上的点的实际深度d_{s1} 。让我们注意到线段d_{s1} 和线段L_{s1}R{s_1} 之间的角度并不完全是90度。然而,在现实中,线段L_{s1}R{s_1} 相对于 d_{s1} 来说非常小。这导致线段d_{s1} 和线段L_{s1}R{s_1} 之间的角度近似为90度。由于我们通过三角测量确定了S_1 的位置,并且我们知道相对距离L_{s1}R{s_1} ,我们可以使用勾股定理计算深度d_{s1}

图片
图片

由于s 相对于t 来说非常大,角度\angle S_1M_{s1}R_{s1} 接近于90^。 。长度L_{s1}M{s_1}M_{s1}R{s_1} 几乎相等(用t 表示)。同样,长度L_{s1}S_{1}R_{s1}S_1 也几乎相等(用s 表示)。应用勾股定理,我们得到s^2=d_{s1}^2+t^2 。解出点S_1 的深度,我们得到:

d_{s1}=\sqrt{s^2-t^2}

由于s 相对于t 来说非常大,深度d_{s1} 接近于s

06  计算机立体视觉的数学实现的关键概念

三角测量和视差图是计算机立体视觉所需的工具。在像素级别上,我们使用三角测量从一对立体图像的左右像素点中确定一个3D空间中的点。对于具有数百万像素点的大图像,我们使用视差图。

6.1 计算机视觉中的三角测量

计算机视觉中的三角测量是从其在两个或多个图像上的投影中确定一个3D空间中的点的过程。相机矩阵表示相机从3D场景到2D图像空间的投影函数的参数。三角测量方法的输入是检测到的图像点(L_{s1}R_{s1} )的齐次坐标以及左右相机的相机矩阵。

三角测量方法的输出是一个以齐次表示的3D点。三角测量方法只是以抽象形式表示计算;在现实中,计算可能相当复杂。一些三角测量技术需要分解为一系列计算阶段,例如奇异值分解或确定多项式的根。闭合形式的连续函数是另一组三角测量技术。

另一类三角测量技术使用迭代参数估计。这意味着各种方法在计算时间和过程复杂性方面可能有所不同。中点法、直接线性变换和本质矩阵是我们用于三角测量的常见数学工具。

6.2 视差图

视差是左右图像之间一个点的投影的水平位移。相反,深度是位于真实3D世界中的点的深度坐标。

要从一对立体图像创建视差图,我们首先必须将左图像中的每个像素与右图像中的相应像素进行匹配。我们计算每对匹配像素之间的距离。我们使用这些距离数据生成一幅称为视差图的强度图像。

要计算视差图,我们必须解决所谓的对应问题。这个任务旨在识别立体图像中的像素对,它们是空间中同一个实际物理点的投影。立体图像的校正可以大大简化这个问题。通过这种转换,匹配点将位于同一水平线上,将2D立体对应问题转化为1D问题。这就是我们打破“维度诅咒”的方式。

块匹配算法是识别相关像素的基本方法。该算法的基础是在第一幅图像中围绕一个点的一个小窗口与第二幅图像中沿着单条水平线排列的几个小块之间的比较。用于窗口匹配的两个主要相似度度量是绝对差值之和(SAD)和平方差之和(SSD)。

视差与深度呈反比关系。我们通过使用相机的几何配置作为输入,将视差图进行三角测量,将其转换为深度图。

07  结论

在本文中,我们了解了当代计算机如何实现立体视觉。我们从立体图像对中得到视差图。然后,我们计算视差图中每对匹配像素之间的距离。知道两个相机的精确位置可以计算深度图。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01  介绍
  • 02  什么是立体(3D)视觉?
  • 03  感知深度
  • 04  计算机系统如何实现立体视觉
  • 05  立体视觉的几何基础
    • 5.1 方向向量
      • 5.2 方向向量的交点
        • 5.3 深度计算
        • 06  计算机立体视觉的数学实现的关键概念
          • 6.1 计算机视觉中的三角测量
            • 6.2 视差图
            • 07  结论
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档