E=[T]×R 的证明

一、简介

最清晰、最短、最本质 的推导,解释为什么:

二、为什么 E = [T]× R?(严格数学推导)

给定两个相机:

  • 第一相机坐标系:C₁

  • 第二相机坐标系:C₂

  • 第二相机相对第一相机的姿态:

    • 旋转:R

    • 平移:T

3D 点 X在两个相机的成像点满足:

几何约束:点、极线、极平面

三、Matlab 测试

计算本质矩阵E

cpp 复制代码
%% 随机生成一个旋转矩阵 R
[U,~,V] = svd(randn(3,3));
R = U*V';

% 确保 det(R)=1
if det(R)<0
    U(:,3) = -U(:,3);
    R = U*V';
end

%% 随机平移 T(非零)
T = randn(3,1);
T = T / norm(T);

%% 构造叉乘矩阵 [T]×
Tx = [  0   -T(3)   T(2);
       T(3)   0    -T(1);
      -T(2)  T(1)    0 ];

%% 按理论构造本质矩阵 E
E = Tx * R;

disp('E = [T]x R =');
disp(E)
cpp 复制代码
%% ====== 数值验证:x2^T E x1 = 0 ======
% 随机生成空间 3D 点
X = randn(3,20);

% 第一相机投影
x1 = X ./ X(3,:);

% 第二相机投影:x2 = R*X + T
X2 = R * X + T;
x2 = X2 ./ X2(3,:);

% 验证 epipolar constraint
err = zeros(1,size(X,2));
for i = 1:size(X,2)
    err(i) = x2(:,i)' * E * x1(:,i);
end

disp('数值误差(应接近 0):');
disp(err);

fprintf('\n最大误差: %.3e\n', max(abs(err)));
E = [T]x R =
   -0.7750    0.5902   -0.1374
   -0.5141   -0.7866   -0.3197
    0.2064   -0.0104    0.0651

数值误差(应接近 0):
   1.0e-14 *

  列 1 至 11

   -0.0056   -0.0652         0   -0.3553    0.0333   -0.0444   -0.0111         0         0    0.0888   -0.0042

  列 12 至 20

   -0.0222   -0.0444    0.0444    0.0139   -0.1332         0   -0.0087         0   -0.1332


最大误差: 3.553e-15
相关推荐
CoovallyAIHub1 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub1 天前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub1 天前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞1 天前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕1 天前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub1 天前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