一句话定义
两台相机看同一场景时,一个图像点在另一图像中的候选位置被约束在一条直线上(极线),全部这类约束打包成一个 3×3 矩阵——相机内参已知的用本质矩阵 E,未知的用基本矩阵 F。
为什么重要
对极约束把「二维匹配」砍成「一维搜索」,是立体匹配与多视重建效率的来源;它同时是「两张图是否同一场景」的几何裁判——特征匹配通过 RANSAC 拟合 F,内点率高即判为真实对应,这是 SLAM 初始化与图像配对的标准流程。
直观类比
两台相机的光心像两只眼睛,目标点与两眼连线构成一个平面(对极平面);该平面与每张「视网膜」相交出一条直线(极线)。左手拇指固定一点,闭右眼再闭左眼,拇指在视野里「横跳」——跳动的轨迹就是不同视角下的极线。
前置知识
kp-010(投影方程、归一化坐标);kp-009(RANSAC 用于矩阵估计)。
核心概念
- 对极平面(Epipolar Plane):含两光心与空间点的平面。
- 极点(Epipole):另一相机光心在本图中的投影,即所有极线的公共交点。
- 极线(Epipolar Line):对极平面与像平面的交线。
- 本质矩阵 E:归一化坐标下的对极约束,含相对旋转 R 与平移 t,5 个自由度。
- 基本矩阵 F:像素坐标下的对极约束,E 与内外参的组合,7 个自由度。
- 八点法 / 五点法:线性(八点)或最小样本(五点)估计 E/F 的经典算法。
原理与机制
在归一化坐标系下,空间点 X 的两条投影射线共面,其混合积为零,整理即 x′ᵀ E x = 0:对任意真实对应,该式必须成立,反过来说 x 的所有合法对应 x′ 都落在 E x 定义的直线上。E 由相对位姿决定而不依赖场景内容;F 在 E 两端串上内参的换算,把约束直接搬到像素坐标。实际计算中先用 RANSAC 抽 8 对(或 5 对)匹配解矩阵初值,再联合内点精化;随后对 E 做奇异值分解即可恢复 R 与 t(存在四组解,需用「三角化深度必须为正」挑出唯一物理解)——这正是 SFM 与 SLAM 两视图初始化的完整链条。
公式与模型
对极约束: x′ᵀ F x = 0 (像素坐标)
E = [ t ]× · R (t 的叉积矩阵,秩 2,两个非零奇异值相等)
F = K′⁻ᵀ · E · K⁻¹ (K 为两图内参)
极线: l′ = F x,x 的对应点必在 l′ 上图示
实例与案例
立体匹配提速:无约束时右图搜索是二维窗口,施加极线(校正后为同一行)后变一维,kp-013 由此才可行。图像对验证:以图搜景时对候选对拟合 F,内点比例过阈值即认为同一场景,比逐点比对便宜得多。无人机相对定位:两帧匹配 → E → R、t,给出载机相对位移,是视觉里程计的核心一环。
import cv2
F, maskF = cv2.findFundamentalMat(pts1, pts2, cv2.FM_RANSAC, 1.0, 0.99)
E, maskE = cv2.findEssentialMat(pts1_n, pts2_n, K, cv2.RANSAC, 0.999, 1.0)
R1, R2, t = cv2.decomposeEssentialMat(E) # 四组解中再由三角化筛选常见误区
- E 与 F 不分:E 作用于归一化坐标,F 作用于像素坐标;把像素点喂给 E 约束毫无意义。
- 忽略归一化问题:八点法直接用原始像素坐标会数值病态,需先做 Hartley 归一化(平移缩放到均值 0、均方根 √2)。
- 认为 E 有 9 个自由度:尺度任意(−1)、秩 2 约束各去掉自由度,实际 5 个,这也是五点法存在的原因。
- 跳过深度校验:四组物理解中恰有一组使三角化点在两相机前方,凭匹配误差无法区分,必须三角化验证。
与其他知识点的关系
kp-013 用极线约束做一维视差搜索;kp-014 的 SFM/SLAM 初始化「匹配 → F/E → 位姿 → 三角化」整条链路在本站闭环;kp-009 的 RANSAC 是估计 F/E 的稳健层。
自测题
- 对极约束如何把匹配搜索从二维降到一维?
答案要点:x 的所有对应必在极线 F x 上,候选从整幅图缩为一条线;校正后该线与扫描行平行。
- E 与 F 的换算关系是什么?
答案要点:F = K′⁻ᵀ E K⁻¹,两端乘内参的逆把归一化坐标换算成像素坐标。
- 恢复相对位姿为何有四组解?如何挑选?
答案要点:E 的 SVD 与 t 的正负号产生 2×2 组合;对四组分别三角化,取所有点深度均为正的那组。
延伸阅读
- Hartley 与 Zisserman《Multiple View Geometry in Computer Vision》第 9 章「Epipolar Geometry」
- kp-013 看极线如何变成逐像素的深度图