当前位置: 首页 > ds >正文

三维重建 —— 5. 双目立体视觉

文章目录

  • 1. 平行视图的基础矩阵
  • 2. 图像校正
  • 3. 对应点搜索
    • 3.1. 相关匹配法
    • 3.2. 相关匹配法存在的问题

课程视频链接: 计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)——5. 双目立体视觉。

1. 平行视图的基础矩阵

极点 e ′ e' e 是相机光心 O 1 O_1 O1(在相机 O 1 O_1 O1 坐标系下的齐次坐标为 ( 0 0 0 1 ) \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix} 0001 )在相机 O 2 O_2 O2 对应图像平面上的投影点,即有:
e ′ = K ′ [ T x ] [ R T ] ( 0 0 0 1 ) = K T (1) e' = \mathbf{K}' [T_x] [\mathbf{R} \quad T] \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix} = \mathbf{K} T \tag{1} e=K[Tx][RT] 0001 =KT(1)注意到,旋转矩阵 R \mathbf{R} R 被消去了。
在这里插入图片描述
在实际应用中,通常会选取两个规格一样的相机,即有 K = K ′ \mathbf{K} = \mathbf{K}' K=K,并且相机之间只存在平移变换,即 R = I \mathbf{R} = \mathbf{I} R=I,我们不妨设平移向量为 T = ( t x 0 0 ) T = \begin{pmatrix} t_x \\ 0 \\ 0 \end{pmatrix} T= tx00 。根据方程 ( 1 ) (1) (1) e ′ = K T = ( α − α cot ⁡ θ u 0 0 β sin ⁡ θ v 0 0 0 1 ) ( t x 0 0 ) = ( α t x 0 0 ) e' = \mathbf{K} T = \begin{pmatrix} \alpha & -\alpha \cot \theta & u_0 \\ 0 & \dfrac{\beta}{\sin \theta} & v_0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} t_x \\ 0 \\ 0 \end{pmatrix} = \begin{pmatrix} \alpha t_x \\ 0 \\ 0 \end{pmatrix} e=KT= α00αcotθsinθβ0u0v01 tx00 = αtx00 ,不妨取 e ′ = ( 1 0 0 ) e' = \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix} e= 100 ,则有:
F = [ e ′ × ] K ′ R K − 1 = [ e ′ × ] = [ 0 0 0 0 0 − 1 0 1 0 ] \mathbf{F} = [e^{\prime} \times] \mathbf{K}^{\prime} \mathbf{R} \mathbf{K}^{-1} = [e^{\prime} \times] = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix} F=[e×]KRK1=[e×]= 000001010 由博客 三维重建 —— 4. 三维重建基础与极几何 可知, p ′ p' p 对应的极线是 l = F T p ′ l = \mathbf{F}^T p' l=FTp。假设 p ′ p' p 在相机 O 2 O_2 O2 坐标系的空间坐标为 ( p u ′ p v ′ 1 ) \begin{pmatrix} p_{u}' \\ p_{v}' \\ 1 \end{pmatrix} pupv1 ,则有:
l = F T p ′ = [ 0 0 0 0 0 1 0 − 1 0 ] [ p u ′ p v ′ 1 ] = [ 0 1 − p v ′ ] l = \mathbf{F}^{T} p' = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & -1 & 0 \end{bmatrix} \begin{bmatrix} p_{u}' \\ p_{v}' \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \\ -p_{v}' \end{bmatrix} l=FTp= 000001010 pupv1 = 01pv 则极线 l l l 的方程为:
l T ( u v 1 ) = ( 0 , 1 , − p v ′ ) ( u v 1 ) = v − p v ′ = 0 l^T \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \begin{pmatrix} 0, 1, -p_v' \end{pmatrix} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = v - p_v' = 0 lT uv1 =(0,1,pv) uv1 =vpv=0可以看出,极线 l l l 平行于 u u u 轴,并且 p p p p ′ p' p v v v 坐标一样。
现在我们来推导双目立体视觉的经典公式:
d = B f z (2) d = \dfrac{Bf}{z} \tag{2} d=zBf(2)其中:

  • d d d 为视差
  • B B B 为基线,表示相机光心 O 1 O_1 O1 O 2 O_2 O2 的距离
  • z z z 为点 P P P 的深度值

推导方法如下:
在这里插入图片描述
从公式 ( 2 ) (2) (2) 可以看出:视差 d d d 与深度 z z z 成反比。
根据视差与深度的关系,已知基线和焦距的话,我们可以计算出视差图,如下图所示:
在这里插入图片描述

2. 图像校正

