立体视觉的核心技术:视差计算与图像校正详解

embedded/2024/11/12 20:04:48/

立体视觉的核心技术:视差计算与图像校正详解

在立体视觉中,通过双目相机(即左右两台相机)的不同视角捕获的图像,结合几何关系,我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差(disparity)和相似三角形的几何关系推导深度 z z z,并阐述图像校正(Image Rectification)的作用及其在视差匹配中的意义。

一、立体成像中的几何关系

在双目立体视觉系统中,左相机和右相机之间存在一个固定的水平距离,称为基线(baseline),记作 B B B。两个相机的焦距(focal length)为 f f f
在这里插入图片描述

图中展示了双目立体视觉系统的结构和关键参数,帮助我们理解视差与深度的关系。

1. 基本变量定义

如图所示,双目视觉系统由左相机(光心 O l O_l Ol)和右相机(光心 O r O_r Or)构成,两者之间的距离为基线 B B B。设待测物体在三维空间中的真实坐标为 P ( X , Y , Z ) P(X, Y, Z) P(X,Y,Z),其在左、右相机图像平面上的投影点分别为 p l ( x l , y l ) p_l(x_l, y_l) pl(xl,yl) p r ( x r , y r ) p_r(x_r, y_r) pr(xr,yr)

2. 焦距与图像平面

每个相机都有一个图像平面,其焦距为 f f f。图像平面是相机感知三维世界的二维空间,它距离相机光心的垂直距离为 f f f。在此图像平面上,左、右相机的成像点分别为 p l p_l pl p r p_r pr,其横坐标分别为 x l x_l xl x r x_r xr

3. 视差的定义

视差(Disparity)表示物体在左右图像平面上的水平位置差异,用 d x dx dx 表示,定义为:
d x = x l − x r dx = x_l - x_r dx=xlxr
视差的存在是因为左右相机拍摄同一物体的角度不同。视差越大,意味着物体越靠近相机;反之,视差越小,物体离相机越远。

4. 深度 Z Z Z 的推导

我们可以利用相似三角形关系推导出物体到相机的深度 Z Z Z。根据图中的三角形关系,以下是推导深度 Z Z Z 的过程。

  • 对于左相机成像的三角形,可以得到:
    X Z = x l f \frac{X}{Z} = \frac{x_l}{f} ZX=fxl

  • 对于右相机成像的三角形,可以得到:
    X − B Z = x r f \frac{X - B}{Z} = \frac{x_r}{f} ZXB=fxr

通过消去 X X X,得到 Z Z Z 的公式如下:

  1. 由左相机的成像关系得出:
    X = x l ⋅ Z f X = \frac{x_l \cdot Z}{f} X=fxlZ

  2. X X X 代入右相机的成像关系中,得到:
    x l ⋅ Z f − B Z = x r f \frac{\frac{x_l \cdot Z}{f} - B}{Z} = \frac{x_r}{f} ZfxlZB=fxr

  3. 整理得出:
    x l ⋅ Z − B ⋅ f = x r ⋅ Z x_l \cdot Z - B \cdot f = x_r \cdot Z xlZBf=xrZ

  4. Z Z Z 项合并,可以得出最终深度 Z Z Z 的表达式:
    Z = f B x l − x r = f B d x Z = f \frac{B }{x_l - x_r} = f \frac{B }{dx} Z=fxlxrB=fdxB

5. 深度 Z Z Z 与视差 d x dx dx 的关系

最终,深度 Z Z Z 可以表示为基线 B B B、焦距 f f f 和视差 d x dx dx 的函数:
Z = f B d x Z =f \frac{B }{dx} Z=fdxB

该公式表明,深度 Z Z Z 与视差 d x dx dx 成反比关系。具体来说:

  • 当视差 d x dx dx 增大时,深度 Z Z Z 会减小。这表示物体距离相机更近,因为左右相机看到的物体位置差异显著。
  • 当视差 d x dx dx 减小时,深度 Z Z Z 会增大。这表示物体距离相机更远,因为左右相机看到的物体位置几乎相同。

这种关系很直观:当物体靠近相机时,由于角度差异,左右相机的成像位置会有较大差异,形成较大的视差;而当物体较远时,左右相机成像位置差异较小,视差随之减小。


二、图像校正:视差匹配的预处理

在实际的双目视觉系统中,左右相机并不总是能够完美对齐。由于安装误差、镜头失真或相机的角度偏差,左右图像可能存在垂直方向或旋转上的不一致。这会导致对应点的极线(epipolar line)并不水平。
在这里插入图片描述
如图所示,左右图像平面中的极线可能是倾斜的,这种不对齐给视差匹配带来了额外的复杂性。为了解决这一问题,我们通常需要对图像进行图像校正(Image Rectification),即通过一种变换使得左右图像的极线变得水平平行,使得同一空间点在左右图像中的投影点位于同一条水平线上。这种操作能够简化视差匹配过程,并提高深度估计的精度。

1. 图像校正的作用

图像校正的核心目标是对输入图像进行透视变换,确保左右相机的极线在校正后的图像中保持水平。校正后的图像具有以下特点:

  • 极线水平对齐:校正后的极线保持水平,从而简化视差计算。
  • 简化匹配:同一个空间点的左右成像点处于同一水平线上,有利于更高效、精确地进行视差匹配。

在图中可以看到,原始左右图像的极线(红色虚线)可能并不水平;校正之后,这些极线被强制水平对齐,从而满足视差计算的要求。

