摄相机标定的基本原理
【相机标定的基本原理与经验分享】https://www.bilibili.com/video/BV1eE411c7kr?vd_source=7c2b5de7032bf3907543a7675013ce3a
相机模型:
定义:
内参:就像相机的“眼睛”。它描述了相机内部的特性,比如焦距(镜头的放大能力)、主点位置(图像中心)等。简单说,这些参数决定了相机如何把外界景物映射到图像上。
外参:可以看作相机在“房间”里的位置和朝向。它描述了相机相对于实际世界(例如房间、街道)的摆放位置和角度,告诉我们相机看世界的角度和方向。
畸变参数:就像眼镜的“矫正”作用。由于相机镜头的设计缺陷,拍出来的图像会有些弯曲或失真(比如直线看起来弯曲)。畸变参数就是用来校正这种失真,使图像更接近真实场景。
坐标系:
世界坐标系:代表物体在真实世界里的三维坐标,坐标系用表示

拍摄物体时,需要将世界坐标系的物体通过刚体变换转移到相机坐标系下
相机坐标系:代表以相机光学中心为原点的坐标系,相机光轴与轴重合,坐标系用
表示

图像坐标系:代表相机拍摄图像的坐标系,原点为相机光轴与成像平面的交点,是图像的中心点,坐标系用表示

像素坐标系:由于图像的基本单位是像素,所以该坐标系是图像上点在图像存储矩阵中的像素位置,坐标原点在左上角,坐标系用表示。前三个坐标系的单位是毫米,而最后一个坐标系的单位是像素
坐标系变换:
世界坐标系到相机坐标系的变换:世界坐标系是真实世界的基准坐标系,需要知道相机坐标系下的点在真实世界中的位置,利用齐次坐标变换矩阵

相机坐标系到图像坐标系的变换:该变换可以看作是简单的射影变换(将相机看作小孔成像的模型),将三维坐标变换成二维坐标。其中为相机的焦距

图像坐标系到像素坐标系的变换:设图像x方向每毫米有个像素,y方向每毫米有
个像素,则有:

其中,是图像坐标系原点在像素坐标系下的坐标
相机畸变模型:
一般只考虑径向畸变k和切向畸变p

其中,

畸变与和原图像点的距离点有关系,若k>0,则为枕型畸变
相机标定:
相机标定参数包括内参和外参

建立目标函数:

三维点和二维展示出来的图像上的点是一一对应的,三维点经过投影
等一系列操作得到图上的点(用红色实心点表示)

为已经拍摄通过角点提取等方法计算得到的二维点
通过相机模型得到目标函数,优化参数,使二维点和三维点重合,或最优化为最小
缺点:优化量过多,若初始值不好,容易陷入局部最优
张氏标定法:
原论文:A Flexible New Technique for Camera Calibration
详解及代码:【三维重建】摄像机标定(张正友相机标定法)_张正友标定法-CSDN博客
通过上述提到的目标函数得到很好的解,用于初始值和最优化
假设平面在世界坐标系下为,标定板为

,因此
不起作用,可以将其去除掉

表示所有相机内参数的矩阵,将
(内参乘外参的矩阵)称为
,表示一个平面和另一个平面的映射关系,可以通过两个平面求得,为已知量
![]()
推导:
H为
![]()
为刚体变换矩阵,是
,其中R为正交矩阵,列向量模长为1,由此可以得到:
①垂直于
②的模等于
的模
得到下面的方程:

进行计算和公式推导:

最终得到:
v已知,b为相机内参的未知量组合

一张照片可以提供一个2*6矩阵,至少需要三张照片,可以确定b的唯一,越多照片越可以确定,形成冗余方程,更具有稳定性
再使用目标函数,对最小二乘进行优化

一些改进:
Accurate camera calibration using iterative refinement of control points
1.明确张正友的方法没有限制棋盘格或者圆环
2.圆环与棋盘格的优缺点分别是什么?(圆的标定结果和精度大于方形)
圆环与棋盘格:

圆检测精度高,表现为中心拟合精度高,但是具有偏心误差
棋盘格检测精度低,但是不存在偏心误差
偏心误差:空间中两条直线的交点的投影为其投影直线的交点;而圆的中心投影不等于投影椭圆的中心(解决方法见下方论文)
Quasi-eccentricity error modeling and compensation in vision metrology


使用情况:若知道如何纠正偏心误差 ,使用圆的精度更高;若不知道,则使用棋盘格
标定实际操作:
1.操作
OpenCV有现成函数,如果想更方便需要自己编写一个GUI界面
error = cv::calibrateCamera(object_points,image_points,imageSize,cam_intr_para,distCoeffs,rvecs,tvecs);
2.拍摄机位和数量选择
最少拍三张,三张后达到稳定,常用为十几张到二十几张

