相机内参标定理论篇------张正友标定法

一、为什么做相机标定?

标定是为了得到相机坐标系下的点和图像像素点的映射关系,为摄影几何、计算机视觉等应用做准备。

二、为什么需要张正友标定法?

张正友标定法使手工标定相机成为可能,使相机标定不再需要精密的设备帮助。但内参标定的精度却需要依赖采集数据的质量。精度不如专业设备的结果,不过在日常科研等对精度要求不是非常高的领域足够满足。

三、为什么张正友使手工标定相机成为可能?

我们先思考一个问题,以针孔模型为例相机标定需要那些参数:

内参:fx fy cx cy k1 k2 p1 p2;

外参:R t。

假如我们用n张图像来标定相机的话,我们需要求解8 +(3 + 3)x n = 6n + 8个参数。求解这么多参数需要使用最优化。构建目标函数:

\sum_{1}^{n}\sum_{1}^{m}\left \| m_{ij} - m\hat{}(A, k_{1}, k_{2}, p_{1}, p_{2},R_{i}, t_{i}, M_{j})\right \|^{2}

其中m_{ij}为图像上角点,m\hat{}为投影点。

我们知道优化问题最害怕的就是遇到局部最优,导致优化后的结果和真实值相差较大。为了解决局部最优,最好的方法是提供较为准确的初值这就是张正友标定法最重要的作用。通过正交矩阵性质计算出不考虑畸变的相机内参和外参初值,然后利用最优化的方法,便可以得到精确的内参。

四、如何推导?

已知相机成像过程:世界坐标系->相机坐标系->相机坐标系->像素坐标系。可以用下面公式描述:

其中M为世界坐标系点,R t为世界坐标系到相机坐标系的旋转矩阵和平移量,A为相机内参矩阵,s为比例系数。

将具体数值代入公式可以获得:

其中r为R矩阵的列向量。已知世界坐标系在实际中选取为标定板坐标系,因此世界坐标系下点的Z值为零,因此可以进一步化简。

这里可以引入单应矩阵H:

用列向量表示H得:

由旋转矩阵是正交矩阵可以得到两条性质:列向量两两正交,且列向量是单位向量,因此可以得到:

因此可以用B表示A^{-T}A^{-1}:

将B代入上式并展开得到:

其中:

最后得到:

到现在,需要先求解H矩阵,然后利用H矩阵求解B矩阵。已知H矩阵有八个未知数(约去比例系数,使矩阵最后一项为1),利用下面公式,一对对应点可以提供两个约束,因此需要四个点可以求出单应矩阵H;

\begin{bmatrix} u\\ v\\ 1 \end{bmatrix} = H\begin{bmatrix} X\\ Y\\ 1 \end{bmatrix}

有了H矩阵值后可以得到V_{ij}值,已知B是对称矩阵因此有六个未知数,每个单应矩阵H可以提供两个约束,所以求解B最少需要三个不同的单应矩阵,也就是三个不同视角的标定图像。

求出B后便可以求解内参矩阵A,再得到A后利用下面公司便可以求出外参矩阵R和t:

至此便得到了相机内参的初值和不同标定图像外参的初值,然后再利用上面提到的目标函数进行最优化得到最后标定的内参。

总结:

1.张正友标定法最重要的地方是计算出了相机内参和外参的数值解,然后作为初始值代入的优化函数,解决了局部最优化的问题,是手工标定相机内参成为可能。

2.由于相机标定数据是手工采集,因此相机内参标定的精度取决于数据质量。涉及标定板选取和采集图像的注意事项,后续文章会介绍如何采集图像。

3.由于相机内外参在投影过程具有耦合关系,所以在优化时外参结果不准确也会影响内参结果,导致重投影误差很小但是得到的相机内参误差较大。

4.在需要精确内参标定结果时推荐使用相机厂商标定结果,在专业相机内参标定时,利用机械臂抓住相机在特定位置进行采图。相机外参有非常准确的初值,在优化时可以得到非常高的内参精度。

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

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

相关文章

7种常见的网络安全设备及其功能

网络安全设备在现代网络环境中起着至关重要的作用,帮助保护个人和组织免受恶意攻击。本文将介绍7种常见的网络安全设备,包括防火墙、入侵检测系统、反病毒软件、数据加密设备、虚拟私人网络、安全信息和事件管理系统以及网络访问控制设备,并详…

Torchvision中的Transforms的使用

一、transforms结构及用法 查看tansforms.py说明文档: ToTensor类作用是:将一个PIL图片或numpy形式转换成tensor的数据类型 python的用法-》tensor数据类型 通过 transforms.ToTensor去看两个问题 1、transforms该如何使用(python) 2、为什么我们需要Te…

碳排放预测 | 基于ARIMA和GM(1,1)的碳排放预测(Matlab)

目录 预测效果基本介绍模型描述ARIMA模型GM(1,1)模型 程序设计参考资料 预测效果 基本介绍 基于ARIMA和GM(1,1)的碳排放预测(Matlab) 基于ARIMA(自回归移动平均模型)和GM(1,1)(灰色预测模型)的碳排放预测是…

Pinely Round 3 (Div. 1 + Div. 2)(A~D)(有意思的题)

