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,一经查实,立即删除!

相关文章

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

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

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

光学传感器图像处理流程(二) 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…

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

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

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

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

又是三道简单的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…

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

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

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

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

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

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

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

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

MacOS如何切换shell类型

切换 shell 类型 如果你想在不同的 shell 之间切换,以探索它们的不同之处,或者因为你知道自己需要其中的一个或另一个,可以使用如下命令: 切换到 bash chsh -s $(which bash)切换到 zsh chsh -s $(which zsh)$()语法的作用是运…

FastGPT:给 GPT 插上知识库的翅膀!0基础搭建本地私有知识库,有手就行

写在前面 上一篇,我们部署了接口管理和分发神器-OneAPI,将所有大模型一键封装成OpenAI协议。见:[OneAPI)。 基于此,本篇继续带领大家搭建一个基于本地知识库检索的问答系统。 有同学说 Coze 不也可以实现同样功能么&#xff1f…

51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)

一、功能实现 1.电脑通过串口发送数据:0F 2.点亮4个LED 二、注意事项 1.发送和接受数据的文本模式 2.串口要对应 3.注意串口的波特率要和程序中的波特率保持一致 4.有无校验位和停止位 三、如何使用串口波特率计算器 1.以本程序为例 2.生成代码如下 void Uar…

[论文笔记]涨点近5%! 以内容中心的检索增强生成可扩展的级联框架:Pistis-RAG

引言 今天带来一篇较新RAG的论文笔记:Pistis-RAG: A Scalable Cascading Framework Towards Content-Centric Retrieval-Augmented Generation。 在希腊神话中,Pistis象征着诚信、信任和可靠性。受到这些原则的启发,Pistis-RAG是一个可扩展…

windows远程桌面到 Linux系统(Ubuntu:22.04)—— 安装xrdp软件

1、在Linux系统上安装xrdp软件 sudo apt update sudo apt install xrdp2、安装完成后,需要开启xrdp服务 sudo systemctl start xrdp sudo systemctl enable xrdp打印返回 Synchronizing state of xrdp.service with SysV service script with /lib/systemd/system…

一键叫车|开发打车小程序,随时随地便利出行!

随着移动互联网的普及,人们出行的方式也在不断发生变化。对于出行多样化和便捷化的需求,一款打车小程序可以方便人们的出行,提高出行效率和便捷性。打车小程序能够根据用户的出行需求为其打造个性化的出行方案,从而让用户的出行生…

【DevOps】在云原生时代的角色与重要性探索

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是云原生 2、云原生的核心特性 3、什么是DevOps…

【高中数学/指数、对数】已知9^m=10,a=10^m-11,b=8^m-9,则ab两数和0的大小关系是?(2022年全国统考高考真题)

【问题】 已知9^m10,a10^m-11,b8^m-9,则() A.a>0>b B.a>b>0 C.b>a>0 D.b>0>a 【解答】 首先注意到10^log10_11-110,8^log8_9-90, 问题就转化为log8_9,log9_10,log10_11谁大谁小的问题, 再进一步…

如何将Docker镜像源更改为阿里云的镜像加速地址

在使用Docker时,尤其是在国内环境下,由于网络原因,从Docker Hub拉取镜像可能会遇到速度较慢的问题。为了提高拉取速度,我们可以将Docker的镜像源更改为阿里云等国内镜像源。下面详细介绍如何获取并配置阿里云的Docker镜像加速地址…