2. 图像校正的数学描述

为了实现图像校正,构造一个变换矩阵 H H H 是关键步骤。通过这个矩阵,我们可以对原始图像进行透视变换,将左右图像中的点映射到校正后的平面上,从而使得左右相机的极线水平对齐。

图像校正过程可以表示为:

校正图像 = 原始图像 × H \text{校正图像} = \text{原始图像} \times H 校正图像=原始图像×H

其中 H H H 是校正变换矩阵,其求解依赖于相机的内参外参,即相机的内部光学特性(焦距、光心)和相机相对于其他相机或世界坐标系的空间位置关系(旋转和平移)。

内参矩阵 K K K

相机的内参描述了相机的光学特性,包括焦距和光心位置。内参矩阵 K K K 通常表示为:

K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1

其中 f x f_x fx f y f_y fy 是相机在 x x x y y y 方向的焦距, c x c_x cx c y c_y cy 是光心的位置。内参矩阵 K K K 可以通过相机标定技术得到。

外参矩阵 [ R ∣ t ] [R|t] [Rt]

外参定义了相机的空间位置和方向,包括旋转矩阵 R R R 和平移向量 t t t。其中, R R R 是一个 3 × 3 3 \times 3 3×3 矩阵,描述了相机坐标系相对于世界坐标系的旋转; t t t 是一个 3 × 1 3 \times 1 3×1 向量,描述了相机的平移。外参矩阵组合表示为:

外参矩阵 = [ R t 0 1 ] \text{外参矩阵} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} 外参矩阵=[R0t1]

通过内参和外参的组合,我们可以构造出用于校正的变换矩阵 H H H

构造校正矩阵 H H H

校正矩阵 H H H 的构造如下:

H = K ⋅ R rect ⋅ K − 1 H = K \cdot R_{\text{rect}} \cdot K^{-1} H=KRrectK1

其中:

  • K K K 为内参矩阵;
  • R rect R_{\text{rect}} Rrect 是通过外参计算得到的旋转矩阵,用于将原始图像坐标旋转到极线水平对齐的校正坐标系下;
  • K − 1 K^{-1} K1 是内参矩阵的逆矩阵,用于将校正结果映射回像素坐标系。

通过这种变换,校正后的图像点 p rect \mathbf{p}_{\text{rect}} prect 可以由原始图像点 p \mathbf{p} p 映射得到:

p rect = H ⋅ p \mathbf{p}_{\text{rect}} = H \cdot \mathbf{p} prect=Hp

3. 校正后的视差匹配

完成图像校正后,左右图像的极线平行且水平对齐。这样一来,视差匹配可以直接在水平方向上进行,这带来了以下好处:

  • 提高视差计算的准确性:由于极线对齐,视差直接反映物体深度的信息,减少了因角度偏差带来的误差。
  • 降低计算复杂度:无需在垂直方向上搜索匹配点,从而简化了视差匹配的计算过程。

最终,通过图像校正,双目相机的视差匹配过程变得更加简单有效,为深度估计提供了精确的基础。这一过程在自动驾驶、三维重建和机器人视觉系统中尤为重要,因为它显著提升了双目视觉系统的鲁棒性和计算效率。


三、总结

立体视觉中的视差与深度成反比关系。通过双目相机拍摄的图像,我们可以利用视差来推算物体的深度。而图像校正操作则确保了左右图像的极线平行,使得视差计算更为简单和高效。这一过程在自动驾驶、3D 建模等领域中有着广泛的应用。


http://www.ppmy.cn/embedded/136645.html

相关文章

Notepad++ 最新官网中文版在线下载 附文本编辑器安装与基础使用教程

Notepad (记事本)是一个简单的文本编辑器,预装在所有版本的 Microsoft Windows 操作系统中。它的主要功能是创建、编辑和存储纯文本文件,通常以 .txt 格式保存。Notepad 的设计旨在提供一个轻量级的文本处理工具,适合快…

Spring Boot 与 Vue 共筑高校网上订餐卓越平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【AI日记】24.11.09 我对贫困问题的一些思考

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容:Building Multimodal Search and RAG目标:了解多模态 RAG时间:3小时评估:不错,继续 读书 读书1 有些词语用英语表达是不得已而为之 豆瓣…

Jest项目实战(2): 项目开发与测试

1. 项目初始化 首先,我们需要为开源库取一个名字,并确保该名字在 npm 上没有被占用。假设我们选择的名字是 jstoolpack,并且已经确认该名字在 npm 上不存在。 mkdir jstoolpack cd jstoolpack npm init -y2. 安装依赖 接下来,我…

深度学习:1-of-N 编码详解

1-of-N 编码详解 1-of-N 编码,也称为独热编码(One-Hot Encoding),是一种常用于处理分类变量的编码技术。在此编码方案中,每个类别被表示为一个长度等于类别数目的二进制向量,其中一个元素设为1&#xff0c…

CI/CD 实践总结

本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践。历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发效率,降低了研发成本,保证了交付质量…

[Redis] Redis主从复制模式

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

[NewStar 2024] week5完结

每次都需要用手机验证码登录&#xff0c;题作的差不多就没再进过。今天把week5解出的部分记录下。好像时间过去很久了。 Crypto 没e也能完 这题给了e,p,q,dp,dq。真不清楚还缺啥 long_to_bytes(pow(c,dp,p)) 格格你好棒 给了a,b和提示((p2*r) * 3*a q) % b < 70 其中r…