4、matlab双目相机标定实验

news2024/12/26 10:59:51

1、双目相机标定原理及流程

双目相机标定是将双目相机系统的内外参数计算出来,从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数(如焦距、主点、畸变等)和外部参数(如相机位置、朝向等),以便将双目相机捕获的图像转换为三维空间坐标。

双目相机标定的流程如下:

  1. 准备标定板:使用一个已知的平面标定板,其中包含一些已知的特征点,如网格点或棋盘格,用于计算相机的内部参数。

  2. 拍摄图像:在不同的位置和角度下,使用双目相机对标定板进行拍摄,同时确保标定板的特征点能够被双目相机同时看到。

  3. 提取特征点:在拍摄的图像中,使用特定的图像处理算法(如角点检测算法)提取出标定板上的特征点。

  4. 标定内部参数:通过对标定板上的特征点进行分析,计算出相机的内部参数(如焦距、主点、畸变等)。

  5. 标定外部参数:利用双目相机拍摄的多幅图像,通过特定的三维重建算法计算相机的外部参数(如相机位置、朝向等)。

  6. 优化参数:通过优化算法,对计算出的内外参数进行调整,以提高标定的精度和稳定性。

最终的标定结果包括每个摄像头的内部参数和外部参数,这些参数可以用于双目视觉中的立体匹配和三维重建。

2、实验准备

1)棋盘格

棋盘格简介:

棋盘格是一种特定设计的方格图案,通常由黑色和白色交替的正方形组成,这些正方形按照固定的规律排列。棋盘格通常用于机器视觉和计算机视觉中的图像标定和姿态估计。在图像处理中,棋盘格的特定结构和规则排列使其成为一种常用的标定工具。

在双目相机标定中,棋盘格用作标定板,摄像机拍摄棋盘格图案时能够从图像中获取到棋盘格上的特征点,这些特征点可以用于计算相机的内部参数(如焦距、主点、畸变等)和外部参数(如相机位置、朝向等)。

棋盘格简单、易识别,其规则的排列和特征点的明显性使其成为图像处理和计算机视觉中常用的标定工具。

棋盘格规格:20mm*20mm棋盘格,角点7*11

A4纸打印棋盘格(链接PDF文件)

a57b241721164c1cad030008ea1351a9.png

2)双目相机采集棋盘格图像

双目相机简介

双目相机是一种由两个摄像头组成的相机系统,它们通常被放置在一定的距离之间,模拟人类双眼的视觉系统。通过同时拍摄同一场景的两幅图像,双目相机可以实现立体成像,从而让计算机能够进行深度感知、立体视觉和三维重建。

双目相机的工作原理是利用每个摄像头捕捉到的图像之间的视差(即同一点在两个图像中的像素位置差异),根据视差信息计算目标物体的深度信息。在双目成像中,两个摄像头之间的距离(基线长度)越大,捕捉到的视差范围也会增大,从而可以获得更精确的深度信息。

双目相机在机器视觉、智能驾驶、机器人技术、医疗影像等领域有着广泛的应用。它可以提供更加准确的环境信息,帮助计算机进行空间感知、障碍物检测、跟踪和导航等任务。另外,双目相机也被广泛用于计算机视觉中的立体匹配、景深测量、虚拟现实和增强现实等领域。

双目相机采集图像展示:

左侧为彩色相机采集图像/右侧为红外相机采集图像

f7168abc69f44b539cce5f9fcc07a2d0.png

cec07eefc2cc4c169ab055718a092492.png

3、实验过程

实验简介

在MATLAB中进行双目相机标定通常会使用相机标定工具箱(Camera Calibration Toolbox),可以方便的进行内外参数的标定。下面是在MATLAB中使用相机标定工具箱进行双目相机标定的原理和流程:

  1. 安装标定工具箱:首先需要安装MATLAB相机标定工具箱,你可以从MathWorks官网下载安装。

  2. 数据采集:准备一组双目相机的图像数据,包括对准的标定板(如棋盘格)的多幅图像。确保拍摄时两个摄像头能够同时看到标定板。

  3. 特征点提取:使用相机标定工具箱中的函数,提取出标定板上的特征点。

  4. 标定内部参数:利用提取出的特征点数据,使用标定工具箱的函数计算出双目相机的内部参数,例如焦距、主点坐标、畸变系数等。

  5. 标定外部参数:通过提供的图像数据和已知的标定板参数,计算双目相机的外部参数,例如相机位置、朝向等。

  6. 结果优化:对计算出的内外参数进行优化,以提高标定的精度和稳定性。

  7. 输出结果:最后输出标定结果,内部参数和外部参数将被保存在MATLAB中供后续使用。

总之,使用MATLAB中的相机标定工具箱可以比较方便地进行双目相机的标定工作,得到双目相机的内部参数和外部参数,为后续的双目视觉应用提供基础支持。

1)APP

点击app

4a5d611d536b40aeacf63bddaa7b1970.png

点击下拉

b76f3dea8c6445608cbef62dde49dd43.png

