You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于基础矩阵求解未标定双相机的相对旋转与平移方向

核心逻辑澄清

你当前计算的T = np.linalg.inv(H1) @ H2是第二张图像平面到第一张图像平面的单应变换矩阵,仅能描述像素点的映射关系,无法直接分解得到相机位姿。你需要的旋转信息、光心方向向量应该从基础矩阵F推导得到,具体步骤如下:


前置依赖说明

因为你使用同一台相机拍摄两帧图像,两帧的内参矩阵K完全一致。如果没有预先标定得到K,你只能得到投影空间下的位姿结果,无法拿到度量级的旋转角度和平移尺度,仅能确定平移的方向。

步骤1:从基础矩阵计算本质矩阵

本质矩阵E和基础矩阵F的关系如下:

E = K.T @ F @ K

步骤2:分解本质矩阵得到位姿候选解

直接调用OpenCV内置的分解接口即可得到所有可能的位姿组合:

# 返回两组旋转候选R1、R2,一组平移方向向量t
R1, R2, t = cv2.decomposeEssentialMat(E)

最终共得到4组可能的位姿组合:(R1, t)、(R1, -t)、(R2, t)、(R2, -t)

步骤3:筛选唯一正确的位姿

取任意一组匹配内点,对四组候选位姿分别做三角化计算3D点坐标,只有正确的位姿组合下,所有3D点在两个相机坐标系下的深度都为正值,以此规则即可筛选出最终的旋转矩阵R和光心方向向量t。

附:从单应矩阵T分解位姿的方法

如果你坚持要从当前计算的单应矩阵T提取信息,需要已知内参K,通过单应分解接口实现:

# 先将图像单应转相机平面单应
H_cam = np.linalg.inv(K) @ T @ K
# 分解单应得到多组R、t、法向量n的候选
retval, Rs, ts, normals = cv2.decomposeHomographyMat(H_cam, K)
# 同样通过三角化验证深度的方法筛选正确的R和t即可

注意该方法的精度远低于从本质矩阵分解的结果,不推荐使用。


内容的提问来源于stack exchange,提问作者Yulia Grinblat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:15:02