3.相机标定原理及代码实现(opencv)

1.相机标定原理

        相机参数的确定过程就叫做相机标定。

1.1 四大坐标系及关系

(1)像素坐标系(单位:像素(pixel))

        像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点,坐标表示为

(2)图像坐标系(单位:mm)

        以CCD 图像平面的中心为坐标原点,X轴和Y 轴分别平行于图像平面的两条垂直边。图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。表示为:,其 x 轴和 y 轴分别与像素坐标系的 u 轴,v 轴平行。图像上任意一个像素在两个坐标系的映射关系为:

        其中,单个像素在 x 轴和 y 轴的实际物理距离为 dx 和 dy,将上式转换成齐次方程式为(像素坐标系与图像坐标系之间的转换关系):

(3)相机坐标系(单位:mm)

        图像坐标系虽建立起图像与现实世界的物理关系,但这只是二维关系,因此,需要建立与三维世界相关的相机坐标系。图像坐标系是相机坐标系的某一平面,相机坐标系 的x轴和y轴与图像坐标系对应轴平行,两个坐标系间的距离就是相机的焦距f。其以相机光心为坐标原点,X 轴和Y 轴分别平行于图像坐标系的 X 轴和Y 轴,光轴为z轴,可以用(𝑋c, 𝑌c, 𝑍c )来表示。

        我们可以通过两个正的相似三角形可以得到图像坐标系和相机坐标系的关系:

        用齐次坐标系和矩阵表示上述关系:

(4)世界(大地)坐标系(单位:mm)

        相机坐标系是以相机为中心的描述现实世界的三维坐标系。在现实空间中,存在无数坐标系可以描述三维空间,为了确定三维空间点的具体位置,需要确定唯一一个基准坐标系来表述空间,这就是世界坐标系,用(𝑋w, 𝑌w, 𝑍w)来表示。

        其中,R 为 3×3 单位正交矩阵,表示了坐标系的旋转操作;t 为三维平移向量,代表了坐标系的平移操作;0 表示三维零向量。

(5) 四个坐标系之间的关系总结

        由上面前4步可以知道,四个坐标系的关系如下:

1.2 相机标定

        相机标定就是要通过一定的方法对特定图像(棋盘格角点检测)计算出这个相机本身的一些参数,包扩:内参矩阵A,外参矩阵[R|T]、畸变系数[k1,k2,k3,,p1,p2,]。内参矩阵各元素意义:一个像素的物理尺寸dx和dy,焦距f ,图像物理坐标的扭曲因子gama,图像原点相对于光心成像点的纵横偏移量cx和cy(像素为单位)。外参矩阵:世界坐标系转换到相机坐标系的旋转R和平移T矩阵。畸变系数:包括相机的径向畸变系数k1,k2,k3,和相机的切向畸变系数p1,p2,。需要的器材:一个黑白棋盘格的标定板,一个相机拍摄的不同角度或距离的棋盘格图像至少三张以上。

        相机的标定是根据像素坐标系与世界坐标系的关系,利用一定的约束条件,来求解相机的内外参数以及畸变系数的过程。

        传统的标定方法一般以棋盘格作为参照物,其中每个棋盘格的大小,尺寸以及棋盘格的数量都是已知的。标定过程就是,将棋盘格的顶点与图像上的对应点建立对应关系,利用棋盘格的已知信息来求得相机模型的内外参数和畸变系数。这种标定方法通常有张正友标定法和 Tasi 两步标定法等。这种方法容易受到标定物的制作精度的影响,但精度仍比另一种方法高。

张正友标定法

        张正友标定法的基本步骤是:在不同角度下,对标定参考物(棋盘格)进行拍摄,然后提取出棋盘格的顶点,接着解析出相机的畸变系数和内外参数,最后再根据极大似然估计,对参数进行优化。

        其中,M1为相机内参矩阵。

        设单应性矩阵 H 满足

,其中 λ 是尺度因子,由 于𝑟1和𝑟2正交,所以可得以下约束条件:

        由以上两式可以看出,ℎ1和ℎ2是可以通过单应性求解出来的,所以要求解的参数就变成 𝑀1矩阵中的未知的 5 个参数,可以通过三个单应性矩阵来求解这 5 个参数,三个单应性矩阵可以通过三张对同一标定板不同角度和高度的照片获得

        相机内参为:

        相机外参为:

        上述推导的结果都是在理想情况下得到的,没有任何噪声和干扰,但噪声是无法避免的。因此,在实际标定中,还需要使用极大似然法来对参数进行优化。 至此,单目相机就标定完成,但对于双目视觉系统,不仅要对每个相机进行标定,同时还要明确相机间的相互关系,因此还要对双目相机进行进一步的标定,即求取相机间的旋转矩阵和平移向量。

        由第一式可知左右相机的对应关系,由第二式和第三式可知,只需要知道每个相机的外参数,就可以求得双目相机的旋转矩阵和平移向量。

2.相机标定代码

        在这里我们用pycharm进行相机标定,用到了opencv库,所以在标定前需要安装好pycharm和opencv库。具体操作可以参照博客OpenCV-Python 相机标定入门详细教程 + 实例_opencv相机标定实例python-CSDN博客。

       首先进入 [2]一个开源的视觉机械臂项目:hta0下载标定代码(代码路径:hta0-horizontal-robot-arm - GitCode)。

        然后根据以上博客的步骤操作即可(已经写的很详细)。

        另外的代码实现也可以参考博客OpenCV学习笔记与代码示例(三):张氏标定法标定相机原理及函数详解-CSDN博客。主要是c++的实现。

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

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

相关文章

为校园后勤注入智慧:收件登记功能驱动全新体验