点击双目相机标定模块

5265a4da36c44288a5998d0737b0c50e.png

2)数据导入

点击添加图片

1038191473d74ab8b8b064bce62fad35.png

棋盘格边长参数

26c4f5246c8f46718627424d6a72cf6b.png

左右相机视图导入文件夹

e6801f0822144acbb7abf7e2022c5acc.png

3)角点识别

角点识别过程

34f839790a25401090c02a576204ebaf.png

角点识别结果

5500bd3952ba4483aaffac3fe2ec671d.png

4)畸变参数设置

径向畸变和切向畸变参数设置

29290d8a5673483bb6ec18b78a487d8d.png

5)标定

点击标定按钮

b584664e91d54175b5b8fc793400ac6b.png

6)标定结果

初始结果

56f97177ce3b422eaa50656df6725652.png

粗大误差剔除(1/2/3/4为出大误差),鼠标右键删除

 115091158e70449d941b45dfce94d84b.png

剔除后效果

4d52de0011254d01a58b8aada8cc2d2c.png

4、实验结果

结果简介

双目相机标定的结果通常包括以下内容:

  1. 内部参数

    • 标定矩阵(Intrinsic Matrix):包括主点坐标、焦距等信息,描述了相机的内部几何特性。
    • 畸变系数:描述了镜头畸变(径向畸变和切向畸变)的参数,用于纠正图像畸变。
    • 透镜畸变纠正参数(在某些情况下):描述了透镜的畸变情况,用于在后期处理中纠正透镜畸变。
  2. 外部参数

    • 外部旋转矩阵:描述相机坐标系与世界坐标系之间的旋转关系。
    • 外部平移向量:描述相机坐标系相对于世界坐标系的平移关系。
  3. 重投影误差:即标定结果在实际图像上的投影误差,通过重投影误差可以评估标定的准确性。

  4. 立体匹配算法参数(在某些情况下):一些双目相机标定工具箱也会提供立体匹配算法的参数,例如视差范围、最小视差等。

  5. 标定板的尺寸和特征点提取参数:包括标定板的尺寸或特征点的提取方法,有助于在实际使用中保持标定的准确性。

这些标定结果可以帮助后续双目视觉应用中进行立体匹配、三维重建、深度估计等任务。通过正确的标定,可以提高双目相机的测量精度和稳定性,进而提升整个双目视觉系统的性能。

1)视图效果

35bb6a1c268c40c2a5c816b8a37ab27e.png

 2)数据分析

820ca0adbd9d4f99be6731c47396e0b6.png

5、实验资源

1)棋盘格

https://download.csdn.net/download/XU157303764/89354653

2)双目相机标定图像数据

https://download.csdn.net/download/XU157303764/89354868

3)标定结果数据

https://download.csdn.net/download/XU157303764/89354866

6、总结

在MATLAB中进行双目相机标定实验的总结如下:

  1. 数据采集:首先需要准备一组双目相机的图像数据,确保图像中包含对准标定板(如棋盘格)的多幅图像。

  2. 安装标定工具箱:安装MATLAB相机标定工具箱,这样可以方便地使用其中的函数进行双目相机的内外参数标定。

  3. 特征点提取:使用相机标定工具箱的函数提取标定板上的特征点,常用的特征点提取方法包括角点检测、直线检测等。

  4. 标定内部参数:利用特征点数据计算双目相机的内部参数,如标定矩阵和畸变系数,从而纠正图像的畸变。

  5. 标定外部参数:根据已知的标定板参数和图像数据,计算双目相机的外部参数,包括外部旋转矩阵和外部平移向量。

  6. 结果分析:对标定结果进行分析和评估,如计算重投影误差,并根据误差值调整标定参数以提高标定的准确性。

  7. 保存结果:最后将标定得到的内外参数保存起来,以备后续使用。可以将结果保存为MATLAB格式文件,以便在其他MATLAB程序中调用。

  8. 实验总结:总结实验过程中遇到的问题和解决方法,比如标定板的放置方式、图像采集的参数设置等。

通过以上步骤,可以在MATLAB中完成双目相机的标定工作,并得到双目相机的内部参数和外部参数,为后续的双目视觉应用提供基础支持。标定的准确性和稳定性对于后续的立体匹配、三维重建等任务至关重要,因此在实验过程中需要尽可能确保数据的准确性和完整性。

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

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

相关文章

【因果推断python】42_异质干预效应2

目录 预测弹性 关键思想 预测弹性 我们在这里陷入了复杂的境地。我们已经同意我们需要预测 ,遗憾的是这是不可观察的。因此,我们不能使用 ML 算法并将其作为目标插入。但也许我们不需要观察 来预测它 这是一个想法。如果我们使用线性回归呢&#xff…

Flutter ffi iOS Failed to lookup symbol

官方文档:在 iOS 中使用 dart:ffi 调用本地代码

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索,最快会后4个半月完成! 一、重要信息 大会官网:www…

App上架和推广前的准备

