立体视觉几何(一)

news2024/11/26 10:51:16

1.什么是立体视觉几何

在这里插入图片描述

立体视觉=对应+重建:
• 对应:给定一幅图像中的点pl,找到另一幅图像中的对应点pr。
• 重建:给定对应关系(pl, pr),计算空间中相应点的3D 坐标P。

立体视觉:从图像中的投影恢复场景中点的三维位置的过程

类型:基于窗口/局部的算法和全局算法

三角测量:给定pl,我们知道点P位于连接pl和左光心Cl的直线Ll上。**假设我们确切地知道相机的参数,我们可以显式计算 Ll 和 Lr 的参数。**因此,我们可以计算两条直线的交点,即点 P

本地立体算法步骤

◇ 匹配代价计算:SSD、SAD、MSE、MAD
◇ 代价聚合
◇ 视差计算和优化
◇ 视差细化

指用于从一对立体图像(或称为双目图像)中计算深度信息的一系列步骤。在计算机视觉领域,这些算法通过比较同一场景的两个稍有不同视角的图像来估计物体的距离。

  1. 匹配成本计算:这是立体匹配的第一步。目标是确定立体图像对中的两个像素有多匹配。常见的匹配成本计算方法包括:

    • SSD(平方差之和):测量对应图像区块中像素强度的平方差。
    • SAD(绝对差之和):类似于SSD,但使用绝对差值。
    • MSE(均方误差):区域内平方差的平均值。
    • MAD(平均绝对差):区域内绝对差的平均值。

    这些方法用于计算每个像素可能视差的成本。成本越低,表示匹配越好。

  2. 成本聚合:在计算了初步匹配成本之后,通常会在邻域内聚合这些成本,以提高对噪声和无纹理区域的鲁棒性。聚合步骤有助于引入上下文信息,减少初步匹配中不正确匹配的影响。

  3. 视差计算和优化:这一步涉及为每个像素选择最小化聚合成本的视差值(即在两幅图像中匹配像素之间的水平位移)。可以应用优化方法,如动态规划、图割或半全局匹配,以找到整个图像中最一致的视差值。

  4. 视差细化:从前一步获得的初步视差图可能存在不准确之处,特别是在物体边界或遮挡区域附近。因此,会采用中值滤波、左右一致性检查(用于识别和纠正遮挡或匹配错误)和亚像素增强等细化步骤,来提高视差图的质量。

通过遵循这些步骤,本地立体声算法可以生成代表场景深度信息的视差图。这个图在3D重建、自主导航和虚拟现实等多种应用中非常关键。

寻找对应

稀疏和密集对应
在这里插入图片描述

解决对应问题(correspondence problem)是立体视觉中的一个核心问题,特别是在处理双目(或多目)立体图像时。在这个上下文中,对应问题指的是确定一幅图像中的像素点在另一幅图像中的匹配点。理解这一问题的关键在于了解“极线约束”(epipolar constraints)。

  1. 二维搜索域的问题: 如果没有任何约束,为了在一幅图像中找到另一幅图像的每个像素点的对应点,理论上需要在整个图像平面上进行搜索。这称为二维搜索域,它导致计算量非常大,且容易产生错误匹配。

  2. 极线约束(Epipolar Constraints): 幸运的是,在立体视觉中,我们可以利用极线约束来显著减少搜索的复杂度,缩小特征点匹配时的搜索范围。极线约束基于这样一个事实:对于第一幅图像中的任何一个点,其在第二幅图像中的对应点必定位于一条特定的线上,这条线称为极线。

    • 极线是由摄像机的几何配置决定的。具体来说,给定第一个摄像机拍摄的一个点,第二个摄像机拍摄的对应点必须位于连接这个点和两个摄像机中心的线与第二个摄像机成像平面的交线上。
    • 这意味着,对于第一幅图像中的任何点,我们不需要在第二幅图像的整个平面上搜索其对应点,而只需要在一条线上进行搜索。
  3. 如何应用极线约束:

    • 在实际应用中,首先要确定两个摄像机之间的几何关系,包括它们的位置和方向。这通常通过称为**的过程完成。
    • 一旦摄像机被标定,就可以计算出极线,并将搜索对应点的问题从一个二维问题简化为一个一维问题。
    • 这样,匹配过程变得更加高效,并且匹配错误的可能性也大大减少。

总之,极线约束是解决立体视觉中对应问题的关键,它通过将复杂的二维搜索问题简化为一维搜索,使得深度估计变得更加可行和精确。

图像校正

图像校正(Rectification)是立体视觉系统中的一项重要技术,它在搜索图像对应点之前通常会被执行,以简化搜索过程。让我们分析一下校正的动机、实现方法和一种简单的解决方案:

动机

  • 简化对应点搜索: 在没有校正的情况下,对应点可能位于图像的任何位置,这导致在二维空间中进行搜索。图像校正的主要目的是将这种二维搜索简化为一维搜索,使问题更易于处理。
  • 将极线对齐到水平扫描线: 校正后的图像具有这样一个属性,即任一点在另一图像中的对应点位于同一水平扫描线上。这大大降低了匹配算法的复杂度。

