多视图几何--恢复相机位姿/内参的几种方法
恢复相机位姿的几种方法
1分解投影矩阵
1.1投影矩阵分解为相机内外参矩阵的完整解析
投影矩阵(Projection Matrix)是计算机视觉中将三维世界点映射到二维像素坐标的核心工具,其本质是相机内参矩阵(Intrinsic Matrix)和外参矩阵(Extrinsic Matrix)的联合作用。
一、投影矩阵的数学构成
投影矩阵 P P P 是一个 3 × 4 3 \times 4 3×4 的矩阵,其表达式为:
P = K ⋅ [ R ∣ t ] P = K \cdot [R \ | \ t] P=K⋅[R ∣ t]
其中:
- K K K 是内参矩阵( 3 × 3 3 \times 3 3×3),包含焦距 f x , f y f_x, f_y fx,fy 和主点坐标 ( c x , c y ) (c_x, c_y) (cx,cy),形式为:
K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1 - [ R ∣ t ] [R \ | \ t] [R ∣ t] 是外参矩阵( 3 × 4 3 \times 4 3×4),由旋转矩阵 R R R( 3 × 3 3 \times 3 3×3)和平移向量 t t t( 3 × 1 3 \times 1 3×1)组成,表示世界坐标系到相机坐标系的变换。
关键性质:
- 投影矩阵前三列 P [ : , 1 : 3 ] P_{[:,1:3]} P[:,1:3] 对应 K ⋅ R K \cdot R K⋅R,第四列 P [ : , 4 ] P_{[:,4]} P[:,4] 对应 K ⋅ t K \cdot t K⋅t。
- 任何非奇异的前三列矩阵均可通过分解唯一确定 K K K 和 R R R。
二、分解步骤与数学方法
1. 分离内参矩阵 K K K 和外参旋转矩阵 R R R
对投影矩阵的前三列进行 RQ分解(或等效的 QR分解):
K ⋅ R = P [ : , 1 : 3 ] ⇒ RQ分解 ⇒ K , R K \cdot R = P_{[:,1:3]} \quad \Rightarrow \quad \text{RQ分解} \quad \Rightarrow \quad K, R K⋅R=P[:,1:3]⇒RQ分解⇒K,R
- RQ分解:将矩阵分解为一个上三角矩阵(对应内参 K K K)和一个正交矩阵(对应旋转 R R R)。由于 K K K 是上三角矩阵, R R R 是正交矩阵(满足 R T R = I R^T R = I RTR=I),此分解是唯一的。
- 验证分解结果:
- 检查 K K K 的最后一行为 [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1],否则需对矩阵进行归一化。
- 若分解后 R R R 的行列式不为 1 1 1(即非旋转矩阵),需调整符号以保证其为合法旋转矩阵。
2. 求解平移向量 t t t
从投影矩阵第四列提取 K ⋅ t K \cdot t K⋅t,并通过逆运算得到平移向量:
t = K − 1 ⋅ P [ : , 4 ] t = K^{-1} \cdot P_{[:,4]} t=K−1⋅P[:,4]
示例:若 K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1 ,则 K − 1 = [ 1 / f x 0 − c x / f x 0 1 / f y − c y / f y 0 0 1 ] K^{-1} = \begin{bmatrix} 1/f_x & 0 & -c_x/f_x \\ 0 & 1/f_y & -c_y/f_y \\ 0 & 0 & 1 \end{bmatrix} K−1= 1/fx0001/fy0−cx/fx−cy/fy1 。
3. 分解的唯一性与约束条件
- 尺度等价性:投影矩阵 P P P 的尺度不确定性(即 P P P 和 λ P \lambda P λP 等价)需通过附加约束(如焦距的物理单位)确定。
- 非奇异条件:分解要求 P P P 的前三列矩阵非奇异(即 det ( P [ : , 1 : 3 ] ) ≠ 0 \det(P_{[:,1:3]}) \neq 0 det(P[:,1:3])=0)。
2分解单应矩阵
2.1世界坐标到像素坐标
当世界坐标为平面时,投影矩阵此时为特殊的单应矩阵,利用张正友标定法原理可以求解相机位姿。
2.2像素坐标到像素坐标
当单应矩阵描述两张照片的射影关系时,有数值法和解析法:
《Motion and structure from motion in a piecewise planar environment》
《3d reconstruction based on homography mapping》
《Deeper understanding of the homography decomposition for vision based control》
3分解本质矩阵
3.1 基本矩阵分解得到相机位姿的完整解析
在双目视觉或多视图几何中,基本矩阵(Fundamental Matrix)描述了不同视角间图像点对应的对极几何约束关系。分解基本矩阵以恢复相机位姿(旋转矩阵 R R R和平移向量 t t t)是三维重建与SLAM系统的核心步骤。以下结合数学推导、分解方法及工程实践,详细阐述其实现过程。
一、基本矩阵与本质矩阵的关系
基本矩阵 F F F和本质矩阵 E E E是理解对极几何的关键:
-
基本矩阵 F F F:
定义两视图间的对极约束关系,满足:
x ′ T F x = 0 \mathbf{x}'^T F \mathbf{x} = 0 x′TFx=0
其中 x \mathbf{x} x和 x ′ \mathbf{x}' x′为归一化平面坐标点。 -
本质矩阵 E E E:
当相机内参 K K K已知时, E E E与 F F F的关系为:
E = K T F K E = K^T F K E=KTFK
E E E可分解为旋转矩阵 R R R和平移向量 t t t的组合:
E = [ t ] × R E = [t]_\times R E=[t]×R
其中 [ t ] × [t]_\times [t]×为平移向量 t t t的斜对称矩阵。
二、分解本质矩阵的数学步骤
1. 奇异值分解(SVD)
对本质矩阵 E E E进行SVD分解:
E = U Σ V T E = U \Sigma V^T E=UΣVT
其中 Σ = diag ( σ 1 , σ 2 , 0 ) \Sigma = \text{diag}(\sigma_1, \sigma_2, 0) Σ=diag(σ1,σ2,0), σ 1 ≈ σ 2 \sigma_1 \approx \sigma_2 σ1≈σ2。根据Hartley的归一化方法, Σ \Sigma Σ可替换为 diag ( 1 , 1 , 0 ) \text{diag}(1,1,0) diag(1,1,0)以消除尺度影响。
2. 构造候选解
分解后,旋转矩阵 R R R和平移向量 t t t的可能组合为:
R = U W V T 或 R = U W T V T R = U W V^T \quad \text{或} \quad R = U W^T V^T R=UWVT或R=UWTVT
t = U ⋅ 3 或 t = − U ⋅ 3 t = U_{\cdot 3} \quad \text{或} \quad t = -U_{\cdot 3} t=U⋅3或t=−U⋅3
其中:
W = [ 0 − 1 0 1 0 0 0 0 1 ] W = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} W= 010−100001
这会产生四组候选解 ( R 1 , t 1 ) , ( R 1 , − t 1 ) , ( R 2 , t 1 ) , ( R 2 , − t 1 ) (R_1, t_1), (R_1, -t_1), (R_2, t_1), (R_2, -t_1) (R1,t1),(R1,−t1),(R2,t1),(R2,−t1)。
3. 解的唯一性筛选
通过正深度约束筛选正确解:
- 对匹配点对 x ↔ x ′ \mathbf{x} \leftrightarrow \mathbf{x}' x↔x′,计算三角化后的3D点 P P P在相机坐标系下的深度 Z Z Z。
- 若所有点的深度 Z Z Z均为正,则该解为物理可行解。
- 若存在多组可行解,需结合多视图几何或先验信息进一步判断。
4PnP方法
通过已知的3d点和对应的2d点,直接求解相机位姿,主要有直接线性变换,p3p,EPnP,BA等。
参考:
MVG
slam14讲
1
2
相关文章:
多视图几何--恢复相机位姿/内参的几种方法
恢复相机位姿的几种方法 1分解投影矩阵 1.1投影矩阵分解为相机内外参矩阵的完整解析 投影矩阵(Projection Matrix)是计算机视觉中将三维世界点映射到二维像素坐标的核心工具,其本质是相机内参矩阵(Intrinsic Matrix)…...
[数据结构]堆详解
目录 一、堆的概念及结构 二、堆的实现 1.堆的定义 2堆的初始化 3堆的插入 编辑 4.堆的删除 5堆的其他操作 6代码合集 三、堆的应用 (一)堆排序(重点) (二)TOP-K问题 一、堆的概念及结构 堆的…...
领域驱动设计(DDD)与MVC架构:理念对比与架构选择
领域驱动设计(DDD)与MVC架构:理念对比与架构选择 一、架构之争的本质:业务复杂度驱动技术演进 在软件开发领域,没有银弹式的完美架构,只有适合当前业务场景的合理选择。MVC与DDD的区别本质上是业务复杂度与…...
牛客周赛:84:B:JAVA
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(S…...
【理想解法学习笔记】
目录 理想解法原理简介算法步骤属性值规范化方法代码示例 理想解法 原理简介 TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是:首先建立初始化决策矩阵,而后基于规范化后的初…...
CI/CD—Jenkins配置一次完整的jar自动化发布流程
背景: 实现设想: 要创建自动化发布,需要准备一台测试服务器提前安装好java运行所需的环境,JDK版本最好和Windows开发机器上的版本一致,在Jenkins上配置将构建好的jar上传到测试服务器上,测试服务器自动启动…...
Magento2根据图片文件包导入产品图片
图片包给的图片文件是子产品的图片,如下图:A104255是主产品的sku <?php/*** 根据图片包导入产品图片,包含子产品和主产品* 子产品是作为主图,主产品是作为附加图片*/use Magento\Framework\App\Bootstrap;include(../app/boot…...
从零开始的python学习(五)P71+P72+P73+P74
本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...
OpenHarmony5.0分布式系统源码实现分析—软总线
一、引言 OpenHarmony 作为一款面向万物互联的操作系统,其分布式软总线(Distributed SoftBus)是实现设备间高效通信和协同的核心技术之一。分布式软总线通过构建一个虚拟的总线网络,使得不同设备能够无缝连接、通信和协同工作。本…...
基于SpringBoot实现旅游酒店平台功能六
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上࿰…...
代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
108. 冗余连接 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…...
RoboVQA:机器人多模态长范围推理
23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比,…...
TCP/IP原理详细解析
前言 TCP/IP是一种面向连接,可靠的传输,传输数据大小无限制的。通常情况下,系统与系统之间的http连接需要三次握手和四次挥手,这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...
Microsof Visual Studio Code 安装教程(中文设置)
VS Code 是一个免费的代码编辑器,可在 macOS、Linux 和 Windows作系统上运行。启动和运行 VS Code 既快速又简单。VS Code(全称 Visual Studio Code)是一款由Microsoft 推出的免费、开源、跨平台的代码编辑器,拥有强大的功能和灵活…...
python爬虫:Android自动化工具Auto.js的详细使用
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Auto.js 简介2. 安装与配置2.1 安装 Auto.js2.2 安装 Python 环境2.3 安装 ADB 工具3. Python 与 Auto.js 结合3.1 通过 ADB 执行 Auto.js 脚本3.2 通过 Python 控制 Auto.js3.3 通过 Python 与 Auto.js 交互4. 常用…...
Unity DOTS从入门到精通之 自定义Authoring类
文章目录 前言安装 DOTS 包什么是Authoring1. 实体组件2. Authoring类 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世…...
linux 软件安装(上)
一、基础环境准备 1.1、安装VM 1.2、在VM上导入linux iso镜像,装好linux系统 华为centos镜像下载地址 https://mirrors.huaweicloud.com/centos/ https://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/ 网易centos镜像下载地址 htt…...
php虚拟站点提示No input file specified时的问题及权限处理方法
访问站点,提示如下 No input file specified. 可能是文件权限有问题,也可能是“.user.ini”文件路径没有配置对,最简单的办法就是直接将它删除掉,还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...
【江协科技STM32】ADC数模转换器-学习笔记
ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁,ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…...
QT系列教程(20) Qt 项目视图便捷类
视频连接 https://www.bilibili.com/video/BV1XY41127t3/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 Qt项目视图便捷类 Qt项目视图提供了一些便捷类,包括QListWidget, QTableWidget, QTreeWidget等。我们分别介绍这几个便捷类。 我们先创建一个Qt …...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
