立体视觉的核心技术:视差计算与图像校正详解
立体视觉的核心技术:视差计算与图像校正详解
在立体视觉中,通过双目相机(即左右两台相机)的不同视角捕获的图像,结合几何关系,我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差(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=xl−xr
视差的存在是因为左右相机拍摄同一物体的角度不同。视差越大,意味着物体越靠近相机;反之,视差越小,物体离相机越远。
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} ZX−B=fxr
通过消去 X X X,得到 Z Z Z 的公式如下:
-
由左相机的成像关系得出:
X = x l ⋅ Z f X = \frac{x_l \cdot Z}{f} X=fxl⋅Z -
将 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} Zfxl⋅Z−B=fxr -
整理得出:
x l ⋅ Z − B ⋅ f = x r ⋅ Z x_l \cdot Z - B \cdot f = x_r \cdot Z xl⋅Z−B⋅f=xr⋅Z -
将 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=fxl−xrB=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] [R∣t]
外参定义了相机的空间位置和方向,包括旋转矩阵 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=K⋅Rrect⋅K−1
其中:
- K K K 为内参矩阵;
- R rect R_{\text{rect}} Rrect 是通过外参计算得到的旋转矩阵,用于将原始图像坐标旋转到极线水平对齐的校正坐标系下;
- K − 1 K^{-1} K−1 是内参矩阵的逆矩阵,用于将校正结果映射回像素坐标系。
通过这种变换,校正后的图像点 p rect \mathbf{p}_{\text{rect}} prect 可以由原始图像点 p \mathbf{p} p 映射得到:
p rect = H ⋅ p \mathbf{p}_{\text{rect}} = H \cdot \mathbf{p} prect=H⋅p
3. 校正后的视差匹配
完成图像校正后,左右图像的极线平行且水平对齐。这样一来,视差匹配可以直接在水平方向上进行,这带来了以下好处:
- 提高视差计算的准确性:由于极线对齐,视差直接反映物体深度的信息,减少了因角度偏差带来的误差。
- 降低计算复杂度:无需在垂直方向上搜索匹配点,从而简化了视差匹配的计算过程。
最终,通过图像校正,双目相机的视差匹配过程变得更加简单有效,为深度估计提供了精确的基础。这一过程在自动驾驶、三维重建和机器人视觉系统中尤为重要,因为它显著提升了双目视觉系统的鲁棒性和计算效率。
三、总结
立体视觉中的视差与深度成反比关系。通过双目相机拍摄的图像,我们可以利用视差来推算物体的深度。而图像校正操作则确保了左右图像的极线平行,使得视差计算更为简单和高效。这一过程在自动驾驶、3D 建模等领域中有着广泛的应用。
相关文章:

