当前位置: 首页 > news >正文

多视图几何--恢复相机位姿/内参的几种方法

恢复相机位姿的几种方法

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)组成,表示世界坐标系到相机坐标系的变换。

关键性质

  1. 投影矩阵前三列 P [ : , 1 : 3 ] P_{[:,1:3]} P[:,1:3] 对应 K ⋅ R K \cdot R KR,第四列 P [ : , 4 ] P_{[:,4]} P[:,4] 对应 K ⋅ t K \cdot t Kt
  2. 任何非奇异的前三列矩阵均可通过分解唯一确定 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 KR=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 Kt,并通过逆运算得到平移向量:
t = K − 1 ⋅ P [ : , 4 ] t = K^{-1} \cdot P_{[:,4]} t=K1P[:,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} K1= 1/fx0001/fy0cx/fxcy/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是理解对极几何的关键:

  1. 基本矩阵 F F F
    定义两视图间的对极约束关系,满足:
    x ′ T F x = 0 \mathbf{x}'^T F \mathbf{x} = 0 xTFx=0
    其中 x \mathbf{x} x x ′ \mathbf{x}' x为归一化平面坐标点。

  2. 本质矩阵 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=UWVTR=UWTVT
t = U ⋅ 3 或 t = − U ⋅ 3 t = U_{\cdot 3} \quad \text{或} \quad t = -U_{\cdot 3} t=U3t=U3
其中:
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= 010100001
这会产生四组候选解 ( 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. 解的唯一性筛选

通过正深度约束筛选正确解:

  1. 对匹配点对 x ↔ x ′ \mathbf{x} \leftrightarrow \mathbf{x}' xx,计算三角化后的3D点 P P P在相机坐标系下的深度 Z Z Z
  2. 若所有点的深度 Z Z Z均为正,则该解为物理可行解。
  3. 若存在多组可行解,需结合多视图几何或先验信息进一步判断。

4PnP方法

通过已知的3d点和对应的2d点,直接求解相机位姿,主要有直接线性变换,p3p,EPnP,BA等。
参考:
MVG
slam14讲
1
2

相关文章:

多视图几何--恢复相机位姿/内参的几种方法

恢复相机位姿的几种方法 1分解投影矩阵 1.1投影矩阵分解为相机内外参矩阵的完整解析 投影矩阵(Projection Matrix)是计算机视觉中将三维世界点映射到二维像素坐标的核心工具,其本质是相机内参矩阵(Intrinsic Matrix&#xff09…...

[数据结构]堆详解

目录 一、堆的概念及结构 二、堆的实现 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根据图片文件包导入产品图片

图片包给的图片文件是子产品的图片&#xff0c;如下图&#xff1a;A104255是主产品的sku <?php/*** 根据图片包导入产品图片&#xff0c;包含子产品和主产品* 子产品是作为主图&#xff0c;主产品是作为附加图片*/use Magento\Framework\App\Bootstrap;include(../app/boot…...

从零开始的python学习(五)P71+P72+P73+P74

本文章记录观看B站python教程学习笔记和实践感悟&#xff0c;视频链接&#xff1a;【花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...

OpenHarmony5.0分布式系统源码实现分析—软总线

一、引言 OpenHarmony 作为一款面向万物互联的操作系统&#xff0c;其分布式软总线&#xff08;Distributed SoftBus&#xff09;是实现设备间高效通信和协同的核心技术之一。分布式软总线通过构建一个虚拟的总线网络&#xff0c;使得不同设备能够无缝连接、通信和协同工作。本…...

基于SpringBoot实现旅游酒店平台功能六

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高&#xff0c;旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求&#xff0c;旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…...

代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II

108. 冗余连接 题目链接&#xff1a;KamaCoder 文档讲解&#xff1a;代码随想录 状态&#xff1a;AC Java代码&#xff1a; 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”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案&#xff0c;该方案可用于长期和中期的高级推理&#xff0c;与传统的狭窄自上而下的逐步收集相比&#xff0c…...

TCP/IP原理详细解析

前言 TCP/IP是一种面向连接&#xff0c;可靠的传输&#xff0c;传输数据大小无限制的。通常情况下&#xff0c;系统与系统之间的http连接需要三次握手和四次挥手&#xff0c;这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...

Microsof Visual Studio Code 安装教程(中文设置)

VS Code 是一个免费的代码编辑器&#xff0c;可在 macOS、Linux 和 Windows作系统上运行。启动和运行 VS Code 既快速又简单。VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由Microsoft 推出的免费、开源、跨平台的代码编辑器&#xff0c;拥有强大的功能和灵活…...

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&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世…...

linux 软件安装(上)

一、基础环境准备 1.1、安装VM 1.2、在VM上导入linux iso镜像&#xff0c;装好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时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…...

QT系列教程(20) Qt 项目视图便捷类

视频连接 https://www.bilibili.com/video/BV1XY41127t3/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 Qt项目视图便捷类 Qt项目视图提供了一些便捷类&#xff0c;包括QListWidget, QTableWidget&#xff0c; QTreeWidget等。我们分别介绍这几个便捷类。 我们先创建一个Qt …...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...