1.极限约束与本征矩阵

设世界坐标系中有一点ppp ,坐标为 XXX,它在左相机的图像坐标系为x1′x'_1x1′​像素坐标系为x1x_1x1​,在右相机中的图像坐标系为 x1′x'_1x1′​则x=Kx′x=Kx'x=Kx′其中KKK为相机的内参矩阵,如图1(图中的x1x_1x1​图像坐标系下的坐标,和公式的不同)设 ppp到两个相机光心垂直距离分别为 s1s_1s1​和s2s_2s2​,且两个相机有相同的内参矩阵KKK ,世界坐标系到两个相机坐标系的变换关系为 [R1,T1][R_1,T_1][R1​,T1​]和[R2,T2][R_2,T_2][R2​,T2​] ,根据相机成像原理我们可以得到下面两个等式:
s1x1=K(R1X+T1)s_1x_1=K(R_1X+T_1) s1​x1​=K(R1​X+T1​)s2x2=K(R2X+T2)s_2x_2=K(R_2X+T_2) s2​x2​=K(R2​X+T2​)
由于KKK是可逆的得到s1x1′=R1X+T1s_1x'_1=R_1X+T_1s1​x1′​=R1​X+T1​s2x2′=R2X+T2s_2x'_2=R_2X+T_2s2​x2′​=R2​X+T2​设世界坐标系的原点为相机1的相机坐标系则有s1x1′=Xs_1x'_1=Xs1​x1′​=Xs2x2′=R2X+T2s_2x'_2=R_2X+T_2s2​x2′​=R2​X+T2​
公式1带入公式2得到:s2x2′=s1R2x1′+T2s_2x'_2=s_1R_2x'_1+T_2s2​x2′​=s1​R2​x1′​+T2​
对上式两边同时叉乘T2T_2T2​ (叉乘方向为右手系垂直方向,大小为向量组成的平行四边形面积,向量叉乘自身为0)得到:
s2T2^x2′=s1T2^R2x1′s_2\widehat{T_2}x'_2=s_1\widehat{T_2}R_2x'_1s2​T2​​x2′​=s1​T2​​R2​x1′​
然后上式与x2′x'_2x2′​做内积得到(T2^x2′\widehat{T_2}x'_2T2​​x2′​方向垂直与x2′x'_2x2′​):
0=x2′T2^R2x1′0=x'_2\widehat{T_2}R_2x'_10=x2′​T2​​R2​x1′​
其中E=T2^RE=\widehat{T_2}RE=T2​​R 由上式可以看出空间中的同一点在两个相机的图象坐标系满足的关系,和空间中的坐标点以及点到相机的距离都没有关系。上式也被称为极线约束, EEE被称为本征矩阵。
然后通过5点法或者8点法求解 ,通过SVD求解 RRR,TTT 。通过SVD求解的RRR ,TTT 没有正负性需要正则化,所以尺度无法确定。

2. 三角化

求解到 RRR,TTT 后,由前面公式得到s2x2′=R2X+T2s_2x'_2=R_2X+T_2s2​x2′​=R2​X+T2​ ,公式中未知元素为 x2x_2x2​,xxx 两边对x2′x'_2x2′​ 做叉积消除s2s_2s2​ 得:x2′^R2X=−x2′^T2\widehat{x'_2}R_2X=-\widehat{x'_2}T_2x2′​​R2​X=−x2′​​T2​化为其次方程得:x2^[R2,T2][X,1]T=0\widehat{x_2}[R_2,T_2][X,1]^T=0x2​​[R2​,T2​][X,1]T=0然后用SVD分解法求解 XXX左侧0空间再把最后一个元素归一化到1求得xxx 然后把R,TR,TR,T开始的两个公式求得真实世界XXX。
这里实现了一个python版本的demo:sfm_python

