双目相机标定流程(MATLAB)

一:经典标定方法

1.1OPENCV

1.2ROS

ROS进行双目视觉标定可以得到左右两个相机的相机矩阵畸变系数,如果是单目标定,用ROS会非常方便。

 3.MATLAB标定(双目标定)

MATLAB用来双目标定会非常方便,主要是为了得到两个相机之间的旋转矩阵R和平移矩阵T。

前提是已经已经用两个相机拍摄好多组照片。

二:采用matlab双目标定流程

2.1选择matlab中的双目标定工具箱

 2.2导入图片并设置棋盘格尺寸

导入左右相机拍摄照片的文件夹,同时设置棋盘格子宽度,点击确定以后,matlab会自动剔除一些质量不高的照片。因此拍摄时照片尽量多一些,图片要求和单目标定时一致,数量我自己的话是建议200张会比较好一些,然后没有那么高的标定需求的话,20张应该够了。涉及到X,Y轴(左右,上下),然后还有SIZE(远近),还有翻转。图片拍摄的角度越多,标定也就越精准。

 

2.3设置参数

参数解释

2.3.1Radial Distortion(径向畸变)

2 Coefficients选项的官方含义:
Use fourth degree polynomial to estimate the radial distortion of a lens.
使用四次多项式来估计透镜的径向畸变。

3 Coefficients选项的官方含义:
This setting is recommended only for wide field of view camera.
Use sixth degree polynomial to estimate the radial distortion of a lens.
此设置仅适用于大视场相机。
使用六次多项式来估计透镜的径向畸变。

综上所述:
对于一般的相机选择2 Coefficients选项即可,对于大视场相机则选择3 Coefficients选项。

2.3.2Compute

Compute包含Skew和Tangential Distortion两个选项

2.3.2.1SKew

Assume that X-axis and Y-axis are not perpendicular. This means that the image pixels are not rectangular. Most modern cameras do not exhibit this issue.
假设X轴和Y轴不垂直。这意味着图像像素不是矩形的。大多数现代相机都没有这个问题。
所以,Skew选项一般不需要选择。

2.3.2.2Tangential Distortion
Tangential distortion occurs when the lens’ principal axis is not perpendicular to the camera sensor.
当镜头的主轴与相机传感器不垂直时,会发生切向失真。

 

2.3.3设置单目标定时的参数(可选) 

如果希望将多目标定时的参数设置和含义与单目标定时保持一致,可以使用与单目标定时相同的参数设置和方法。可以输入之前单目标定时得到的内参矩阵(可选),然后点击"Calibrate"按钮进行计算。这样做可以确保在多目标定时中使用一致的参数和方法来进行校准。

  

左下方的直方图为左右图像的标定误差,点击误差较大的直方图,可以直接在左边的图像对中找到对应的图像,右键选择“Remove and Recalibrate”,可以重复上述步骤,直到认为误差满足标定需求为止。

 2.4导出参数

 2.5读取参数

TranslationOfCamera2:相机2相对于相机1的偏移矩阵;

RotationOfCamera2:相机2相对于相机1的旋转矩阵;

CameraParameters1和CameraParameters2为左右摄像头的单独标定参数

2.5.1两个摄像头的平移和旋转参数

平移参数可直接使用;但旋转参数需进行转置才能使用。

2.5.2摄像机内参矩阵

CameraParameters1与CameraParameters2中包含如下文件:

特别注意:IntrinsicMatrix存放的是摄像头的内参,只与摄像机的内部结构有关,需要先转置再使用。 

2.5.3畸变参数

RadialDistortion和TangentialDistortion中存放的是畸变参数, RadialDistortion为径向畸变,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由K1,K2,K3确定。TangentialDistortion为切向畸变,由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数P1,P2确定。

不过在使用时,需要注意参数的排放顺序,即K1K2P1P2K3。切记不可弄错,否则后续的立体匹配会出现很大的偏差。

参考资料:双目视觉标定MATLAB_matlab双目标定-CSDN博客

双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,)_rectifystereoimages-CSDN博客

