SLAM实战避坑指南:对极几何与极点极线推导——吃透零空间与对极约束

对极几何与极点极线推导梳理

1. 对极几何约束(Epipolar Constraint)推导

1.1 符号定义

符号 含义
PPP 世界坐标系下的三维点
p1,p2p_1,p_2p1,p2 像素坐标 (2D)
x1,x2x_1,x_2x1,x2 归一化平面坐标 (Normalized coords)
KKK 相机内参矩阵
R,tR,tR,t 相机2相对于相机1的旋转与平移
EEE 本质矩阵 (Essential Matrix)
FFF 基础矩阵 (Fundamental Matrix)

1.2 推导过程

  1. 投影方程

    d1p1=KP(1) d_1 p_1 = K P \qquad (1) d1p1=KP(1)

    d2p2=K(RP+t)(2) d_2 p_2 = K (R P + t) \qquad (2) d2p2=K(RP+t)(2)

  2. 归一化坐标

    消除内参 KKK,得到归一化坐标 x=K−1px = K^{-1} px=K−1p:

    d1x1=P(3) d_1 x_1 = P \qquad (3) d1x1=P(3)

    d2x2=RP+t(4) d_2 x_2 = R P + t \qquad (4) d2x2=RP+t(4)

  3. 消元与叉积

    将 (3) 代入 (4) 消去 PPP:

    d2x2=d1Rx1+t d_2 x_2 = d_1 R x_1 + t d2x2=d1Rx1+t

    两边左乘 t∧t^\wedget∧(反对称矩阵,表示叉乘 t×t \timest×):

    t∧d2x2=t∧d1Rx1+t∧t t^\wedge d_2 x_2 = t^\wedge d_1 R x_1 + t^\wedge t t∧d2x2=t∧d1Rx1+t∧t

    由于 t∧t=0t^\wedge t = 0t∧t=0,简化为:

    d2(t×x2)=d1(t×Rx1) d_2 (t \times x_2) = d_1 (t \times R x_1) d2(t×x2)=d1(t×Rx1)

  4. 点积归零

    两边左乘 x2Tx_2^Tx2T:

    d2x2T(t×x2)=d1x2T(t×Rx1) d_2 x_2^T (t \times x_2) = d_1 x_2^T (t \times R x_1) d2x2T(t×x2)=d1x2T(t×Rx1)

    左边 x2T(t×x2)=0x_2^T (t \times x_2) = 0x2T(t×x2)=0(叉乘结果垂直于原向量,点积为0),故:

    x2T(t∧R)x1=0 x_2^T (t^\wedge R) x_1 = 0 x2T(t∧R)x1=0

  5. 最终形式

    • 本质矩阵 :E=t∧RE = t^\wedge RE=t∧R,满足 x2TEx1=0x_2^T E x_1 = 0x2TEx1=0。
    • 基础矩阵 :F=K−TEK−1F = K^{-T} E K^{-1}F=K−TEK−1,满足 p2TFp1=0p_2^T F p_1 = 0p2TFp1=0。

2. 极点(Epipole)与极线(Epipolar Line)求解

2.1 几何定义

  • 极点 (e):另一个相机光心在当前图像上的投影。
  • 极线 (l):空间点所在的射线投影在图像上形成的直线。

2.2 极线求解

给定基础矩阵 F21F_{21}F21(从图1到图2的映射):

  • 图像1中的点 p1p_1p1图像2 中对应的极线 l2l_2l2:

    l2=F21p1 l_2 = F_{21} p_1 l2=F21p1

  • 图像2中的点 p2p_2p2图像1 中对应的极线 l1l_1l1:

    l1=F21Tp2 l_1 = F_{21}^T p_2 l1=F21Tp2

2.3 极点求解(核心)

极点满足:极点在其对应图像的极线上永远成立

求解图像1的极点 e1e_1e1
  • e1e_1e1 是相机2的光心投影。当图像1的点取 e1e_1e1 时,对应的极线在图像2中退化(过原点),即 F21e1=0F_{21} e_1 = 0F21e1=0。

  • 计算 :e1e_1e1 是 F21F_{21}F21 的右零空间(Null Space)。

    F21e1=0 F_{21} e_1 = 0 F21e1=0

求解图像2的极点 e2e_2e2
  • e2e_2e2 是相机1的光心投影。对于图像2中的任意极线 l2l_2l2,都有 e2Tl2=0e_2^T l_2 = 0e2Tl2=0。

    代入 l2=F21p1l_2 = F_{21} p_1l2=F21p1,得 e2TF21p1=0⇒(F21Te2)Tp1=0e_2^T F_{21} p_1 = 0 \Rightarrow (F_{21}^T e_2)^T p_1 = 0e2TF21p1=0⇒(F21Te2)Tp1=0。

  • 计算 :e2e_2e2 是 F21F_{21}F21 的左零空间

    F21Te2=0 F_{21}^T e_2 = 0 F21Te2=0

数值解法(SVD)

