高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何

  • 基本问题
  • 对极约束
    • 对极约束推导过程
  • 本质矩阵
    • 八点法
      • 八点法推导过程
      • 本质矩阵$\ E$的SVD分解
  • 单目SLAM的一些问题
    • 尺度不确定性
    • 纯旋转问题

基本问题

当相机为单目时,只知道2D的像素坐标,根据两组2D点估计相机的运动,用对极几何来解决。

对极约束

两个相机之间的变换为T12\ T_{12} T12​:p1=T12⋅p2\ p_1=T_{12}·p_2 p1​=T12​⋅p2​,即:通过P2\ P_2 P2​的坐标乘以T12\ T_{12} T12​,即可求得P1\ P_1 P1​的坐标 。
 
  在实践中:

  • 已知:匹配点对p1\ p_1 p1​,p2​\ p_2​ p2​​的像素坐标。
  • 给定:两张二维图像,二维图像上特征点的匹配关系。
  • 未知:P的三维空间坐标,I1\ I_1 I1​到I2\ I_2 I2​​的变换矩阵(T12\ T_{12} T12​, 即R,T\ {R,T} R,T)。
  • 一般是用于单目SLAM的初始化,用对极几何可求出位姿,在用三角测量估计三维空间点的位置后,就能用其他更准确的方法继续求解了。

对极约束推导过程

设P在图1的相机坐标系下,坐标为:P=[X,Y,Z]TP=[X,Y,Z]^TP=[X,Y,Z]T
  p1​\ p_1​ p1​​,p2​\ p_2​ p2​​的像素坐标(单位像素):s1p1=KP,s2p2=K(RP+t)s_1p_1=KP,s_2p_2=K(RP+t)s1​p1​=KP,s2​p2​=K(RP+t)
    K​\ K​ K​为相机的内参矩阵,R,t​\ R,t​ R,t​为两个坐标系的相机运动。
  使用齐次坐标,上式乘以非零常数都成立:p1=KP,p2=K(RP+t)p_1=KP,p_2=K(RP+t)p1​=KP,p2​=K(RP+t)
  其归一化平面坐标(单位米):x1=K−1p1,x2=K−1p2x_1=K^{-1}p_1,x_2=K^{-1}p_2x1​=K−1p1​,x2​=K−1p2​
  得到:x2=Rx1+tx_2=Rx_1+tx2​=Rx1​+t
  这里的x1,x2\ x_1,x_2 x1​,x2​是齐次坐标,等式表达了一个齐次关系。

两边同时左乘t\ t t^,即:两侧同时与t\ t t做外积,即,与t\ t t作叉乘:t×x2=t×Rx1+t×tt×x_2=t×Rx_1+t×tt×x2​=t×Rx1​+t×t
  t\ t t与t\ t t作叉乘,夹角为0,则结果为0,即:t×t=0\ t×t=0 t×t=0,上式化简为:t×x2=t×Rx1t×x_2=t×Rx_1t×x2​=t×Rx1​
  两侧同时左乘x2T\ x_2^T x2T​:x2Tt×x2=x2Tt×Rx1x_2^Tt×x_2=x_2^Tt×Rx_1x2T​t×x2​=x2T​t×Rx1​
  左式中,t×x2\ t×x_2 t×x2​是一个与t\ t t 和 x2\ x_2 x2​都垂直的向量,把它再和x2\ x_2 x2​做内积时,将得到0。

所以得到对极约束,x1,x2为归一化坐标\ x_1,x_2为归一化坐标 x1​,x2​为归一化坐标:x2Tt×Rx1=0x_2^Tt×Rx_1=0x2T​t×Rx1​=0
  重新带入p1,p2\ p_1,p_2 p1​,p2​,p1,p2为像素坐标\ p_1,p_2为像素坐标 p1​,p2​为像素坐标:p2TK−Tt×RK−1p1=0p_2^TK^{-T}t×RK^{-1}p_1=0p2T​K−Tt×RK−1p1​=0
  上面两式子为对极约束,几何意义是:O1,P,O2\ O_1,P,O_2 O1​,P,O2​三者共面。

