机器视觉基础—双目相机

news2024/11/5 5:39:12

机器视觉基础—双目相机与立体视觉

双目相机概念与测量原理

我们多视几何的基础就在于是需要不同的相机拍摄的同一个物体的视场是由重合的区域的。通过下面的这种几何模型的目的是要得到估计物体的长度,或者说是离这个相机的距离。(深度信息)

在这里插入图片描述

双目相机是模拟人观看世界的方式,来对深度的距离进行估算。
人之所以能够感受到立体视觉,是因为人的左右眼之间有6到7cm的间隔,左眼与右眼看到的影像会有细微的差别,所以我们很容易判断物体的远近以及多个物体的前后关系。

在这里插入图片描述

双目立体视觉的基本原理与人眼观察世界的方式类似,双目立体视觉获取图像是通过不同位置的两台摄像机或者一台摄像机经过平移或旋转拍摄同一幅场景,来获取立体图像对

我们可以将双目相机分成两种类型

  1. 被动双目相机(也是刚开始学习的双目相机模型

在这里插入图片描述

  • 我们的被动双目相机是由两个RGB的镜头组成的。
  1. 主动双目相机(也称为双目结构光相机
    在这里插入图片描述
    主动相机的构成主要是有两个IR摄像头和一个结构光发射器来构成的。

我们通过主动相机估计出来的深度图结构也更加的完整,在拍摄的时候。主动相机的成像是由散斑点的

对于我们人的双目系统来说,人的左眼和右眼分别可以看见两幅有视差的图像。进而在大脑中可以形成有景深的立体图像。

在这里插入图片描述

双目立体视觉的测量原理实际上是和人眼类似的。
在这里插入图片描述对于单个相机来说如果已知图像中的一个像点。我们通过该像点与相机中心发出一条射线。那么如何才能确定发光的物体点P的位置是P1 P2还是其他的呢?

也就是单个相机是无法获得上面的那个目标的深度信息的。为了获得深度我们可以使用两个相机的两条射线来获得深度的信息。更准确的说是获得了唯一一个三维目标点的坐标信息

在这里插入图片描述

这也就是双目相机的一个测量原理,我们称之为双目交汇

公式推导

  1. 假设我们拥有一个理想的双目系统——它们是拥有相同的焦距f的
  2. 两个光学中心Ol和Or之间的距离为B。
  3. 光轴平行成像平面属于同一个平面。

这里的两个光心之间的距离我们可以称之为基线长度。

满足这几个条件的双目相机模型我们称为理想的双目系统

在这里插入图片描述

  • 空间坐标中的一个P点在左右成像平面上形成了两个像点(也就是与成像平面相交的两个点。)分别为XL 和 XR。我们将Xl - Xr = D 称之为视差。
    在这里插入图片描述
  • 根据这个模型的相似关系我们可以在数学上对其进行建模的处理。
  1. 我们和之前一样将两个光心之间的距离定义为B,同时我们将深度值定义为Z

  2. 根据三角关系有:

B Z = B − { X L − x R } Z − f Z = f B { x L − x R } Z = f B D \begin{aligned} \frac{B}{Z} & =\frac{B-\left\{X_{L}-x_{R}\right\}}{Z-f} \\ Z & =\frac{f B}{\left\{x_{L}-x_{R}\right\}} \\ Z & =\frac{f B}{D} \end{aligned} ZBZZ=ZfB{XLxR}={xLxR}fB=DfB

根据这个关系,我们可以看出在双目的系统中我只要知道了视差值D就可以根据之前的关系。得出需要估计的深度值信息了。

由此也是引出了双目立体视觉中的一个核心的问题。双目视觉中的立体匹配问题

其任务就是寻找左右图像当中的两个对应点,并建立对应的关系。从而方面的计算出视差D

在这里插入图片描述

就需要之前学过的一些特征点匹配的算法了就比如之前的SIFT算法等。但是对于之一些光照和颜色相近的一些点,例如匹配一张图像上的白墙上的两个点。也是十分的困难。

根据这个问题也就有了主动双目相机了。也就是使用了双IR相机加结构光。在单色的图像上也打出一些激光点也就能保证正常的立体图像匹配

在这里插入图片描述

双目深度估计中存在的问题是:

  1. 双目测距要求轴平行,测距精度严重依赖于平行程度。
  2. 为了计算视差d,需要匹配世界中同一点P1在左右两幅图像中的像素点p1和p1’即双目立体匹配。在复杂光照和复杂场景下,如何准确双目立体匹配本身就是很难的问题。
  3. 对于世界中越远的点P2,其在左右视图中的视差d2越小,测距结果越容易受到双目立体匹配误差影响(即双目测距精度与被测物体距离成反相关)

对极几何的概念

在这里插入图片描述

要寻找两幅图像之间的对应关系,最直接的方法就是逐点匹配,如果加以一定的约束条件(对极约束),搜索的范围可以大大减小。从2D平面搜索转为1D直线搜索,搜索速度也会提高。

对于下面的一副图来说我们的c和c’表示的是相机的光心。x是测量的三维空间中的一个点。两个白色的为两个成像平面。

在这里插入图片描述

  1. 这个灰色的平面束和我们的成像平面之间是有交线的。这个交线就是对极线
  • 对极平面(epipolarplane):任何包含基线的平面(图中的灰色面

  • 对极点(epipole):摄像机的基线与每幅图像的交点;

  • 对极线(epipolar1ine):对极平面与图像平面的交线

  1. 我们需要将x和x’进行立体的匹配。提出问题就是如何快速的找到这两个点呢?

  2. 对极约束(Epipolar Constraint) 也就是给它一个约束从2d搜寻转为在1d的线上的一个搜索过程。

这个模型有个有趣的性质。当三维点p沿着px0方向接近左相机时,我们发现其在左相机上的投影点并不会移动,但是其在右相机相平面上的投影点x1发生了变化,其移动轨迹一定是沿着极线1。

在这里插入图片描述

深度相机

上面我们学过的双目相机可以看作是一种深度相机,在继续进行学习之前。对深度相机的知识进行一些扩展

在这里插入图片描述
它在2d相机的基础上增加了对深度值得测量,每个像素经过一定的计算处理类似上面提到的双目的这种。可以得到对应的深度值。

所有像素测量得到的像素深度值的集合,就构成了一幅深度图。,深度图是一张灰度图。是一张用二维坐标表示三维的一副图。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Java使用apache.commons.io框架下的FileUtils类实现文件的写入、读取、复制、删除

Apache Commons IO 是 Apache 开源基金组织提供的一组有关IO(Input/Output)操作的小框架,它是 Apache Commons 项目的一部分,专注于提供简单易用的 API,用于处理输入和输出操作。Apache Commons IO 是一个功能强大的 J…

【论文解读】EdgeYOLO:一种边缘实时目标检测器(附论文地址)

论文地址:https://arxiv.org/pdf/2302.07483 这篇文章的标题是《EdgeYOLO: An Edge-Real-Time Object Detector》,由中国北京理工大学的Shihan Liu、Junlin Zha、Jian Sun、Zhuo Li和Gang Wang共同撰写。这篇论文提出了一个基于最新YOLO框架的高效、低复…

Redis 位图实现签到之长时间未签到预警

#目前通行系统项目中有一个新需求【通过对通行记录数据定时分析,查询出长时间没 有刷卡/刷脸通行的学生】 #一看到通行签到相关,就想到了redis的位图,理由也有很多帖子说明了,最大优点占用空间小。 一.redis命令行 SETBIT&#…

【Git】从 GitHub 仓库中移除误提交的 IntelliJ IDEA 配置文件夹 .idea 并将其添加到 .gitignore 文件中

问题描述 在使用Git进行版本控制时,不慎将.idea文件夹提交至GitHub仓库,即使后续在.gitignore文件中添加了.idea,但该文件夹仍在仓库中存在。 原因分析 .idea 是 IntelliJ IDEA 开发工具为项目创建的一个配置文件夹。IntelliJ IDEA 是一个广…

[Linux] 进程地址空间

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 好了,折腾…

Vue3 + Element Plus简单使用案例及【eslint】报错处理

本电脑Vue环境已安装正常使用 博主使用npm 包管理器安装 Element Plus.有问题评论区帮忙指正,感谢阅读. 在完成的过程中如果遇到eslint报错 Parsing error :Unexpected token { eslint 这个报错,也可以尝试第7部分报错处理解决。 目录 1.新建项目 2…

【云原生】Docker搭建开源翻译组件Deepl使用详解

目录 一、前言 二、微服务项目使用翻译组件的场景 2.1 多语言用户界面 2.2 业务逻辑中的翻译需求 2.3 满足实时通信的要求 2.4 内容管理系统 2.5 个性化推荐系统 2.6 日志和监控 三、开源类翻译组件解决方案 3.1 国内翻译组件方案汇总 3.1.1 百度翻译 3.1.2 腾讯翻…

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求:检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有:“滚蛋”,“滚蛋吧你”,“有病”, 可使用的方法有: 遍历敏感词,判断文本中是否含有这个敏感词。 …

如何在Linux系统中使用Netcat进行网络调试

文章目录 Netcat简介安装Netcat在Debian/Ubuntu系统中安装在CentOS/RHEL系统中安装 Netcat基本命令Netcat基本用法示例1:监听端口示例2:连接到远程主机 Netcat选项-l选项-p选项-v选项 Netcat模式监听模式连接模式 Netcat排除和包含排除端口包含端口 Netc…

【ClickHouse 探秘】你知道 ClickHouse MergeTree 引擎吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

推荐一款高效的内存清理工具:MemoryCleaner

MemoryCleaner是一款高效的内存清理工具,旨在优化您的计算机性能。它利用Windows内置的多种功能,能够在不影响系统运行的情况下,自动释放内存。用户可以通过系统托盘直接访问MemoryCleaner的功能,无需打开程序,使得内存…

MySQL分区表(二)

说明:之前有写过一篇博客,介绍MySQL如何建立分区表,本文介绍如何建立子分区表。子分区,就是在原来分区的基础上,再嵌套一个分区。 例如,按照记录的创建时间分区,在此基础上,再按照租…

ssm043基于JavaEE的龙腾公司员工信息管理系统的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:龙腾公司员工信息管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本龙腾公司…

使用 PyCharm 构建 FastAPI 项目:零基础入门 Web API 开发

使用 PyCharm 构建 FastAPI 项目:零基础入门 Web API 开发 本文提供了一份完整的 FastAPI 入门指南,涵盖从环境搭建、依赖安装到创建并运行一个简单的 FastAPI 应用的各个步骤。通过 FastAPI 和 Uvicorn,开发者可以快速构建现代化的 Web API…

<项目代码>YOLOv8 夜间车辆识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

centos7.X zabbix监控参数以及邮件报警和钉钉报警

1:zabbix安装 1.1 zabbix 环境要求 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低) 操作系统: Linux centos7.2 x86_64 Python 2.7.x Mariadb Server ≥ 5.5.56 httpd-2.4.6-93.el7.centos.x86_64 PHP 5.4.161.2 zabbix安装版本 [rootnod…

类(4)

1.拷贝构造函数 我们在创建对象得的时候,可否创造一个与已存在对象一摸一样的对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰) 用在已存在的类类型对象创建新对象时…

‌【元素周期表】氢

化学式:H₂ 外观:无色透明 分子量:2.01588 吸入少量氢气对人体没有危害,甚至还可能对人体有益。但是不能吸入大量氢气,否则可能会对身体造成影响。 氢在生活中的主要用途包括以下几个方面‌: ‌医疗保健…

【06】A-Maven项目SVN设置忽略文件

做Web项目开发时,运用的是Maven管理工具对项目进行管理,在项目构建的过程中自动生成了很多不需要SVN进行管理的文件,SVN在对源码进行版本管理时,需要将其忽略,本文给出了具体解决方案。 SVN设置忽略Maven项目中自动生成…

【Windows】X-DOC:无需NAS使用Windows也能安装Jellyfin玩私人影音媒体平台

【Windows】X-DOC:无需NAS使用Windows也能安装Jellyfin玩私人影音媒体平台 1、前言2、Jellyfin服务搭建2.1 Jellyfin简介2.2 Jellyfin下载2.3 Jellyfin安装2.4 Jellyfin设置2.5 Jellyfin使用 3、终端访问3.1 浏览器访问 4、内网穿透 1、前言 下载收藏高清电影、电视…