《计算机视觉中的多视图几何》笔记(7)
7 Computation of the Camera Matrix P P P
这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵 P P P,当我们知道足够多的 X ↔ x X \leftrightarrow x X↔x,我们该如何计算 P P P?如果知道3D和2D点的对应,那么内参和外参可以由基本的线性方程求解问题算出。遇到超定解时的解决办法也跟前面讲的第4章射影变换的情况非常类似。值得注意的是,第4章求的是 3 × 3 3 \times 3 3×3射影变换矩阵,而本章求的是 3 × 4 3 \times 4 3×4相机矩阵。
文章目录
- 7 Computation of the Camera Matrix P P P
- 7.1 Basic equations
- 7.2 Geometric error
- 7.2.1 Geometric interpretation of algebraic error
- 7.2.2 Estimation of an affine camera
- 7.3 Restricted camera estimation
- 7.4 Radial distortion
7.1 Basic equations
问题描述:我们假设有一些3D空间上的点 X i X_{i} Xi和2D图像上的点 x i x_{i} xi的对应关系已经给出。我们的目标是找到一个 3 × 4 3 \times 4 3×4的摄像机矩阵 P P P,满足对于所有 i i i都满足 x i = P X i x_{i}=PX_{i} xi=PXi。
我们可以发现,这个问题和在第4章里面说的求解2D射影变换矩阵 H H H非常像,唯一的区别是需要求解的矩阵维度变了而已。
最基本的方法就是方程 P X = x PX=x PX=x,然后变成 x × P X = 0 x \times PX = 0 x×PX=0 取该矩阵前两行,因为第三行是线性相关的。这样,我们可以写成 A p = 0 Ap=0 Ap=0,这 A A A就是一个 2 n × 12 2n \times 12 2n×12的矩阵。我们要求解摄像机矩阵,其实也就是要求解这个等式里面的 p p p。
最小解 因为 P P P是 3 × 4 = 12 3 \times 4 = 12 3×4=12个元素,那么就有11个自由度,理论上我们需要5.5对对应点就行,0.5对对应点就是知道x或者y坐标就可以了。
超定的情况 如果我们有多于6对点,那我们就求 m i n ∣ ∣ A p ∣ ∣ = 0 min||Ap||=0 min∣∣Ap∣∣=0,并且让他满足约束 ∣ ∣ p ∣ ∣ = 1 ||p||=1 ∣∣p∣∣=1, ∣ ∣ p ^ 3 ∣ ∣ ||\hat{p}^3|| ∣∣p^3∣∣=1, p ^ 3 \hat{p}^3 p^3就是p最后一行的前三个元素。
退化的情况 有两种情况可以使我们不能唯一确定 p p p:
- 相机和点都在一个扭曲的立方体上
- 相机和点都在平面上,且该平面一直线通过相机的中心
对于这样的配置,不能从点的图像中唯一地获得相机。 相反,它可以分别沿着扭曲的立方体或直线任意移动。 如果数据接近退化的情况,则获得的 P P P估计值很差。 例如,如果相机距离场景较远,例如鸟瞰图,则这种情况接近平面退化。
点的归一化 我们需要把所有点到直线的平均距离归一化到 3 \sqrt{3} 3。
从线对应来计算 P P P 如果我们能找到一对对应线,那么我们就有方程 l T P X j = 0 l^TPX_j=0 lTPXj=0其中 j = 0 , 1 j=0,1 j=0,1, X X X在 l l l上。
7.2 Geometric error
回忆我们在第4章提到的几何损失函数,我们可以把它用在这里:
min P ∑ i d ( x , P X ) 2 \min_P \sum_{i} d(x,PX)^2 Pmini∑d(x,PX)2