定义本质矩阵E\ E E(Essential Matrix)和基础矩阵F\ F F(Fundamental Matrix):E=t×R,F=K−TEK−1E=t×R,F=K^{-T}EK{-1}E=t×R,F=K−TEK−1
  所以对极约束简写为:x2TEx1=p2TFp1=0x_2^TEx_1=p_2^TFp_1=0x2T​Ex1​=p2T​Fp1​=0
  根据对极约束,相机位姿估计问题变为以下两步,即估计R,t\ R,t R,t的方法为:

1.根据匹配点的位置,求出E\ E E或者F\ F F。

2.根据E\ E E或者F\ F F,求出R,t\ R,t R,t。

本质矩阵

本质矩阵长什么样子:
    · E=t×R\ E=t×R E=t×R,E\ E E是一个3×3的矩阵,内有9个未知数。

· E\ E E在不同尺度下是等价的(E\ E E具有尺度等价性):由于对极约束是等式为零的约束,所以对E\ E E乘以任意非零常数后,对极约束依然满足。

· 平移和旋转各有3个自由度,所以 t×R\ t×R t×R共6个自由度。由于E\ E E具有尺度等价性,这是由于对极约束 的性质,其乘任意非零向量依然满足,即增加一个约束条件,所以6个自由度中可以去掉一个, 所以E\ E E实际有5个自由度。

八点法

· E\ E E具有5个自由度,最少使用5对点来求解E\ E E。但是,E\ E E具有一种非线性性质,在求解线性方程时会很麻烦。
  · 把E\ E E当成一个3×3的普通矩阵,共9个自由度,由于E\ E E的尺度等价性,E\ E E具有8个自由度,使用8对点来估计E\ E E,这就是“八点法”。

八点法推导过程

一对匹配点,它们的归一化坐标为x1=[u1,v1,1]T,x2=[u2,v2,1]T\ x_1=[u_1,v_1,1] ^ T,x_2=[u_2,v_2,1]^T x1​=[u1​,v1​,1]T,x2​=[u2​,v2​,1]T,根据对极约束,有:
[u1,v1,1][e1e2e3e4e5e6e7e8e9][u2v21]=0[u_1,v_1,1] \left[ \begin{matrix} e_1 & e_2 & e_3 \\ e_4 & e_5 & e_6 \\ e_7 & e_8 & e_9 \end{matrix} \right] \left[ \begin{matrix} u_2 \\ v_2 \\ 1 \end{matrix} \right]=0[u1​,v1​,1]⎣⎡​e1​e4​e7​​e2​e5​e8​​e3​e6​e9​​⎦⎤​⎣⎡​u2​v2​1​⎦⎤​=0
把E\ E E展开,写成向量的形式:
e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]Te=[e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9]^Te=[e1​,e2​,e3​,e4​,e5​,e6​,e7​,e8​,e9​]T
把对极约束写成与e\ e e有关的线性形式:
[u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]e=0[u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1]e=0[u1​u2​,u1​v2​,u1​,v1​u2​,v1​v2​,v1​,u2​,v2​,1]e=0
同理,对于其他店对也有相同的表示。把所有点都放在一个方程中,变成线性方程组(ui,vi\ u^i,v^i ui,vi表示第i\ i i个特征点):
[u11u21u11v21u11v11u21v11v21v11u21v211u12u22u12v22u12v12u22v12v22v12u22v221...........................u18u28u18v28u18v18u28v18v28v18u28v281][e1e2e3e4e5e6e7e8e9]=0\left[ \begin{matrix} {u_1}^1{u_2}^1&{u_1}^1{v_2}^1&{u_1}^1&{v_1}^1{u_2}^1&{v_1}^1{v_2}^1&{v_1}^1&{u_2}^1&{v_2}^1&1\\ {u_1}^2{u_2}^2&{u_1}^2{v_2}^2&{u_1}^2&{v_1}^2{u_2}^2&{v_1}^2{v_2}^2&{v_1}^2&{u_2}^2&{v_2}^2&1 \\ ...&...&...&...&...&...&...&...&...\\ {u_1}^8{u_2}^8&{u_1}^8{v_2}^8&{u_1}^8&{v_1}^8{u_2}^8&{v_1}^8{v_2}^8&{v_1}^8&{u_2}^8&{v_2}^8&1 \end{matrix} \right]\left[ \begin{matrix} e_1 \\ e_2 \\ e_3 \\ e_4 \\ e_5 \\ e_6 \\ e_7 \\ e_8 \\ e_9 \end{matrix} \right]=0⎣⎢⎢⎡​u1​1u2​1u1​2u2​2...u1​8u2​8​u1​1v2​1u1​2v2​2...u1​8v2​8​u1​1u1​2...u1​8​v1​1u2​1v1​2u2​2...v1​8u2​8​v1​1v2​1v1​2v2​2...v1​8v2​8​v1​1v1​2...v1​8​u2​1u2​2...u2​8​v2​1v2​2...v2​8​11...1​⎦⎥⎥⎤​⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​e1​e2​e3​e4​e5​e6​e7​e8​e9​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​=0
由上式可以求得E\ E E,根据E\ E E求取相机的运动R,t\ R,t R,t。