如果两个相机不满足前面提到的关系,我们可以通过图像校正的方法将两个图像平面满足双目立体视觉的要求,如下图所示:
在这里插入图片描述
图像校正的具体步骤如下图所示:
在这里插入图片描述
详细的证明参考书籍:Richard Hartley, AndrewZisserman,《Multiple ViewGeometryin Computer Vision》。
图像校正效果示例如下:
在这里插入图片描述

3. 对应点搜索

3.1. 相关匹配法

给定三维空间点,如何在左右图像中找到相应的观测值,被称为双目融合问题。假设我们已知 u v uv uv 平面上点 p p p 的坐标,根据极几何,我们只需要在极线上搜索即可,如下图所示:
在这里插入图片描述
下面介绍使用相关匹配来获取对应点的方法,如下图所示:
在这里插入图片描述
​​相关匹配法的核心思想是:​​ 若两个像素点为真实物理点的对应像点(对应点),则其各自​​固定窗口(邻域)内的局部特征应具有较高的相似度。​
如果两个相机拍摄的图像的亮度和曝光不一致,那么相关匹配法很有可能失效,如下图所示:
在这里插入图片描述
为此引入归一化相关匹配法,即对窗口内的特征向量进行归一化处理,如下图所示:
在这里插入图片描述
归一化相关匹配法示例如下图所示:
在这里插入图片描述
窗口大小选择对相关匹配法效果的影响如下图所示:
在这里插入图片描述

3.2. 相关匹配法存在的问题

相关匹配法主要存在两方面的问题:

  • 透视缩短:如图所示,同一物体区域在不同视角下成像大小不同。对于固定尺寸的匹配窗口,其在两幅图像上所覆盖的区域将存在差异,导致提取的特征区域不对应,从而引发误匹配
  • 遮挡:物体间的相互遮挡会导致在两幅图像中可见的目标区域不一致,同样使得特征提取区域匹配失败
    在这里插入图片描述
    如下图所示,​​长基线可提升深度感知精度(尤其对远距离目标)​​,而​​短基线则能缓解透视畸变与遮挡对相关匹配法的干扰,但会显著降低深度估计的准确性​​。
    在这里插入图片描述
    长基线扩大视差范围,提升远距离目标深度精度,但需更高分辨率摄像头捕捉细微视差。而短基线减少视角差异,缓解遮挡和透视畸变的影响,但视差计算灵敏度下降,导致深度误差增大。基线设计需平衡深度精度与环境适应性(如遮挡/透视),实际应用中需根据场景需求选择。
    除了透视缩短和遮挡问题外,还存在下图中的两个问题:
    在这里插入图片描述
    对应点的问题总结如下:
    在这里插入图片描述
    通过引入更多的约束解决对应点问题,如下图所示:
    在这里插入图片描述
http://www.xdnf.cn/news/14434.html

相关文章:

  • CNN中的感受野
  • linux 常用工具的静态编译之一
  • Python打卡训练营-Day31-文件的规范拆分和写法
  • Vue2 与 Vue3 中环境变量配置的差异详解。
  • 电力系统时间同步检测技术
  • (下)通用智能体与机器人Transformer:Gato和RT-1技术解析及与LLM Transformer的异同
  • 【Golang面试题】什么是 sync.Once
  • 安全生产台账系统
  • 【无标题】二维势能塌陷的拓扑色动力学:数学物理框架与引力本质探索
  • 华为OD机试_2025 B卷_数组排列求和(Python,100分)(附详细解题思路)
  • vim编辑常用命令
  • JAVA理论第十七章-RocketMQKafaka
  • 【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作
  • 基于可靠消息确保分布式事务的最终一致性:以电商系统中订单服务的新建订单为例
  • C# 使用 TreeView 实践 WinRiver II 的测量管理功能
  • 篇章六 论坛系统——业务开发——实现业务功能
  • Java 与 MySQL 性能优化:Linux服务器上MySQL性能指标解读与监控方法
  • 修改Typora快捷键
  • 新的激活函数B-SiLU和NeLU:ReLU函数的复兴
  • 6.14项目一话术
  • 四六级英语作文模版
  • LeetCode 第72题:编辑距离(巧妙的动态规划方法)
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——C
  • uni-app项目实战笔记14--给全屏页面添加遮罩层
  • 深度学习中的激活函数:PyTorch中的ReLU及其应用
  • 人工智能学习14-Numpy-数组广播机制
  • AtCoder AT_abc410_e [ABC410E] Battles in a Row 题解
  • 如何识别并管理多项目环境下的潜在风险
  • 【Git】使用 SSH 协议 解决 Git 推送失败问题
  • 思科资料-思科交换机的常见配置(详细总结)