本质矩阵 E 和基础矩阵 F 是立体视觉和多视图几何中最核心的两个矩阵,它们建立了两个相机图像之间对应点的几何约束关系。下面我将用图示思维 + 数学推导 + 应用场景的方式,一步一步为你讲清楚它们的本质、作用、生成方法和差异。
一、本质矩阵 E 和基础矩阵 F 的作用:一言以蔽之
E 和 F 矩阵都用来表达:左图中的某个像素点在右图中应该落在一条极线上。
即:
x₂ᵀ · E · x₁ = 0 (归一化相机坐标) x₂ᵀ · F · x₁ = 0 (图像像素坐标)
其中:
-
x1是左图中的点(列向量)
-
x2是右图中的点
-
E 用于归一化相机坐标,F 用于图像像素坐标
二、图示理解:极几何关系
在双目相机系统中:
左相机 右相机
o------------------o
↘ ↙
\ /
3D 点 P
-
P 是世界空间中的一个点
-
在左右相机图像上分别投影为点 x1和 x2
-
那么:给定 x₁,可以在右图中确定一条极线 e₂,x₂ 必定在这条极线上
这个极线的数学形式就是:
x₂ᵀ · F · x₁ = 0
这就是 F 的作用 —— 像素坐标空间中的几何约束
三、E 和 F 的区别与联系
比较 | 本质矩阵 E | 基础矩阵 F |
---|---|---|
坐标空间 | 归一化相机坐标系 | 图像像素坐标系 |
依赖内参 | ❌ 不包含相机内参 | ✅ 包含相机内参 |
是否用于真实图像 | ❌ 通常只用于内部估计 | ✅ 真正用于图像极线绘制与约束 |
用途 | 三维重建 / 相机姿态估计 | 图像对匹配 / 极线校正 |
计算来源 | E = [T]_× R | F = K⁻ᵀ · E · K⁻¹ |
四、矩阵生成方式
1️⃣ 本质矩阵 E 的计算方式:
假设右相机相对于左相机的姿态为:
-
R:旋转矩阵
-
T:平移向量
那么,公式:
E=[T]×R
其中 [T]× 是平移向量 T 的反对称矩阵,表示叉乘操作:
然后与旋转矩阵相乘得 E。
2️⃣ 基础矩阵 F 的计算方式:
基础矩阵将本质矩阵“转移”到图像像素坐标空间:
其中:
-
KL:左相机内参矩阵
-
KR:右相机内参矩阵
因此,F 是通过 E 和左右相机的内参推导出来的。
五、常见用途对比
场景 | 用到的矩阵 | 作用 |
---|---|---|
极线校正 | F | 给定左图点,计算右图极线 |
三维重建 | E | 恢复相机姿态 R/T |
自动特征匹配(RANSAC) | F | 匹配点对剔除错误匹配 |
三角测量(triangulation) | E | 从点对反推3D坐标 |
cv::findFundamentalMat() | 估计 F | 从点对估计极线约束 |
cv::findEssentialMat() | 估计 E | 从点对估计 R、T |
cv::recoverPose() | 分解 E → R, T | 得到相对位姿 |