本质矩阵E\ E E的SVD分解

根据E\ E E求取相机的运动R,t\ R,t R,t,对E\ E E进行奇异值分解(SVD\ SVD SVD):
  设E\ E E的SVD分解为:
E=UΣVTE=U\Sigma{V^T} E=UΣVT
  其中 U,V\ U,V U,V为正交阵,Σ\ \Sigma Σ为奇异值矩阵。根据本质矩阵E\ E E的内在性质,E\ E E的奇异值必定为[σ,σ,0]T\ [\sigma,\sigma,0]^T [σ,σ,0]T, 所以Σ=diag[σ,σ,0]\ \Sigma=diag[\sigma,\sigma,0] Σ=diag[σ,σ,0]

在SVD\ SVD SVD分解中,对于任意一个E\ E E,存在两个可能的t,R\ t,R t,R与它对应:
t1Λ=URZ(π2)ΣUT,R1=URZT(π2)VTt_1^{\Lambda}=UR_Z(\frac{π}{2}){\Sigma}U^T,R_1=UR_Z^T(\frac{π}{2})V^Tt1Λ​=URZ​(2π​)ΣUT,R1​=URZT​(2π​)VT
t2Λ=URZ(−π2)ΣUT,R2=URZT(−π2)VTt_2^{\Lambda}=UR_Z(-\frac{π}{2}){\Sigma}U^T,R_2=UR_Z^T(-\frac{π}{2})V^Tt2Λ​=URZ​(−2π​)ΣUT,R2​=URZT​(−2π​)VT
 其中RZT(π2)\ R_Z^T(\frac{π}{2}) RZT​(2π​)表示沿Z\ Z Z轴旋转90∘\ 90^\circ 90∘得到的旋转矩阵。

由于−E\ -E −E和E\ E E等价,所以任意一个t\ t t取负号,也会得到相同的结果。因此,从E\ E E分解到t,R\ t,R t,R时,一共存在4个可能的解。
(1)P\ P P在O1,O2\ O_1,O_2 O1​,O2​两个相机的前面,深度都为正。
(2)P\ P P在O1,O2\ O_1,O_2 O1​,O2​两个相机的后面,深度都为负。
(3)P\ P P在O1\ O_1 O1​相机的后面,深度为负;在O2\ O_2 O2​相机的前面,深度为正。
(4)P\ P P在O1\ O_1 O1​相机的前面,深度为正;在O2\ O_2 O2​相机的后面,深度为负。

单目SLAM的一些问题

尺度不确定性

t的尺度不确定性。t是平移向量,对t乘任意倍数,对极约束依然成立。
  这说明把地图和轨迹同时缩放任意倍,得到的观测值仍然是一样的。图7-7中,P,O1,O2\ P,O_1,O_2 P,O1​,O2​点同时缩放任意倍,p1,p2\ p_1,p_2 p1​,p2​点不变。

纯旋转问题

若是纯旋转,t为0,而E=t×R\ E=t×R E=t×R,则E为0,无法求解R。
  单目初始化不能只有旋转,必须要有平移。