三角测量(sfm 双视图重建)相关推荐

  1. SfM多视图三维点云重建--【VS2015+OpenCV3.4+PCL1.8】

    难点 在完成两视图三维重建之后,接下来就是进行多视图重建.多视图重建的难点在于如何确定第 i i i( i i i>2)个相机到世界坐标系的位姿变换矩阵. 两视图重建时,是将第一个相机所在的坐标 ...

  2. MVG学习笔记(5) --四视图几何和n视图重建

    四视图几何和n视图重建   可以使用基于张量的方法再进行一步,并定义四个视图中可见的四焦点张量相关实体. 然而这种方法很少使用,因为计算符合其内部约束的四焦点张量的相对困难.   然而,它确实提供了基 ...

  3. 【多视图几何】TUM 课程 第6章 多视图重建

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  4. 【论文阅读】NEF:用于从多视图重建 3D 参数曲线的神经边缘场

    [论文阅读]NEF:用于从多视图重建 3D 参数曲线的神经边缘场 摘要 一.引言 二.相关工作 三.方法 3.1 重建 3D 边缘点 3.1.1 预备知识 3.1.2 神经边缘场 3.1.3 训练 N ...

  5. iOS:UIView的block函数实现转场动画---双视图

    使用UIView动画函数实现转场动画--双视图 + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView durati ...

  6. 分子预训练-双视图分子预训练

    Dual-view Molecule Pre-training 目录 Dual-view Molecule Pre-training 总结 一.Introduction 二.Method 三.Expe ...

  7. oracle 物化视图 重建,Oracle物化视图:创建最简单物化视图-开发技术

    SQL> create materialized view mv_testcf 2 as 3 select * from xiaotg.testcf; Materialized view cre ...

  8. 双视图特征点匹配———使用RANSAC法剔除误差点

    本文使用SIFT算法得到两张图的初始特征匹配集合,然后着重总结如何使用基于8点法的RANSAC法将匹配集合中的误差点(外点)剔除. 基础矩阵介绍 进行8点法之前首先需要知道基础矩阵的定义. 如图1-1 ...

  9. 线性代数回顾(多视图重建)

    目录 1 向量 1.1 点积(Dot product) 1.2 范数 1.3 叉积(Cross product) 2 矩阵 2.1 矩阵类型 2.2 矩阵运算 2.3 行列式.迹和零空间 3 线性变换 ...

最新文章

  1. Modern CSV中文版
  2. SAP TableControl 控制单个单元格输入
  3. vb.net2019- 串口serial port通信
  4. Boost:BOOST_ASSERT_MSG扩展的用法测试程序
  5. vue 按钮多次点击重复提交数据
  6. Codeforces 1065 E. Side Transmutations
  7. php百度语音合成,Drupal 与百度云语音合成(PHP SDK)的集成
  8. 中国水银矿石行业市场供需与战略研究报告
  9. 计算机控制实验2,计算机控制系统实验报告 (2)
  10. 语句乎?表达式乎?(Python/C)
  11. 微店的Flutter混合开发组件化与工程化架构
  12. Mybatis mapper代理开发方法实现增删改查
  13. 方法冲突_化解冲突,要避免用这 2 种方法
  14. 计算机绘图中有六种方法绘圆,圆的绘制教案
  15. Foxmail是什么邮箱?
  16. java读取地址栏参数(id=123name=xiaoxiao)
  17. cisco设备与基本操作
  18. 二次型相似对角化的原因
  19. STM32使用正点原子无线烧录器无线查看数据波形
  20. crmeb打通版开源微信公众号小程序商城框架源码

热门文章

  1. 使用PageInfo做分页时手动设置参数的实现方式
  2. MEDICAL IMAGE ANALYSIS文献跟踪
  3. python爬虫有什么实际作用-Python爬虫的作用与地位(附爬虫技术路线图)
  4. 计算机硬件发展里程碑,学术会议网-AEIC学术交流中心
  5. 【云原生之Docker实战】使用docker部署IT资产管理系统GLPI
  6. 昨天新买了一个耳麦,...
  7. 照片转3d模型_科技造假?3D打印的人像逼真到让人不敢相信!
  8. 考研数学一真题1987年-2022年所有历年真题及详解(高清无水印)
  9. Epass 1000的验证以及修改PIN码的JavaScript代码
  10. java通过framer生成word_framemarker导出word(含图片)