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)的真正规律
相关推荐
小O的算法实验室1 小时前
2025年JIM SCI2区,基于Q学习多目标粒子群算法+节能型分布式流水车间调度,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
YunchengLi1 小时前
【计算机图形学中的四元数】1/2 Quaternions for Computer Graphics
人工智能·算法·机器学习
重生之后端学习1 小时前
108. 将有序数组转换为二叉搜索树
数据结构·算法·深度优先
诸葛务农1 小时前
点云配准在人形机器人中的应用:ICP算法(1)
算法·机器学习·机器人
寻寻觅觅☆10 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
偷吃的耗子10 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
化学在逃硬闯CS11 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar12311 小时前
C++使用format
开发语言·c++·算法
Gofarlic_OMS12 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化