A - Distinct Buttons 题意: 思路:模拟从(0,0)到每个位置需要哪些操作,如果总共需要4种操作就输出NO。 // Problem: A. Distinct Buttons // Contest: Codeforces - Pinely Round 3 (Div. 1 Div. 2) // URL: https…

【docker笔记】docker理论及安装

前言 本笔记来源于尚硅谷docker教学视频 视频地址:https://www.bilibili.com/video/BV1gr4y1U7CY/?spm_id_from333.337.search-card.all.click 纯手打笔记,来之不易,感谢支持~ Docker简介 docker为什么会出现 想象一下:一个应用…

Python遥感影像深度学习指南(1)-使用卷积神经网络(CNN、U-Net)和 FastAI进行简单云层检测

【遥感影像深度学习】系列的第一章,Python遥感影像深度学习的入门课程,介绍如何使用卷积神经网络(CNN)从卫星图像中分割云层 1、数据集 在本项目中,我们将使用 Kaggle 提供的 38-Cloud Segmentation in Satellite Images数据集。 该数据集由裁剪成 384x384 (适用…

第1课 配置FFmpeg+OpenCV开发环境

一、配置开发环境 1.下载FFmpegOpenCV开发所用的SDK压缩包,并解压到E:\SDK下,解压后的路径应为:E:\SDK\ffmpeg-sdk\58\x86\dll及E:\SDK\opencv-sdk\340\x86\dll。 2.新建VC项目,名称为demo1,项目类弄为MFC应用程序&a…

第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 OK,到目前为止,我们的服务顺利容器化并上了K8s,同时也能通过外部网络进行请求访问,相关的服务数据也能进行持久化存储了,那么接下来…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记,仅供参考!!!! →点击 笔者主页,欢迎关注哦(互相学习,共同成长) 笔记目录 📢【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

MATLAB - 四元数(quaternion)

系列文章目录 前言 一、简介 四元数是一种四元超复数,用于三维旋转和定向。 四元数的表示形式为 abicjdk,其中 a、b、c 和 d 为实数,i、j 和 k 为基元,满足等式:i2 j2 k2 ijk -1。 四元数集用 H 表示&#xff0c…

Flink面试题与详解

Flink面试题目合集 从牛客网上找到的一些面试题,如果还有其他的,欢迎大家补充。 1、能否详细描述下Apache Flink的架构组件和其工作原理?请介绍一下Flink on YARN部署模式的工作原理。 官网图: 由两个部分组成,JM&am…

将PPT的图保持高分辨率导入到Word / WPS中

1、将PPT中画好的图组合在一起,选择组合后的图复制(Ctrlc) 2、在Word中,选中左上角的粘贴选项--->选择性粘贴 WPS选择元文件 / Word选择增强型图元文件 这样放大也不模糊了

提前预测刚体移动轨迹 预测运动轨迹

提前预测刚体移动轨迹 预测运动轨迹 一、效果二、介绍三、脚本RigidbodyExtension.cs 计算工具类DrawLine.cs 画线工具类 四、资源分享 一、效果 二、介绍 通过计算Unity物理系统的运动方位来判断下一步移动的位置,主要用于物体运动的提前预测,通常使用…

华为vrrp+mstp+ospf+dhcp+dhcp relay配置案例

1、左边是vlan 10主桥,右边是vlan 20的主桥,并且互为备桥 2、 vlan 10 vrrp网关默认用左边,vlan 20的vrrp 网关默认用右边,对应mstp生成树 3、两边都track检测,不通就把vrrp减掉60,这样就会自动切另一边了 …

Hadoop入门学习笔记——七、Hive语法

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 七、Hive语法7.1. 数据库相关操作7.1.1. 创建数据库7.1.2…

kubernetes集群 应用实践 zookeeper部署

kubernetes集群 应用实践 zookeeper部署 零、环境说明 一、zookeeper持久存储准备 zookeeper属于有状态应用,需要为zookeeper部署后端存储服务。 1.1 在NFS服务器添加一块硬盘vdc [rootnfsserver ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT …

【Python】基于flaskMVT架构与session实现博客前台登录登出功能

目录 一、MVT说明 1.Model层 2.View层 3.Template层 二、功能说明 三、代码框架展示 四、具体代码实现 models.py 登录界面前端代码 博客界面前端代码(profile.html) main.py 一、MVT说明 MVT架构是Model-View-Template的缩写,是…

持续集成交付CICD:Linux 部署 Jira 9.12.1

目录 一、实验 1.环境 2.K8S master节点部署Jira 3.Jira 初始化设置 4.Jira 使用 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins slave (从节点) jira9.12.1…

使用vue-qr,报错in ./node_modules/vue-qr/dist/vue-qr.js

找到node_modules—>vue-qr/dist/vue-qr.js文件,搜…e,将…去掉,然后重新运行项目。

Confluent 与阿里云将携手拓展亚太市场,提供消息流平台服务

10 月 31 日,杭州云栖大会上,阿里云云原生应用平台负责人丁宇宣布,Confluent 成为阿里云技术合作伙伴,合作全新升级,一起拓展和服务亚太市场。 本次合作伙伴签约,阿里云与消息流开创领导者 Confluent 将进一…