众所周知,App推广的第一步是上架各大应用下载市场,然后才是其他推广渠道。所以本文主要分两部分,第一部分主要介绍的是上架各大应用市场方面的准备,第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…

MySQL----表级锁行级锁排它锁和共享锁意向锁

MySQL的锁机制 锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中,不同存储引擎使用不同的加锁方式;我们以 InnoDB 存储引擎为例介绍 MySQL 中的锁机制,其他存储引擎中的锁相对简单一些…

游戏开发丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

【一文开启StableDiffusion】最火AIGC绘画工具SD阿里云部署指南(含踩坑经验)

Midjonery使用简单,效果出色,不过需要付费。本文将介绍完全开源的另一款产品StableDiffusion,它的社区目前非常活跃,各种插件和微调模型都非常多,而且它无需付费注册,没有速度、网络限制,非常推…

Matlab基础篇:数据输入输出

前言 数据输入和输出是 Matlab 数据分析和处理的核心部分。良好的数据输入输出能够提高工作效率,并确保数据处理的准确性。本文将详细介绍 Matlab 数据输入输出的各种方法,包括导入和导出数据、数据处理和数据可视化。 一、导入数据 Matlab 提供了多种方…

使用Tkinter创建带查找功能的文本编辑器

使用Tkinter创建带查找功能的文本编辑器 介绍效果代码解析创建主窗口添加菜单栏实现文件操作实现查找 完整代码 介绍 在这篇博客中,我将分享如何使用Python的Tkinter库创建一个带有查找功能的简单文本编辑器。 效果 代码解析 创建主窗口 import tkinter as tkcl…

第二十章 迭代器模式

目录 1 迭代器模式介绍 2 迭代器模式原理 3 迭代器模式实现 4 迭代器模式应用实例 5 迭代器模式总结 1 迭代器模式介绍 迭代器模式(Iterator pattern)又叫游标(Cursor)模式,它的原始定义是:迭代器提供一种对容器对象中的各…

supOS数据集成

为解决企业数据孤岛问题,supOS对外提供了天湖能力,APP应用集成到supOS后可以使用supOS的天湖,所有数据归集到天湖,利用supOS的ESB消息总线能力实现各个业务系统的服务注册,对外提供统一消息总线能力,从而解…

电致变色和电泳——有什么区别?

虽然电泳显示器和电致变色显示器都是反射显示器的示例,但其基础技术却截然不同。电致变色显示器采用超薄聚合物,可响应施加的电场而改变颜色。电场使电致变色材料发生化学氧化和还原。这种变化需要的能量很少,而且比较稳定,因此刷…

【尚庭公寓SpringBoot + Vue 项目实战】后台岗位管理(十六)

【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理(十六) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理(十六)1、业务说明2、逻辑模型介绍3、接口开发3.1、分页查询岗位信息3.2、保存或更新岗位信息3.3、根据ID删…

vue项目build 打包之后如何本地访问

vue项目build 打包之后如何本地访问 注意:vue项目build打包后 如果想实现本地访问 不能直接打开访问dist文件中的HTML文件(因为页面带会报错打不开。),需要启一个服务,通过服务来访问: 具体操作过程如下&am…

2024/06/18--代码随想录算法7/17|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 力扣链接 动态规划5步曲 确定dp数组(dp table)以及下标的含义: dp[i]: 下标i内(包括i)的房屋,最多可以偷到的金额为dp[i]确定递推公式 dp[i] max(dp[i-1], dp[i-2]nums[i])dp数…

磨削可以减少噪音和振动,并有助于提高电动汽车的齿轮效率

随着汽油成本的不断增加以及保护环境的愿望不断增强,电动汽车的发展势头越来越强劲也就不足为奇了。汽车制造商正在积极推动推出全电动产品,甚至比最初的目标日期 2040 年还要早。为了支持电气化的发展,支持这些车辆的供应链正在进行巨额投资…

全网最全!25届最近5年上海交通大学自动化考研院校分析

上海交通大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图 六、历年真题PDF 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教材介绍…

Windows CSC 服务特权提升漏洞复现(CVE-2024-26229)

漏洞信息 Windows CSC服务特权提升漏洞。 当程序向缓冲区写入的数据超出其处理能力时,就会发生基于堆的缓冲区溢出,从而导致多余的数据溢出到相邻的内存区域。这种溢出会损坏内存,并可能使攻击者能够执行任意代码或未经授权访问系统。本质上…

html5 draggable组件拖动自由布局的实现

如何使元素支持拖动 实现组件的自由拖动的核心就是 html5 中新添加的全局属性 draggable 属性,该属性规定了元素是否可进行拖动。属性值如下所示: true:规定元素的可拖动的false:规定元素不可拖动auto:使用浏览器的默…

【数据结构与算法】循环队列 重要知识点详解

循环队列的数据结构。 struct CircularQueue {ElemType a[MaxSize];int front, rear; };这个结构体包含三个成员: a 是一个 ElemType 类型的数组,用于存储循环队列的元素。front 是一个整数,表示队列头部元素的前一个位置。rear 是一个整数…