计算纯旋转相机下两图像间的单应性矩阵(Homography)

雨晨君_3948

雨晨君_3948

2026-09-02

758人浏览

原创

计算纯旋转相机下两图像间的单应性矩阵(Homography)

当相机仅绕光轴(Z轴)进行水平旋转(Pan)时,可通过相机内参矩阵与旋转矩阵的复合变换精确推导出两视图间的单应性矩阵 $ H $;其完整形式为 $ H = K \, R{21} \, K^{-1} $,其中 $ R{21} = R_2 R_1^\top $ 为相对旋转,$ K $ 为对角焦距矩阵——该公式自然统一确定所有9个元素,无需分段假设。

当相机仅绕光轴(z轴)进行水平旋转(pan)时,可通过相机内参矩阵与旋转矩阵的复合变换精确推导出两视图间的单应性矩阵 $ h $;其完整形式为 $ h = k \, r_{21} \, k^{-1} $,其中 $ r_{21} = r_2 r_1^\top $ 为相对旋转,$ k $ 为对角焦距矩阵——该公式自然统一确定所有9个元素,无需分段假设。

在纯旋转(无平移、无俯仰/翻滚或仅含绕Z轴的Pan)条件下,若两图像对应同一平面场景(如地面 Z=0),则它们之间存在严格的单应性映射关系。此时,单应性矩阵 $ H $ 并非简单由相对旋转矩阵 $ R_{21} = R_2 R_1^\top $ 截取前两列加第三列构成,也不是对其归一化后“补零”或“除以焦距”的经验拼接;正确且普适的表达式是:

$$ H = K \, R_{21} \, K^{-1} $$

其中:

  • $ K = \operatorname{diag}(f, f, 1) $ 是相机内参矩阵(假设主点在图像中心,无畸变);
  • $ R_1, R_2 $ 分别为第一帧和第二帧对应的全局旋转矩阵(例如由欧拉角 Z-Y-XZ-X-Z 构造);
  • $ R_{21} = R_2 R_1^\top $ 表示从视图1到视图2的相对旋转(即视图1坐标系下观察到的视图2朝向)。

✅ 关键洞察:即使 $ K $ 是对角阵,$ K R{21} K^{-1} $ 仍会耦合缩放效应——尤其影响第3列(即 $ H{02}, H_{12} $),这正是用户困惑中缺失的部分。错误地忽略 $ K $ 的左右作用,会导致平移项(即图像坐标系中的“偏置”)计算失准。

✅ Python 实现示例(基于问题参数)

import numpy as np
from scipy.spatial.transform import Rotation as R

# 参数设定
f = 400.0
pan1, pan2 = 10 * np.pi/180, 15 * np.pi/180

# 构造各自旋转(仅绕Z轴Pan,即纯水平旋转)
R1 = R.from_euler('z', pan1).as_matrix()  # 注意:scipy中'z'即Z轴
R2 = R.from_euler('z', pan2).as_matrix()
R21 = R2 @ R1.T  # 相对旋转

# 内参矩阵及其逆
K = np.diag([f, f, 1.0])
K_inv = np.linalg.inv(K)

# 正确的单应性矩阵
H = K @ R21 @ K_inv
H = H / H[2, 2]  # 归一化,使 H[2,2] == 1.0(齐次坐标惯例)

print("Computed H (K @ R21 @ K⁻¹):")
print(np.round(H, 6))

输出将高度接近 cv2.findHomography 的结果(浮点精度内一致),特别是关键的 $ H{02} $ 和 $ H{12} $ 元素(即最后一列前两项),它们表征了因旋转引起的图像中心偏移,完全由 $ K $ 的尺度变换决定,不可省略。

⚠️ 注意事项与常见误区

  • 勿混淆“世界到相机”与“图像到图像”变换
    单应性 $ H $ 描述的是同一平面点在两幅图像像素坐标间的映射 $ x_2 = H x_1 $,而非三维空间中的刚体变换。它隐含了平面假设(如 Z=0)和相机模型。

  • 焦距 $ f $ 不可设为1或忽略
    即使 $ K $ 对角,$ K R{21} K^{-1} $ 中的非对角缩放项(如 $ f \cdot R{21}[0,2]/f = R{21}[0,2] $)看似抵消,但第3列实际为: $$ \begin{bmatrix} f \cdot R{21}[0,0]/f & f \cdot R{21}[0,1]/f & f \cdot R{21}[0,2] \ f \cdot R{21}[1,0]/f & f \cdot R{21}[1,1]/f & f \cdot R{21}[1,2] \ R{21}[2,0] & R{21}[2,1] & R{21}[2,2] \end{bmatrix} \Rightarrow \begin{bmatrix} R{21}[0,0] & R{21}[0,1] & f \cdot R{21}[0,2] \ R{21}[1,0] & R{21}[1,1] & f \cdot R{21}[1,2] \ R{21}[2,0] & R{21}[2,1] & R{21}[2,2] \end{bmatrix} $$ 可见 $ H{02}, H_{12} $ 显式正比于 $ f $,直接决定图像平移量级。

  • 推广至一般旋转(含tilt/roll)
    只要场景平面仍为 Z=0(或任意已知平面 $ \Pi: n^\top X + d = 0 $),通用公式为: $$ H = K \left( R - \frac{t\,n^\top}{d} \right) K^{-1} $$ 纯旋转时 $ t = 0 $,退化为 $ H = K R K^{-1} $;而用户案例中因误用 $ R_{21} $ 未左乘 $ K $、右乘 $ K^{-1} $,导致第3列失准。

✅ 总结

  • 纯旋转下两图像的单应性矩阵必须通过 $ H = K\,R_{21}\,K^{-1} $ 严格计算;
  • 所有9个元素均由该式自然导出,无需分块猜测或经验修正;
  • 第3列($ H{02}, H{12} $)承载着旋转在图像平面上的平移效应,其大小与焦距 $ f $ 成正比;
  • 实践中建议始终显式构造 $ K $ 并执行完整矩阵乘法,避免因“对角假设”引入系统性偏差。

此方法兼具理论严谨性与工程可复现性,是SLAM、全景拼接及无人机正射校正等应用中处理纯旋转序列的基础工具。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

0

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

0

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

2026.09.21

0

17

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

2026.09.21

0

12

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

20

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

200

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

100

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.1万人学习