世界坐标系里的误差 我们考虑世界坐标系,也就是标定板上的误差。因为 P X PX PX不可能完全等于 x x x。反过来, x x x对应的世界坐标系里的点,也不会完全是 X X X,那么我们就假设 x x x对应的世界坐标系里的点是 X ^ \hat{X} X^,然后我们同时考虑世界坐标系的误差,和图像上的误差
∑ i = 1 n d M a h ( x i , P X i ^ ) 2 + d M a h ( X i , X i ^ ) 2 \sum_{i=1}^{n} d_{Mah}(x_{i}, P \hat{X_{i}})^2 + d_{Mah}(X_{i}, \hat{X_{i}})^2 i=1∑ndMah(xi,PXi^)2+dMah(Xi,Xi^)2
也就是说在图像上 x i x_{i} xi要靠近 P X i ^ P \hat{X_{i}} PXi^,在世界坐标系里 X i X_{i} Xi也要靠近 P X i ^ P \hat{X_{i}} PXi^。
7.2.1 Geometric interpretation of algebraic error
代数误差的几何解释:代数误差找一个点 X ′ X' X′尽可能的接近 X X X。
7.2.2 Estimation of an affine camera
上述所有方法都可以直接用在仿射摄像机上。
7.3 Restricted camera estimation
通常我们会对 P P P矩阵做出一些限制:
- 偏斜系数 s s s是0
- 像素是正方形,即 a x = a y a_{x}=a_{y} ax=ay
- 主点 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0)已知
- K K K已知
这几点假设不是同时成立的。比如我们可以只用1和2,那么 P P P矩阵就只剩下3+6=9个系数了。
迭代方法的初始化 如果我们求几何损失函数,要用迭代的方法。那么迭代的初值从哪里来? 可以用DLT先解出一个值作为初始值。
7.4 Radial distortion
相机畸变主要是径向畸变,所谓径向就是圆的直径的方向。该畸变会使正方形变得接近于一个圆,所以叫径向畸变。
校正的思想很简单。所谓畸变,就是给像素坐标 ( x , y ) (x,y) (x,y)乘上一个函数 L ( r ) L(r) L(r),我们只需要用泰勒展开去近似这个函数就好了,剩下的工作就是确定泰勒展开的系数。这个展开的系数作为内参,把它们一起标定出来就可以了。
相关文章:
《计算机视觉中的多视图几何》笔记(7)
7 Computation of the Camera Matrix P P P 这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵 P P P,当我们知道足够多的 X ↔ x X \leftrightarrow x X↔x,我们该如何计算 P P P?如果知道3D和2D点的对应ÿ…...
Python经典练习题(四)
文章目录 🍀第一题🍀第二题🍀第三题 🍀第一题 题目:打印出如下图案(菱形): 我们首先分析一下,本题实现的步骤主要有两个,分别是前四行和后三行 前四行:第一…...
Mac Pro在重装系统时提示“未能与恢复服务器取得联系”
检查网络连接: 确保你的Mac Pro连接到稳定的网络。尝试更换其他网络,例如切换到不同的Wi-Fi或使用有线连接。 系统时间校正: 错误的系统时间有时会导致与恢复服务器的连接问题。在恢复模式下打开终端(在实用工具菜单中选择终端&a…...
【C/C++】指针常量、常量指针、指向常量的常指针
目录 1.概念2. const pointer3. pointer to a constant3.1 (pointer to a constant)-constant3.2 poiner-constant3.3 (pointer to a constant)-variable3.4 poiner-variable3.5 多层级关系时的兼容3.6 用处 4. a constant pointer to a constant 1.概念 首先明确这几个术语的…...
【VUE复习·4】计算属性computed:原理、完整写法(不常用)、与 methods 的区别、简写(最常用)、应用案例!
总览 1.简介计算属性 2.computed 与 methods 的区别 3.computed 的简写(不修改计算属性,只显示) 4.经典应用场景 一、计算属性 1.为什么需要计算属性? 首先,如果我们要写一个插值语法,而 {{ }} 内的内容…...
Linux 基本语句_编译C过程
Linux撰写C语言并编译的过程 1、预处理 将所有的#define删除,并且展开所有的宏定义,并且处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等。处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。删除…...
MYSQL8解压版 windows 主从部署步骤及配置(包含配置文件,教程文件,免积分下载)
MYSQL8解压版 windows 主从部署步骤及配置 一.安装MSYQL 这里只讲大概,详细步骤、my.ini文件、安装包等会在页尾文件中(正常情况按首个mysql安装,只是名字有区别) 1.主库my.ini配置 [mysqld] #典型的值是5-6GB(8GB内存),8-11GB(16GB内存), 20-25GB(32GB内存)&…...
RabbitMQ的基本介绍
什么是MQ 本质是一个队列,只不过队列中存放的信息是message罢了,还是一种跨进程的通信机制,用于上下游传递信息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后,信息发送…...
AI智能视频监控技术如何助力美好乡村建设?
随着城市化发展,很多乡村设施也在逐渐完善,智能监控也成了乡村发展必不可少的一环,智能视频监控应该在乡村建设里如何发挥作用呢? 1、有效提升安全意识 通过在乡村重要区域、公共场所、道路等设置智能视频监控设备,可…...
【网络安全】2023年堡垒机品牌大全
随着大家网络安全意识的增加,随着国家等保政策的严格执行,越来越多的企业开始采购堡垒机。这里就给大家总结了部分堡垒机品牌,让大家参考参考。 2023年堡垒机品牌大全 1、行云堡垒 2、JumpServer 3、安恒 4、骞云 5、齐治 6、阿里云 …...
makefile相关知识的讲解
目录 makefile文件的介绍 step1:手动创建一个makefile文件 step2:在文件当中编辑指定的命令 step3:退出makefile文件并使用make执行文件当中的命令 step4:使用clean指令清除生成的文件 makefile当中的命令编写方式 目标文件和依…...
OpenCV中的HoughLines函数和HoughLinesP函数到底有什么区别?
一、简述 基于OpenCV进行直线检测可以使用HoughLines和HoughLinesP函数完成的。这两个函数之间的唯一区别在于,第一个函数使用标准霍夫变换,第二个函数使用概率霍夫变换(因此名称为 P)。概率版本之所以如此,是因为它仅分析点的子集并估计这些点都属于同一条线的概率。此实…...
Xilinx FPGA 程序固化重新上电程序不运行的问题
问题描述 FPGA直接下载bit文件,功能正常。 FPGA擦除FLASH,烧写FLASH,正常。 电源断电,重新上电,FALSH里面的程序没有启动,FPGA程序没有跑起来。–FLASH启动不正常。 解决办法 在XDC约束文件里边增加约束: ## Configuration options, can be used for all designs se…...
c++ 使用rapidjson对数据序列化和反序列化(vs2109)
RapidJSON是腾讯开源的一个高效的C JSON解析器及生成器,它是只有头文件的C库,综合性能是最好的。 1. 安装 在NuGet中为项目安装tencent.rapidjson 2. 引用头文件 #include <rapidjson/document.h> #include <rapidjson/memorystream.h> #…...
4.迭代最近点ICP及非线性优化求解
使用非线性优化方法求解ICP 文章目录 使用非线性优化方法求解ICP前情提要ICP问题回顾对矩阵变量求导数 ICP问题的非线性解法代码示例 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 前情提要 在迭代最近点算法ICP及SVD求解中介绍了ICP问…...
【redis总结】
文章目录 1、redis简介2、为什么要选择redis做缓存3、数据结构4、redis多线程模型redis6.0的变化 5、redis持久化AOF的实现过程RDB的实现过程 6、redis集群的搭建7、 redis过期删除和淘汰策略8、redis的内存淘汰策略 1、redis简介 Redis(Remote Dictionary Server&…...
图数据库:释放关系的力量
【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在数据管理领域,图数据库已经成为一种强大的工具,它彻底改变了我们处理和分析复杂关系的方式。与依赖表和列的传统关系数据库不同,图…...
Windows系统如何临时关闭“Windows安全中心实时保护”
前言 启动windows depender实时保护可能会使系统不太流畅,也可能会导致我们的程序无法正常运行,因为它会拦截或搜索我们的正常工作。 暂时关闭windows depender的实时保护对许多用户来说非常重要。 一、Win10系统关闭方法 打开Windows安全中心&#…...
二叉树MFC实现
设有一颗二叉树如下; 这似乎是一颗经常用作示例的二叉树; 对树进行遍历的结果是, 先序为:3、2、2、3、8、6、5、4, 中序为:2、2、3、3、4、5、6、8, 后序为2、3、2、4、5、6、8、3;…...
Nginx之客户并发数限制解读
目录 基本介绍 配置指令 limit_conn_zone limit_conn 其他 limit_rate limit_rate_after limit_req_zone limit_req 基本介绍 在我们进行系统开发设计中,要考虑服务器流量异常,负载过大等问题。对于大流量恶意的攻击访问,会带来带宽…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