在智慧校园的后勤管理体系中,收件登记服务是一项旨在提升快递接收体验的创新举措,它无缝融合了现代科技与日常校园生活,为师生带来便捷与安心。 为应对日益增长的快递需求,师生可事先通过校园网平台或特制的移动应用预报快递信息&…

《Linux与Windows文件系统的区别》

Linux与Windows文件系统的区别 在计算机操作系统领域,Linux和Windows是两种广泛使用的操作系统,它们在文件系统方面有许多显著的差异。这篇博客将详细介绍这两种操作系统文件系统的区别,帮助读者更好地理解它们各自的特点和优势。 类别Linu…

光学传感器图像处理流程(二)

光学传感器图像处理流程(二) 2.4. 图像增强2.4.1. 彩色合成2.4.2 直方图变换2.4.3. 密度分割2.4.4. 图像间运算2.4.5. 邻域增强2.4.6. 主成分分析2.4.7. 图像融合 2.5. 裁剪与镶嵌2.5.1. 图像裁剪2.5.2. 图像镶嵌 2.6. 遥感信息提取2.6.1. 目视解译2.6.2…

数字化时代的供应链管理综合解决方案

目录 引言背景与意义供应链管理综合解决方案的目标 📄供应链管理系统主要功能系统优势 📄物流管理系统主要功能系统优势 📄订单管理系统主要功能应用场景 📄仓储管理系统系统亮点主要功能系统优势 📄商城管理系统主要功…

如何安全使用代理ip

1、选择可靠的代理服务提供商:选择知名的、信誉良好的代理服务提供商,避免使用免费的代理服务,因为免费的代理服务可能存在安全隐患。 2、使用HTTPS代理:使用HTTPS代理可以加密你的网络流量,保护你的隐私和安全。 3、…

【python】QWidget父子关系,控件显示优先级原理剖析与应用实战演练

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

socks4 socks4a socks5 socks5h的区别

1、socks4 socks4a socks5 socks5h的区别 代理设置区别curl https://www.google.com -x 127.0.0.1:1080等于http://127.0.0.1:1080curl https://www.google.com -x http://127.0.0.1:1080http代理,代理端服务器完成 DNS 解析curl https://www.google.com -x https:…

又是三道简单的web题(2)

一、cookie 1.打开后是如下页面,抓包,关注cookie 2.发现cookie中有一个文件 3.直接访问这个文件,得到flag 二、employeeswork 打开后页面如下: 点击后出现一串php代码 审一下这个代码,需要添加参数work并且赋值work…

Linux笔记之使用系统调用sendfile高速拷贝文件

Linux笔记之使用系统调用sendfile高速拷贝文件 code review! 文章目录 Linux笔记之使用系统调用sendfile高速拷贝文件sendfile 性能优势sendfile 系统调用优点:缺点: cp 命令优点:缺点: 实际测试:拷贝5.8个G的文件&a…

【Vue3】export, import, export default

export对外输出: export var name "mike"; //导出多个变量 export {name1, name2}import导入: import {name} from "/.a.js" //引入多个变量 import {name1, name2} from "/.a.js"export default为模块指定默认输出&am…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破前言合合信息TextIn平台:智能文档处理的领军者文档解析引擎:百页文档秒级处理大模型的发展背景…

vue vite自动化路由 无需手动配置

vue vite自动化路由 测试某些功能或者框架以及库的时候 需要创建新vue页面 没次都有手动配置 仅仅测试 细化的话根据自己需求配置权限 这里方便点 直接把router文件删掉 直接在main.js 引入所有路由注册 这样 每次在views下创建一个vue文件 直接访即可 不用手动注册了 main.js …

C#的using IDisposable 接口的使用介绍

IDisposable 接口在C#中的主要作用是提供一种用于释放非托管资源的机制。非托管资源包括文件句柄、数据库连接、网络连接、COM组件等,它们不受.NET运行时管理,需要显式释放以避免资源泄漏和提高性能。 使用 IDisposable 接口的主要步骤包括: 实现 IDisposable 接口: 在类中…

【漏洞复现】Crocus系统——Download——文件读取

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 Crocus系统旨在利用人工智能、高清视频、大数据和自动驾驶技术&…

Linux编程:使用 AddressSanitizer (ASan) 进行C/C++内存错误检测

文章目录 概要ASan 的配置与运行时优化CMake 配置运行时环境变量 ARM64 ASan库交叉编译动态链接 VS 静态链接示例:内存泄漏检测ASan 检测结果 概要 AddressSanitizer(ASan)是内存错误检测的强大工具,本文将介绍如何在 ARM64 系统…

福克斯波罗FOXBOROFBM202处理器 控制器 模块

福克斯波罗FOXBOROFBM202电梯是现代建筑内关系到人民生命财产安全的重要交通工具。如何提高电梯的运行效率、降低电梯能耗以及减少机械磨损、延长电梯的使用寿命,都是非常重要的研究课题。电梯是楼层用以固定提升的成套设备,具有安全可靠、乘坐舒适、停层…

ConditionalOnMissingClass注解使用介绍、应用场景以及示例代码

概述 ConditionalOnMissingClass 是 Spring Framework 中的一个条件注解,它用于在类路径中缺少指定的类时决定是否创建一个 bean 或配置一个 bean。这个注解允许开发者根据类的存在与否来动态地配置应用程序上下文中的组件。 应用场景 兼容性处理: 当需要在不同的运…

工程化-vue3+ts:代码检测工具 ESLint

一、理解ESLint ESLint是一个开源的JavaScript代码检查工具,用于帮助开发人员规范和统一编码风格。它可以检查代码中的潜在错误、不一致的编码习惯以及一些常见的代码问题。 ESLint使用基于规则的插件体系,可以根据项目的需求和个人的偏好配置不同的规…

数据库数据恢复—SQL Server数据库由于存放空间不足报错的数据恢复案例

SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生…