高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何相关推荐

  1. 视觉SLAM⑦---视觉里程计Ⅰ(特征点法、2D-2D对极几何)

    目录 7.0 本章主要目标 7.1 特征点法 7.1.1 特征点 7.1.2 ORB特征 7.1.3 特征匹配 7.2 实践:特征提取和匹配 7.2.1 OpenCV的ORB特征 7.2.2 手写OR ...

  2. 视觉SLAM十四讲学习笔记1——视觉里程计

    一.基础概念 1.按照相机的工作方式,我们把相 机分为单目(Monocular).双目(Stereo)和深度相机(RGB-D)三个大类. 2.照片,本质上是拍照时的场景(Scene),在相机的成像平面 ...

  3. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  4. VO:简单的视觉里程计代码注释(代码可运行)

    走完SLAM十四讲前端之后,代码都已经注释完,但还是感觉有点迷茫,所以专门参考冯兵的博客,实现简单的视觉里程计. 收获是又重新认识到了C++基础的薄弱,决定之后的晚上要刷牛客题.不过就SLAM前端而言 ...

  5. 高博14讲:第七讲中g20报错

    高博14讲:第七讲中g20 3d3d 3d2d 报错的改动 原因:g2o版本更新引起的错误修改 3d3d报错: /home/yk/桌面/slambook-master/ch7/pose_estimat ...

  6. 高博14讲--第三讲 三维空间刚体运动

    高博14讲--第三讲 三维空间刚体运动 旋转矩阵 点和向量.坐标系 坐标系间的欧式变换 变换矩阵与齐次坐标 旋转向量和欧拉角 旋转向量 欧拉角 四元数 四元数的定义 四元数的运算 用四元数表示旋转 四 ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  8. 【slam十四讲第二版】【课本例题代码向】【第七讲~视觉里程计Ⅱ】【使用LK光流(cv)】【高斯牛顿法实现单层光流和多层光流】【实现单层直接法和多层直接法】

    [slam十四讲第二版][课本例题代码向][第七讲~视觉里程计Ⅱ][使用LK光流(cv)][高斯牛顿法实现单层光流和多层光流][实现单层直接法和多层直接法] 0 前言 1 使用LK光流(cv) 1.1 ...

  9. 视觉SALM十四讲学习笔记——第七讲 视觉里程计(1)

    视觉里程计这一部分的第一个主要内容是ORB特征点的提取与匹配.这里主要关注两个内容: (1)特征点的匹配方法及代码实现 (2)ORB特征点的BRIEF描述子如何实现旋转不变性及在示例代码中的体现 1. ...

最新文章

  1. 如何使用IMPORT关键字读取ABAP cluster表里的数据到ABAP内表
  2. Unity SRP自定义渲染管线 -- 1.Custom Pipeline
  3. 二叉树祖先节点_二叉树的祖先
  4. SVN-关于分支创建合并
  5. python-turtle库的基本操作
  6. 服务器向客户机发信息,服务器如何主动给客户端发消息
  7. MySQL在Windows和Linux减少数据库
  8. 如何正确地开启Facebook广告营销大门?
  9. Oracle触发器3-DDL触发器
  10. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件
  11. 水桶平分 java_关于java:桶排序算法代码问题
  12. 百度区块链 xuperchain 如何剪枝 裁剪区块
  13. 2008评估过期 server sql_sql server 2008 评估期过期处理
  14. 语音信号预处理1——chirp信号的生成与接收
  15. exfat默认配置大小_如何分配U盘exFAT格式单元大小保证速度和空间呢
  16. 代数拓扑笔记(1) —— 胞腔复形
  17. 如何利用python爬取豆瓣250排行电影
  18. [漏洞分析] CVE-2021-3560 PolKit条件竞争本地提权分析
  19. 【英语】maintext2-Emotional Mastery译文
  20. Python有趣|数据分析三板斧

热门文章

  1. (基于matlab自写代码)语音信号的线性预测
  2. project2010根据法定节假日更改工作时间
  3. 美与物理学(杨振宁)
  4. 风口上的低代码:诱人的故事,危险的豪赌
  5. 下载Linux ISO镜像的方法 (带你快速了解)
  6. python 搜索功能_怎么python检索Twitter搜索功能?
  7. 云计算机是什么原理,云电脑的运行原理是什么?
  8. SpringAMQP发送与接收消息
  9. js动画和css3动画的差异性
  10. 途牛:一直被唱衰,就是没倒下