相机正常拍摄,沿光轴旋转,需要顾及边界参数和畸变参数


3.标定结果和评判标准
使Re-projection error误差最小(二维角点减三维点投影)
该标准已成为相机标定误差的标准
重投影误差:
①图像(角点)检测精度,如果2d角点检测不准,会直接造成重投影误差,需要找到一个精度高鲁棒性的算法
②相机本身存在成像噪声
③相机分辨率,5000*3000和1000*600的相机在同情况下,前者的误差更高
④相机本身的最优化算法
其他评判标准:
三维重建:
若拍摄10组照片,得到内参数矩阵A和外参数矩阵Rt(10张照片对应10个Rt);假设其中一张照片的标定照片如下图:

在标定结束后,A、R、t都是已知的;取标定板上的左上角和右下角两个角点应该一致,按照R、t、A(内参和外参)将3d标定板上的这两个角点重新投影到图像上的两个点

4.应用
单目:
pnp问题:已知n点的对应关系,如何求解它的R和t(已知内参数,求解外参数)
设有一个立体标版,希望得知立体标版与2d图像的转换关系

opencv中有现成的函数

双目测量

相关文章:
摄相机标定的基本原理
【相机标定的基本原理与经验分享】https://www.bilibili.com/video/BV1eE411c7kr?vd_source7c2b5de7032bf3907543a7675013ce3a 相机模型: 定义: 内参:就像相机的“眼睛”。它描述了相机内部的特性,比如焦距(镜头的放…...
CentOS 7 安装 Redis6.2.6
获取资源、下载安装 Redis6.2.6 安装Redis6.2.6 上传到服务器或直接下载(wget http://download.redis.io/releases/redis-6.2.6.tar.gz)、再解压安装 tar -zxvf redis-6.2.6.tar.gz 进入redis解压目录 cd redis-6.2.6先编译 make再执行安装 make PREFI…...
在CentOS系统上安装Conda的详细指南
前言 Conda 是一个开源的包管理系统和环境管理系统,广泛应用于数据科学和机器学习领域。本文将详细介绍如何在 CentOS 系统上安装 Conda,帮助您快速搭建开发环境。 准备工作 在开始安装之前,请确保您的 CentOS 系统已经满足以下条件&#x…...
3D数字化:家居行业转型升级的关键驱动力
在科技日新月异的今天,家居行业正经历着一场前所未有的变革。从传统的线下实体店铺到线上电商平台的兴起,再到如今3D数字化营销的广泛应用,消费者的购物体验正在发生翻天覆地的变化。3D数字化营销不仅让购物变得更加智能和便捷,还…...
CSS—补充:CSS计数器、单位、@media媒体查询
目录 1. CSS计数器 嵌套计数器: 对列表元素: 2.单位 绝对长度: 相对长度: 3.media媒体查询 1. CSS计数器 CSS 计数器就像“变量”。变量值可以通过 CSS 规则递增(将跟踪它们的使用次数)。 如需使用…...
【JAVA架构师成长之路】【电商系统实战】第10集:电商秒杀系统实战(流量削峰 + 库存预热 + 请求排队)
30分钟课程:电商秒杀系统实战(流量削峰 库存预热 请求排队) 课程目标 掌握秒杀系统核心架构设计:流量削峰、库存预热、请求排队。实现基于 Redis 的令牌桶限流与库存原子扣减。通过 Redis List 或 Kafka 实现高并发请求的异步处…...
无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法
视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可将上传的点播…...
Logisim实验--计组
每个实验会先讲一下原理再给出答案。 实验一:7段数码管驱动电路设计 实验目的 (1)帮助学生理解真值表方式设计电路的原理; (2)能利用Logisim的真值表生成电路功能自动生成所需电路。 这里我们要看清每个引脚控制的是哪个灯亮,注意看它的线…...
【Linux】软硬链接 | 动静态链接(三)
目录 前言: 一、软硬链接 1.软链接 2.硬链接 3.硬链接数 4.软硬链接的区别 5.使用unlink删除链接的文件 6.目录文件链接数( . 和 .. ) 二、静态库的制作和使用 1.制作静态库 2.使用静态库 2.1方法一 2.2方法二 2.3方法三 三、动态库的制作和使用 1.…...
数据结构(回顾)
数据结构(回顾) 回顾 不同点顺序表链表存储空间上物理上一定连续逻辑上连续,物理上不一定连续随机访问支持,时间复杂度O(1)不支持,时间复杂度O(N)任意位置插入或者删除元素可能需要挪动元素,效率低&#…...
达梦数据库在Linux,信创云 安装,备份,还原
(一)系统环境检查 1操作系统:确认使用的是国产麒麟操作系统,检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本: cat /etc/os-release 2硬件资源:确保服务器具备足够的硬件资源࿰…...
从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动
目录 所以,键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手! 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个,我们想到的第一个可以…...
01-简单几步!在Windows上用llama.cpp运行DeepSeek-R1模型
1.llama.cpp介绍 Llama.cpp 是一个开源的、轻量级的项目,旨在实现 Meta 推出的开源大语言模型 Llama 的推理(inference)。Llama 是 Meta 在 2023 年开源的一个 70B 参数的高质量大语言模型,而 llama.cpp 是一个用 C 实现的轻量化…...
Trae AI 开发工具使用手册
这篇手册将介绍 Trae 的基本功能、安装步骤以及使用方法,帮助开发者快速上手这款工具。 Trae AI 开发工具使用手册 Trae 是字节跳动于 2025 年推出的一款 AI 原生集成开发环境(IDE),旨在通过智能代码生成、上下文理解和自动化任务…...
HarmonyOS Next 属性动画和转场动画
HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…...
JavaWeb-mysql8版本安装
下载方式 地址:https://www.mysql.com/cn/downloads/ 选择:MySQL Community (GPL) downloads 选择:MySQL Community Server 选择: 选择: 安装mysql (8.0.30) 1、以管理员身份 打开 命令行…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch新闻搜索引擎相关性优化实战3.2.3 案例:新闻搜索引擎的相关性优化项目背景1. 相关性问题诊断与分析1.1 初始查询DSL示例1.2 问题诊断矩阵1.3 性能基…...
HCIA复习拓扑实验
一.拓扑图 二.需求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3.学校内部路由使用静态路由,R1和R2之间两…...
企业如何选择研发项目进度管理软件?盘点15款实用工具
这篇文章介绍了以下工具: 1. PingCode; 2. Worktile; 3. 腾讯 TAPD; 4. 华为 DevCloud; 5. 亿方云; 6. 阿里云效; 7. CODING 码云; 8. 明道云; 9. 进度猫; 10. 轻流等。 …...
(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
conda 配置新环境时package will be install 和 package will be download 的区别
install 和 download 的区别 package will be downloaded下的包:这一类显示的是需要从 conda 仓库或其他指定的源下载的软件包。这些软件包通常是 .tar.bz2、.tar.xz 或 .conda 格式的压缩包。这些包会被下载到本地缓存目录(通常是 ~/.conda 或 C:\Users…...
第本章:go 切片
注意: 切片必须要初始化 才能使用 ,切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话: append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…...
P6412题解
原题 题目描述 现在有一个 1 ∼ n 1\sim n 1∼n 的排列 a a a,将序列中的元素依次放进一个 BST 里,求 BST 中插入函数的执行次数。 注意:第一个数已经作为 BST 的根。 如果您无法理解上面说的话,这里有一份伪代码: insert( number x, node n )c+1;if x is less tha…...
关于AI数据分析可行性的初步评估
一、结论:可在部分环节嵌入,无法直接处理大量数据 1.非本地部署的AI应用处理非机密文件没问题,内部文件要注意数据安全风险。 2.AI(指高规格大模型)十分适合探索性研究分析,对复杂报告无法全流程执行&…...
编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)
为了纪念Delphi在2002年2月14日发布的25周年(2020.2.12),这里有一段由.EXE杂志编辑Will Watts于1995年对Delphi首席架构师Anders Hejlsberg进行的采访记录。在这次采访中,Anders讨论了Delphi的设计与发展,以及即将到来的针对Windows 95的32位版本。 Q. 编译器引擎本身是用…...
SQL 窗口函数之lead() over(partition by ) 和 lag() over(partition by )
lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 L…...
【基础知识】回头看Maven基础
背景 项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考、仿写,最终做出想要的效果。 但实际心里有些迷糊,不清楚具体哪个基础的配置所实现的效果。 今天,特意回过头来,了解Maven的基…...
Manus+Ollama实现本地大模型部署和应用测试
这几天Manus即DeepSeek后又突然火爆,我也进行了跟踪测试,特记录一下分享给大家,目前来看,Manus的确是一个可以进行任务分解的自动化解决方案,将其他AI需要多次繁杂的迭代对话做了较大的改进,相当于用户抛出…...
labelimg标注的xml标签转换为yolo格式标签
本文不生产技术,只做技术的搬运工!!! 前言 在yolo训练时,我们需要对图像进行标注,而使用labelimg标注时如果直接选择输出yolo格式的数据集,则原始数据的很多信息无法被保存,因此一版…...
【Python 数据结构 9.树】
我装作漠视一切,其实我在乎的太多,但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合,n0时为空树。当n大于0的时候,满足如下两个条件: ① 有且仅有一个特定的结点ÿ…...