对 FFF 进行奇异值分解 F=UΣVTF = U \Sigma V^TF=UΣVT:

  • e1e_1e1 对应 VVV 的最后一列(对应最小奇异值0)。
  • e2e_2e2 对应 UUU 的最后一列(对应最小奇异值0)。

3. 区分 e1,e2,l1,l2e_1,e_2,l_1,l_2e1,e2,l1,l2 与 FFF 的对应关系

这是最容易混淆的部分,关键在于明确 FFF 的下标定义

3.1 核心原则

FABF_{AB}FAB 表示将图像 BBB 中的点映射到图像 AAA 中的极线。

极点 eAe_AeA 是"另一个相机(BBB)"在"图像 AAA"上的投影。

下标约定 :FABF_{AB}FAB 的下标 AAA 表示目标图像 (极线所在图像),BBB 表示源图像 (特征点所在图像)。因此 F21F_{21}F21 将图像1(源)中的点映射到图像2(目标)中的极线。

3.2 对照表

假设我们定义 F21F_{21}F21 (即方程 p2TF21p1=0p_2^T F_{21} p_1 = 0p2TF21p1=0):

对象 物理意义 数学表达 求解方程
p1p_1p1 图像1中的特征点 已知 --
p2p_2p2 图像2中的特征点 未知/已知 --
l2l_2l2 图像2中的极线 l2=F21p1l_2 = F_{21} p_1l2=F21p1 --
l1l_1l1 图像1中的极线 l1=F21Tp2l_1 = F_{21}^T p_2l1=F21Tp2 --
e1e_1e1 相机2 光心在图像1上的投影 图像1的极点 F21e1=0F_{21} e_1 = 0F21e1=0
e2e_2e2 相机1 光心在图像2上的投影 图像2的极点 F21Te2=0F_{21}^T e_2 = 0F21Te2=0

3.3 方向反转的情况

如果定义 F12F_{12}F12 (即方程 p1TF12p2=0p_1^T F_{12} p_2 = 0p1TF12p2=0),则所有关系反转:

对象 求解方程 (针对 F12F_{12}F12)
e1e_1e1 (图像1极点) F12Te1=0F_{12}^T e_1 = 0F12Te1=0
e2e_2e2 (图像2极点) F12e2=0F_{12} e_2 = 0F12e2=0

3.4 记忆口诀

  1. "点在矩阵右边" :如果 FFF 乘以 p1p_1p1 得到 l2l_2l2,那么 FFF 就是从1到2的映射(即 F21F_{21}F21)。

  2. "极点找零空间"(通用规则):

    • 对于基础矩阵 FijF_{ij}Fij(从图像 jjj 到图像 iii):
      • 图像 jjj 的极点 eje_jej 满足 Fijej=0F_{ij} e_j = 0Fijej=0(右零空间)
      • 图像 iii 的极点 eie_iei 满足 FijTei=0F_{ij}^T e_i = 0FijTei=0(左零空间)
    • 具体地(当使用 F21F_{21}F21 时):
      • 图像1的极点 e1e_1e1 :解 F21e1=0F_{21} e_1 = 0F21e1=0
      • 图像2的极点 e2e_2e2 :解 F21Te2=0F_{21}^T e_2 = 0F21Te2=0
  3. 物理验证 :极点一定是另一个相机光心 的位置。如果你算出来的 e1e_1e1 不在图像1上,或者位置不对,立刻检查 FFF 的定义方向。

相关推荐
大江东去浪淘尽千古风流人物4 小时前
【Polaris-VIO】Docker 镜像跨硬件分发的隐藏陷阱:AVX-512、-march=native 与 CPU 指令集解耦边界
运维·docker·容器·slam·vio·avx-512
kobesdu1 天前
【ROS2实战笔记-23】参数系统中的动态参数与远程加载安全剖析
笔记·安全·slam·ros2
slam与AI智能体2 天前
不依赖 IMU / 标定:VGGT-SLAM 回环检测的轻量化方案解析
深度学习·slam·回环检测·vggt
大江东去浪淘尽千古风流人物3 天前
【Flow4DGS-SLAM】动态环境3DGS-SLAM:光流引导自运动分解与混合4D Gaussian深度解析(CVPR 2026)
3d·slam·vio·光流·动态场景
元让_vincent4 天前
论文Review SLAM X-ICP | 面向极端退化环境的可定位性感知 LiDAR 配准方法
人工智能·分类·数据挖掘·slam·激光slam·退化检测·退化场景
kobesdu4 天前
反光柱定位算法实战02:纯反光柱定位——VEnus算法实际使用与代码原理综述
算法·slam·定位·反光柱
zi紫夕云7 天前
SO(3) 与 so(3) 的对应关系及案例
slam
研究点啥好呢10 天前
dji机器人SLAM算法工程师 面试题精选:10道高频考题+答案解析
c++·算法·机器人·slam·dji
放羊郎12 天前
VSLAM中如何去除动态目标
slam