实现

  • 输入图像校正: 校正过程涉及对输入图像进行变换,以使得对应的水平扫描线成为极线。这意味着,如果在一个图像中找到了一个特征点,那么在另一个图像中的对应点将位于相同的水平位置。
  • 独立匹配水平扫描线: 校正后,每一对水平扫描线可以独立匹配,计算匹配分数。这极大简化了算法的复杂度,因为算法只需要在一维空间内(即同一扫描线内)搜索对应点。

简单解决方案:旋转摄像机

  • 摄像机旋转: 一种实现图像校正的简单方法是物理地或通过软件旋转两台摄像机,使它们垂直于连接摄像机中心的线(c0 和 c1)。这样做的结果是,摄像机拍摄的图像中的极线会自然地与水平扫描线对齐。
  • 对齐效果: 通过这种方式,极线被对齐到水平方向,从而使得在双目立体视觉系统中匹配对应点变得更加简单和直接。

总结

图像校正在立体视觉中扮演着关键角色,它通过简化对应点的搜索过程来提高了系统的效率和匹配的准确性。通过物理或软件方法校正摄像机,可以使得极线对齐到水平扫描线,从而将原本的二维搜索问题转化为一维搜索问题。这不仅简化了计算过程,还提高了匹配的精度和系统的整体性能。

  1. 同态变换(Homography)的概念:

    • 在计算机视觉中,同态变换是一种变换,它可以将一个平面内的点映射到另一个平面内的点。
    • 在双目立体视觉系统中,这种变换可以用来调整两个摄像头拍摄的图像,使得它们在一个共同的平面(P)上对齐。
  2. 映射到共同平面 P:

    • 假设有一个平面 P 在空间中,以及两个同态变换 Hl 和 Hr 分别对应于左图像和右图像。
    • 这两个变换的作用是将两个图像映射到平面 P 上,同时保证平面 P 平行于连接两个摄像头中心点(Cl 和 Cr)的线。
    • 通过这样的映射,两个图像在新的平面 P 上具有相同的视角和几何关系。
  3. 极线的平行性:

    • 当两个图像映射到这样的平面 P 上时,极线(即那些在一个图像中的点可能在另一个图像中找到匹配点的线)会变得平行。
    • 这是因为平面 P 被设定为平行于 Cl 和 Cr 连线,所以在校正后的图像中,所有极线都是平行的。
  4. 极线与图像行的平行性:

    • 通过适当选择坐标系,可以确保这些平行的极线与图像的行平行。
    • 这意味着,在校正后的图像中,任何一个点的可能匹配点都将位于另一图像的同一行上。

这个过程的关键是通过同态变换将两个图像映射到一个共同的平面上,并调整它们的视角使得极线平行于该平面。通过这种方式,极线也就与图像的行平行,从而将匹配点的搜索简化为在水平行上的一维搜索,大大简化了计算过程,并提高了效率和准确性。这种方法在双目立体视觉系统中广泛应用,特别是在需要高精度和高效率的应用场景中。
在这里插入图片描述
则校正算法为:
• 选择与 CrCl 平行的平面 P
• 定义 P 上的左右图像坐标系
• 根据 P 和虚拟图像的坐标系构造校正矩阵 Hl 和 Hr。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2 点击按钮下载文件保存到本地(后台返回的zip压缩流)

// import ./mock/index.js; // 该项目所有请求使用mockjs模拟 去掉mock页面url下载 console.log(res, res)//token 是使页面不用去登录了if (res.file) {window.location.href Vue.prototype.$config.VUE_APP_BASE_IDSWAPI Vue.prototype.$config.VUE_APP_IDSW /service/mode…

【征服Redis12】redis的主从复制问题

从现在开始,我们来讨论redis集群的问题,在前面我们介绍了RDB和AOF两种同步机制,那你是否考虑过这两个机制有什么用呢?其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统,广泛应用于Web应用…

如何本地部署虚VideoReTalking

环境: Win10专业版 VideoReTalking 问题描述: 如何本地部署虚VideoReTalking 解决方案: VideoReTalking是一个强大的开源AI对嘴型工具,它是我目前使用过的AI对嘴型工具中效果最好的一个!它是由西安电子科技大学、…

71.工作中redis的常用场景总结

文章目录 一、简介二、统计访问次数三、缓存四、分布式锁五、限流六、排行榜七、作为Session的存储器,存用户登录状态八、位统计九、生成全局ID 一、简介 Redis作为一种优秀的基于key/value的缓存,有非常不错的性能和稳定性,无论是在工作中&…

Python武器库开发-武器库篇之Fofa-API使用(四十六)

Python武器库开发-武器库篇之Fofa-API使用(四十六) FOFA(FOcus Observation of Futures Assets)是一款专业的网络资产搜索引擎,旨在帮助企业发现和评估网络上的潜在安全风险。FOFA的基本原理是通过搜索引擎的方式,按照关键词对互…