matlab相机标定Options选项解析_radial distortion 3 cofficient-CSDN博客Matlab2015 双目相机自动标定 (mamicode.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法入门赛】A.坐标变换(推荐学习)C++题解与代码

比赛链接:https://www.starrycoding.com/contest/8 题目描述 武汉市可以看做一个二维地图。 牢 e e e掌握了一项特异功能,他可以“瞬移”,每次瞬移需要分别设定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy,瞬移完成后位置会…

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展,电脑已经成为我们日常生活和工作中不可或缺的一部分。然而,对于许多初学者来说,如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说,更是需要一篇详尽的指南来…

【计算机毕业设计】springboot国风彩妆网站

二十一世纪我们的社会进入了信息时代, 信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

ntfs文件系统的优势 NTFS文件系统的特性有哪些 ntfs和fat32有什么区别 苹果电脑怎么管理硬盘

对于数码科技宅在新购得磁盘之后,出于某种原因会在新的磁盘安装操作系统。在安装操作系统时,首先要对磁盘进行分区和格式化,而在此过程中,操作者们需要选择文件系统。文件系统也决定了之后操作的流程程度,一般文件系统…

MySQL存储引擎详解

存储引擎 MySQL体系结构 连接层:与客户端连接,权限校验、连接池服务层:SQL接口和解析、查询优化、缓存、函数引擎层:索引、存储引擎存储层:系统文件、日志(Redo、Undo等) 存储引擎介绍 不同的…

暴力数据结构之栈与队列(队列详解)

1.队列的定义 队列是一种特殊的线性表,它遵循先进先出(FIFO)的原则。在队列中,只允许在表的一端进行插入操作(队尾),而在另一端进行删除操作(队头)。这种数据结构确保了最…

【WebGIS实例】(14)MapboxGL 加载地形高程数据

前言 官网示例:Add 3D terrain to a map | Mapbox GL JS | Mapbox 大佬博客:Mapbox GL基础(七):地形数据的处理与加载 (jl1mall.com) 加载Mapbox地形数据 map.once(style.load, () > {map.addSource(mapbox-dem,…

改变视觉创造力:图像合成中基于样式的生成架构的影响和创新

原文地址:revolutionizing-visual-creativity-the-impact-and-innovations-of-style-based-generative 2024 年 4 月 30 日 介绍 基于风格的生成架构已经开辟了一个利基市场,它将机器学习的技术严谨性与类人创造力的微妙表现力融为一体。这一发展的核…

Windows11 同时安装jdk8和jdk17 可切换

Windows11 同时安装jdk8和jdk17 可切换 死忠于JDK8的码农们,可能不得不做出一些改变的 因为在springboot3最低也是只能用17 并且最近如果创建springboot项目的时候,你会发现,最低也是17的 并且,如果使用springcloud开发&#x…

达梦数据库查询最近N天的日期列表

获取近10天的日期列表&#xff1a; //10替换成需要的天数N select to_char(trunc(sysdate)-level,YYYY-MM-DD) from dual connect by rownum<10; 查询结果如下&#xff1a;

牛客小白月赛93

B交换数字 题目&#xff1a; 思路&#xff1a;我们可以知道&#xff0c;a*b% mod (a%mod) * (b%mod) 代码&#xff1a; void solve(){int n;cin >> n;string a, b;cin >> a >> b;for(int i 0;i < n;i )if(a[i] > b[i])swap(a[i], b[i]);int num1…

TriCore: Architecture

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的笔记&#xff0c;稍作整理方便查阅&#xff0c;错误之处&#xff0c;还请指正&#xff0c;谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

JavaScript逆向技术

JavaScript逆向之旅&#xff1a;深入解析与实践 在数字时代&#xff0c;前端技术的迅速发展使得Web应用变得更加丰富和复杂。JavaScript&#xff0c;作为前端的核心语言&#xff0c;其安全性和隐私保护问题也逐渐浮出水面。JavaScript逆向&#xff0c;作为一种从前端代码中提取…

TCP超时重传机制

一、TCP超时重传机制简介 TCP超时重传机制是指当发送端发送数据后&#xff0c;如果在一定时间内未收到接收端的确认应答&#xff0c;则会认为数据丢失或损坏&#xff0c;从而触发重传机制。发送端会重新发送数据&#xff0c;并等待确认应答。如果在多次重传后仍未收到确认应答&…

STM32入门周边知识(为什么要装MDK,启动文件是什么,为什么要配置时钟等等)

目录 MDKMDK与C51共存为什么要安装MDK 启动文件是什么&#xff0c;为什么要添加许多文件为什么要添加头文件路径为什么是寄存器配置魔术棒中的define为什么必须先配置时钟杂例 MDK MDK与C51共存 在最开始学习51单片机的时候&#xff0c;当时安装keil的时候&#xff0c;认为就是…

队列的实现(使用C语言)

完整代码链接&#xff1a;DataStructure: 基本数据结构的实现。 (gitee.com) 目录 一、队列的概念&#xff1a; 二、队列的实现&#xff1a; 使用链表实现队列&#xff1a; 1.结构体设计&#xff1a; 2.初始化&#xff1a; 3.销毁&#xff1a; 4.入队&#xff1a; 5.…

青动CRM源码搭建/部署/上线/运营/售后/更新

CRM是一款基于thinkphpfastadmin开发的客户管理系统。旨在助力企业销售全流程精细化、数字化管理&#xff0c;全面解决企业销售团队的全流程客户服务难题&#xff0c;帮助企业有效盘 活客户资源、量化销售行为&#xff0c;合理配置资源、建立科学销售体系&#xff0c;提升销售业…

工作中遇见的问题总结

1. 当我执行下面代码的时候&#xff0c;下边的的代码还是会执行 if(name"aaa"){console.log("111");}

普通人可以抓住黄金价格大涨的投资机会吗?

黄金价格的波动对于投资者来说&#xff0c;总是充满了诱惑和挑战。近期&#xff0c;全球经济形势变化多端&#xff0c;地缘政治冲突频发&#xff0c;这些因素无不对黄金市场造成影响&#xff0c;使得黄金价格出现大幅波动。那么&#xff0c;作为普通人&#xff0c;能否抓住黄金…

重生我是嵌入式大能之串口调试UART

什么是串口 串口是一种在数据通讯中广泛使用的通讯接口&#xff0c;通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter)&#xff0c;其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中&#xff0c;串口常用于与外部设备进…