立体视觉的核心技术:视差计算与图像校正详解
立体视觉的核心技术:视差计算与图像校正详解 在立体视觉中,通过双目相机(即左右两台相机)的不同视角捕获的图像,结合几何关系,我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差(di…...

PaddleNLP的FAQ问答机器人
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【DDRNet模型创新实现人像分割】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...
2024年12月中国多场国际学术会议,EI检索录用!
2024年12月,多场国际学术会议将在中国多地召开,涵盖AI、机器人、大数据、网络安全、传感制造、环境工程、物联网等领域,促进学术交流,录用论文将EI检索,诚邀国内外专家参会。 第三届人工智能、人机交互和机器人国际学…...

日语学习的难易程度
日语学习的难易程度是一个相对主观的问题,它受到多种因素的影响,包括个人的语言学习能力、学习方法、学习时间、学习资源的可获得性以及个人对日语文化的兴趣和投入程度等。以下是对日语学习难易程度的一些分析: 优点与易学之处 文字系统&am…...
java-web-web后端知识小结
spring框架三大核心: IOC--控制反转 DI---依赖注入 AOP--面向切面编程 web开发技术小结 1.过滤器,JWT令牌 2.三层架构 IOC, DI AOP, 全局异常处理, 事务管理 mybatis 3.数据操作与存储 mysql 阿里云OSS(云存储) 各个技术的归属: 1.过滤器, cookie,session--javaWeb 2.JWT, 阿里…...
常见的排序算法(二)
归并排序 归并排序(Merge Sort)是一种基于分治法(Divide and Conquer)的排序算法。它将一个大的问题分解成小的问题,然后递归地解决这些小问题,最后合并(merge)得到最终的排序结果。…...
spark的RDD分区的设定规则
目录 一、第一种:parallelize 获取rdd时 二、第二种:通过外部读取数据-textFile 三、上面提到了默认分区数,那么默认分区是怎么计算呢? 一、第一种:parallelize 获取rdd时 没有指定:spark.default.paral…...

【点云网络】voxelnet 和 pointpillar
VoxelNet 和 pointpillar 这两个网络可以认为后者是前者的升级版本,都是采用了空间划分的方法, 一个是体素,一个是pillar, 前者是3D卷积处理中间特征,后者是2D卷积处理中间特征。 voxelnet voxelnet 应该是比较早的onestage的网…...

HAL库硬件IIC驱动气压传感器BMP180
环境 1、keilMDK 5.38 2、STM32CUBEMX 初始配置 默认即可。 程序 1、头文件 #ifndef __BMP_180_H #define __BMP_180_H#include "main.h"typedef struct {float fTemp; /*温度,摄氏度*/float fPressure; /*压力,pa*/float fAltitude; /*…...

探索Python音频处理的奥秘:Pydub库的魔法
文章目录 探索Python音频处理的奥秘:Pydub库的魔法第一部分:背景介绍第二部分:Pydub是什么?第三部分:如何安装Pydub?第四部分:Pydub的简单函数使用方法1. 打开音频文件2. 播放音频3. 导出音频文…...

LeetCode 热题100(七)【链表】(2)
目录 7.6合并两个有序链表(简单) 7.7两数相加(中等) 7.8删除链表的倒数第N个节点(中等) 7.9两两交换链表中的节点(中等) 7.10k个一组翻转链表(困难) 7.6…...

计算机网络 TCP/IP体系 网络层
一. 网络层的基本概念 网络层主要负责将数据从源端主机发送到目的端主机。在这一过程中,网络层要解决的关键问题是数据包的路由选择,即确定数据包通过互联网的最佳路径。 1.1 网络层的信息类型 数据包:这是网络层传输的主要形式,…...

迈入国际舞台,AORO M8防爆手机获国际IECEx、欧盟ATEX防爆认证
近日,深圳市遨游通讯设备有限公司(以下简称“遨游通讯”)旗下5G防爆手机——AORO M8,通过了CSA集团的严格测试和评估,荣获国际IECEx及欧盟ATEX防爆认证证书。2024年11月5日,CSA集团和遨游通讯双方领导在遨游…...

实习作假:阿里健康实习做了RABC中台,还优化了短信发送流程
最近有二本同学说:“大拿老师,能帮忙看下简历吗?” 如果是从面试官的角度来看,这个同学的实习简历是很虚假的。 但是我们一直强调的是:校招的实习简历是不能出现明显的虚假。 首先,你去公司做事情&#…...

Unity中IK动画与布偶死亡动画切换的实现
在Unity游戏开发中,Inverse Kinematics(IK)是创建逼真角色动画的强大工具。同时,能够在适当的时候切换到布偶物理状态来实现死亡动画等效果,可以极大地增强游戏的视觉体验。本文将详细介绍如何在Unity中利用IK实现常规…...

java导出word文件(手绘)
文章目录 代码细节效果图参考资料 代码细节 使用的hutool的WordUtil,WordUtil对poi进行封装,但是这一块的官方封装的很少,很多细节都没有。代码中是常见的绘制段落,标题、表格等常用api Word07Writer writer WordUtil.getWriter(…...

ssm070基于SSM框架的校园代购服务订单管理系统的设计与实现+vue(论文+源码)_kaic
毕业设计 题 目: 校园代购服务订单管理系统 作 者: 学 号: 所属学院: 专业年级: 学校导师: 职 称: 班级导师: 职 称: 完成时间…...

Java项目实战II基于Spring Boot的秒杀系统设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在互联网电商蓬勃发展的今天࿰…...
FastAPI —— 请求参数验证
1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…...

第七篇: BigQuery中的复杂SQL查询
BigQuery中的复杂SQL查询 背景与目标 在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOIN、UNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...