BaiJiaCms 漏洞挖掘

今天来和大家讲一下baijiacms的漏洞挖掘,小编一般都是黑盒测试,没有对其代码审计,(等小编把常见的漏洞都了解一下在进行代码审计) 1.存储型XSS 首先需要进入管理员账号 找到一个“调用第三方统计代码”的方框&#xf…

面向对象之深度优先和广度优先

面向对象深度优先和广度优先是什么? 二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 深度优先 先序遍历(父, 左子, 右子) 0, 1, 3, 7, 8, 4, 9, 2, 5, 6 中序遍历(左子, 父, 右子) 7, 3, 8, 1, 9, 4, 0, 5, 2, 6 后序遍历(左子…

Java编程练习之this关键字(2)

this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。 示例:创建一个类文件,在类中定义Book类型的方法,并通过this关键字进行返回。 public class Book{ public Book getBook(){ return this; } } 在getB…

天龙八部资源提取工具(提取+添加+修改+查看+教程)

可以提取,添加,修改,查看天龙八部里面的数据。非常好用。 天龙八部资源提取工具(提取添加修改查看教程) 下载地址: 链接:https://pan.baidu.com/s/1XOMJ1xvsbD-UUQOv3QfHPQ?pwd0kd0 提取码&…

书生·浦语大模型实战营-学习笔记4

XTuner 大模型单卡低成本微调实战 Finetune简介 常见的两种微调策略:增量预训练、指令跟随 指令跟随微调 数据是一问一答的形式 对话模板构建 每个开源模型使用的对话模板都不相同 指令微调原理: 由于只有答案部分是我们期望模型来进行回答的内容…

Pytest 测试框架与Allure 测试报告——Allure2测试报告-L3

目录: allure2报告中添加附件-图片 Allure2报告中添加附件Allure2报告中添加附件(图片)应用场景Allure2报告中添加附件(图片)-Python代码示例:allure2报告中添加附件-日志 Allure2报告中添加附件&#xff…

C语言基础02-浮点

#include <stdio.h> int main() { printf("float 存储最大字节数 : %d \n", sizeof(float)); printf("double 存储最大字节数 : %d \n", sizeof(double)); printf("long double 存储最大字节数 : %d \n", sizeof(long double)); // %f代表…

相关系数(皮尔逊相关系数和斯皮尔曼相关系数)

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;5.1 对数据进行描述性统计以及皮尔逊相关系数的计算方法_哔哩哔哩_bilibili 注&#xff1a;直接先看 &#xff08; 三、两个相关系数系数的比较 &#xff09; 部分&#x…

集美大学“第15届蓝桥杯大赛(软件类)“校内选拔赛 D矩阵选数

经典的状态压缩DP int dp[15][(1<<14)10]; int a[15][15]; void solve() {//dp[i][st]考虑到了第i行 并且当前考虑完第i行以后的选择状态是st的所有方案中的最大值for(int i1;i<13;i)for(int j1;j<13;j)cin>>a[i][j];for(int i1;i<13;i){for(int j0;j<…

Tensorflow 入门基础——向LLM靠近一小步

进入tensflow的系统学习&#xff0c;向LLM靠拢。 目录 1. tensflow的数据类型1.1 数值类型1.2 字符串类型1.3 布尔类型的数据 2. 数值精度3. 类型转换3.1 待优化的张量 4 创建张量4.1 从数组、列表对象创建4.2 创建全0或者1张量4.3 创建自定义数值张量 5. 创建已知分布的张量&…

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页&#xff0c;找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…

react中数据不可变

先看官网 一、不可变数据的概念 不可变数据意味着数据一旦创建&#xff0c;就不能被更改。在React中&#xff0c;每次对数据的修改都会返回一个新的数据副本&#xff0c;而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中&#xf…

04 思维导图的方式回顾ospf

思维导图的方式回顾OSPF 1 ospf 领行学习思维导图 1.1 ospf 的工作过程 建立领据表同步数据库计算路由表1.2 ospf 的状态 1.3 ospf的报文 1.4 ospf的L

maven 基本知识/1.17

maven ●maven是一个基于项目对象模型(pom)的项目管理工具&#xff0c;帮助管理人员自动化构建、测试和部署项目 ●pom是一个xml文件&#xff0c;包含项目的元数据&#xff0c;如项目的坐标&#xff08;GroupId,artifactId,version )、项目的依赖关系、构建过程 ●生命周期&…

若依微服务框架,富文本加入图片保存时出现JSON parse error: Unexpected character (‘/‘ (code 47)):...

若依微服务框架&#xff0c;富文本加入图片保存时出现JSON parse error: Unexpected character 一、问题二、解决1.修改网关配置2、对数据进行加密解密2.1安装插件2.2vue页面加密使用2.3后台解密存储 一、问题 若依微服务项目在使用富文本框的时候&#xff0c;富文本加入图片进…