E = Kᵀ F K 的数学原理

一、为什么需要从 F 得到 E?

若两台相机的内参矩阵分别是

  • K1:左相机

  • K2​:右相机

则基础矩阵与本质矩阵关系为:

  • F(基础矩阵) 工作在 像素坐标系(image coordinates)

  • E(本质矩阵) 工作在 归一化相机坐标系(camera normalized coordinates)

两者的区别是:

像素坐标需要使用内参矩阵 K 才能转成真实的几何光线方向。

符号 含义 维度
(F) 基础矩阵(像素坐标下 epipolar 几何) 3×3
(E) 本质矩阵(相机归一化坐标系下 epipolar 几何) 3×3
(K) 相机内参矩阵 3×3
(x, x') 像素坐标(齐次) 3×1
(\tilde{x}, \tilde{x}') 归一化坐标(投影到相机坐标系) 3×1

二、核心思想:像素坐标与归一化坐标的关系

像素坐标:

三、E = [T]× R 为什么必须在归一化空间?

通过几何可以得:

这个公式成立的前提是:

  • x1,x 必须表示为 3D 相机坐标系下的方向向量

  • 而不是像素坐标

像素坐标要转换:

E = Kᵀ F K 的更几何化推导(直观图)

cpp 复制代码
像素点 x1  --K^{-1}-->   归一化点 x̂1   --极几何-->   x̂2  --K-->  像素点 x2

极线约束在两个世界中都应该成立:

cpp 复制代码
pixel:           x2ᵀ F x1 = 0
normalized:      x̂2ᵀ E x̂1 = 0

因为

cpp 复制代码
像素坐标 = K * 归一化坐标

四、MATLAB 数值验证

下面的代码会:

  1. 随机生成 R、T

  2. 构造真实的本质矩阵 Etrue = [T]×R

  3. 假设内参 K

  4. 计算 F = K^{-T} Etrue K^{-1}

  5. 再恢复 Eest = Kᵀ F K

  6. 验证 Eest 是否等于 Etrue(在尺度内)

cpp 复制代码
%% 随机生成 R
[U,~,V] = svd(randn(3,3));
R = U*V';
if det(R)<0, R(:,3) = -R(:,3); end

%% 随机平移 T
T = randn(3,1);
T = T / norm(T);
%============================================================
%% 叉乘矩阵
Tx = [0 -T(3) T(2);
      T(3) 0 -T(1);
     -T(2) T(1) 0];

%% 真实本质矩阵
E_true = Tx * R;
%============================================================
%% 相机内参  自己设置的
K = [1000 0 320;
     0 1000 240;
     0    0   1];
%============================================================
%% 根据 E_true 构造 F
F = inv(K)' * E_true * inv(K);

%% 再根据 F 恢复 E
E_est = K' * F * K;

%% 归一化以比较
E_true = E_true / norm(E_true);
E_est  = E_est  / norm(E_est);


disp('真实 E :');
disp(E_true);

disp('恢复 E = K'' F K :');
disp(E_est);

disp('误差 = ');
disp(E_est - E_true);

五、总结

矩阵 坐标系 几何意义
F 像素坐标 两幅图像的极线关系
E 归一化相机坐标 相机相对姿态(R、T)的真正规律
相关推荐
Book思议-2 分钟前
【数据结构实战】循环队列FIFO 特性生成六十甲子(天干地支纪年法),实现传统文化里的 “时间轮回”
数据结构·算法·
im_AMBER13 分钟前
Leetcode 147 零钱兑换 | 单词拆分
javascript·学习·算法·leetcode·动态规划
zl_vslam28 分钟前
SLAM中的非线性优-3D图优化之IMU预积分SE3推导(二十一)
人工智能·算法·计算机视觉·3d
c++逐梦人29 分钟前
DFS经典例题(八皇后,数独)
算法·蓝桥杯·深度优先
进击的小头30 分钟前
第18篇:PID参数整定与裕度优化的现场调试实战
python·算法
cpp_250134 分钟前
P1796 汤姆斯的天堂梦
数据结构·c++·算法·题解·洛谷·线性dp
凌波粒38 分钟前
LeetCode--19.删除链表的倒数第 N 个结点(链表)
java·算法·leetcode·链表
Fcy64844 分钟前
与红黑树有关算法题
算法
爱搞虚幻的阿恺1 小时前
UE入门-如何使用结构体数组创建动态UI
算法
重生之我是Java开发战士1 小时前
【广度优先搜索】多源BFS:矩阵,飞地的数量,地图中的最高点,地图分析
数据结构·算法·矩阵·广度优先