美文网首页
基本矩阵F与本质矩阵E的分析与计算

基本矩阵F与本质矩阵E的分析与计算

作者: 小幸运Penny | 来源:发表于2019-04-18 21:23 被阅读0次

对于这三个矩阵还有坐标系什么的真是看了忘,忘了看,今日索性一次性将它记下来,下次再忘的时候翻看一下就行了。

相机成像原理

如果直接将胶片放置在物体前面,由于光的折射,反射等等现象,在胶片上是成不了像的。但是在物体和胶片之间放上一块挡板,挡板上有一个小孔,它阻挡了大部分的光线,就将这个屏障上的小孔称之为光圈,胶片上就获得了倒立的图像。但是,这个小孔成像存在一个问题,就是,光圈越小曝光时间越长,形成高亮度的图像,,而且太小了,就会产生光的衍射现象,图像也模糊了,光圈大虽然曝光时间短了,可图像变模糊了。对于这样子的相机来进行实时的特征提取等等显然是行不通的,所以就有了透镜系统。在光圈之前加凸透镜,众所周知,凸透镜具有聚焦的功能,这样,成像的速度加快了许多,只需要差不多0.01秒。

对极约束

当相机为单目的时候,只知道2D的像素坐标,需要通过两视图来估计相机的运动。假设从两张图像中得到了一对匹配好的特征点,如果有若干对这样的匹配点,就可以通过这些二维图像点之间的对应关系,恢复出两帧之间摄像机的运动。两视图的对极几何约束可以用基本矩阵F表示,那么如何得到这个矩阵呢?

对极几何约束

首先说明一些术语,O1和O2称为光心,O1、O2和P构成的平面称为极平面,p和e1,q和e2称为极线,e1和e2为O1和O2与像素平面的交点称为极点。可以知道的是由于他们都在同一平面上,所以q点的投影必然在pe1这条极限上,而同理p的投影也必然在qe2上(针对于像素平面)。矩阵F表示了第一帧的像素点p与第二帧的像素点q极线之间的映射关系。如何得到F和E,有以下两种方法:

方法一:

这里需要引用两个点的齐次坐标叉乘能够表达一条直线l的系数。可以对其进行证明(两点的叉乘表达一条直线),直线的方程可以表示为ax+by+c=0\implies (a,b,c)^T(x,y,1),所以该直线可以用向量l=(a,b,c)^T进行表示。e2是光心O1在第二帧上的投影,假设光心O1的齐次坐标为(\mathbf 0,1)^T,转到光心O2的坐标为[R|t]O1=t,将O2投影到相机平面,则e2的坐标为e2=Kt,q的齐次坐标为(x2,y2,1)。又因为e2\times q=[e2]_\times q所以直线qe2可以表示为l=[e2]_\times  q,由于这里p和q的坐标都用齐次坐标表示,那么(这里的"="是在相差尺度系数的情况下成立的):

p=KP

q=K(RP+t)=K[R|t]P

x_1x_2是归一化平面的坐标,所以:

x_1=K^{-1}px_2=K^{-1}q

\implies x_2=Rx_1+t=[R|t]x_1              (1)

\implies q=K[R|t]K^{-1}p

所以l=[e_2]_\times K[R|t]K^{-1}p,又因为q在直线上,那么q^T[e_2]_\times K[R|t]K^{-1}p=0

由于K是3*3的矩阵,[R|t]是4*4的矩阵,将K进行扩展第4行第4列为1之外,第四列的其他值均为0,所以对于[R|t]来说,t的值已经对结果没有影响了,所以上式就变成l=[e_2]_\times KRK^{-1}p,将e2=Kt代入,得:

F=[e_2]_\times KRK^{-1}=[Kt]_\times  KRK^{-1}

又有[x]_\times M=M^{-T}[M^{-1}x]_\times ,所以F=[Kt]_\times  KRK^{-1}=K^{-T}[K^{-1}Kt]_\times  RK^{-1}=K^{-T}[t]_\times  RK^{-1}

q^TFp=0

方法二:

将(1)式叉乘t,可以得到:[t]_\times x_2=[t]_\times Rx_1,再将其乘以x_2,由于[t]_\times x_2是一个与t和x2都垂直的向量,所以左边为0,有;

x_2[t]_\times Rx_1=0,代入p,q,得q^Tk^{-T}[t]_\times RK^{-1}p=0,综上所述:

E=[t]_\times RF=K^{-T}[t]_\times RK^{-1}

基本矩阵F的求解

由于q^TFp=0,F的秩为2(原因是因为[t]_\times 的秩为2),自由度为7(尺度等价性),使用直接线性变换8点法来进行计算。具体推导出来的就不写了,直接得出Af=\mathbf0,A是一个8*9的矩阵,f就是将F矩阵展开的向量。

A中的一行为:(x_1x_2,x_1y_2,x_1,y_1x_2,y_1y_2,y_1,x_2,y_2,1),一共需要8组匹配点

f为:f=(f_{11},f_{12},f_{13},f_{21},f_{22},f_{23},f_{31},f_{32},f_{33})^T

计算过程:

(1)构造得到Af=0;

(2)对A进行SVD分解。由于A的秩是8(忽略特征点在同一个平面上的情况),那么它的对角矩阵的值为\sigma _1\geq \sigma _2\geq ...\geq \sigma_8>0,而A=U\Sigma V^T,右乘V得到AV=U\Sigma (U和V都是正交矩阵,转置就是它的逆),其列向量形式为:

Av_i=\begin{cases}\sigma_iu_i,  &\quad i=1,...8\\0,   &\quad i=9\end{cases}

i=9求得的刚好是Af=0,为了求得F只要取V的最后一列就能构造了。

R=UWV^T(3)但是,从上面构造的F可能是满秩的,所以需要进一步的求解,将上面构造的F进行SVD分解,F=U\Sigma V^T,现在求得的\Sigma 值应该是有三个大于0的数,由于秩为2,应该将最后一个特征值置为0,为:

\Sigma =\begin{pmatrix}  \sigma _1 & 0&0\\ 0& \sigma_2 &0\\0 & 0 & \sigma_3 \end{pmatrix}\implies \Sigma  =\begin{pmatrix}  \sigma _1 & 0&0\\ 0& \sigma_2 &0\\0 & 0 & 0 \end{pmatrix}          

最终的F就等于最后一个特征值置为0对角矩阵乘以U和V,为F=U\Sigma V^T

本质矩阵E的求解及分解

可以通过基本矩阵F得到本质矩阵E,E=K^TFK,也可以通过构造和基本矩阵一样的八点法来得到。由于E=[t]_\times R,t有3个自由度,R也有3个自由度,那么它应该有6个自由度,又因为E的尺度等价性,所以E只有5个自由度。

对E进行奇异值分解相当于对[t]_\times R的乘积进行分解,乘积奇异值分解有个性质是任何一个矩阵A与正交矩阵相乘,其奇异值保持不变,证明:

由于奇异值是通过计算A^TA的特征值得到的,那么A^TA=[t]_\times ^T R^TR[t]_\times =[t]_\times ^T[t]_\times ,所以奇异值不变。

Z=\begin{pmatrix}  0 & -1&0\\ 1& 0&0\\0 & 0 & 0 \end{pmatrix}W=\begin{pmatrix}  0 &  -1&0\\ 1& 0&0\\0 & 0 & 1 \end{pmatrix}

由于[t]_\times 为反对称矩阵,可以证明任意的反对称矩阵都可以用S=kUZU^T来表示,又有:

Z=diag(1,1,0)W

所以[t]_\times =kUdiag(1,1,0)WU^T,则本质矩阵就可以写成E=kUdiag(1,1,0)WU^TR(根据尺度等价性,k可以去掉),那么V^T=WU^TR,这就可以说明E的奇异值为何是diag(\sigma,\sigma,0)的形式了。

知道了E的SVD分解形式,R和t也可以相应的分解出来,E和-E是等价的,所以R和t存在两组解:

[t]_\times =UZU^TR=UW^TV^T

[t]_\times =-UZU^TR=UWV^T

最后只要把任意一点带入4种解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的了。

总结

先就写这些吧,之后遇到什么不会或是容易忘记的再补充。

参考资料

《视觉SLAM十四讲》 高翔

《矩阵分析与应用》 张贤达

相关文章

  • 基本矩阵F与本质矩阵E的分析与计算

    对于这三个矩阵还有坐标系什么的真是看了忘,忘了看,今日索性一次性将它记下来,下次再忘的时候翻看一下就行了。 相机成...

  • 对极几何、单应矩阵

    F矩阵,E矩阵,H矩阵有什么关联性 E矩阵即本质矩阵,它表示了一对图像的对极约束关系且只与相机外参(角度、位移)有...

  • 基础矩阵、本质矩阵,单应矩阵及其解法

    本质矩阵,基础矩阵,单应矩阵,自由度及其解法基本矩阵、本质矩阵和单应矩阵基本矩阵的基本解法之8点算法单应矩阵与基础...

  • MSI数据之PCA

    PCA:主成分分析 首先对数据进行去中心化(矩阵X),再计算协方差矩阵(就是样本与样本[列与列]之间的协方差,就得...

  • 多维度分析框架BCG矩阵

    多维度分析框架BCG矩阵 多维度分析框架BCG矩阵--市场增长率–相对市场份额矩阵。 BCG矩阵以“市场吸引力”与...

  • 矩阵

    1. 线性方程组 2. 矩阵定义 3. 矩阵运算 矩阵的加法矩阵的加法 数与矩阵相乘数与矩阵相乘 矩阵与矩阵相乘矩...

  • NumPy Tips

    在机器学习领域中,NumPy是最基本的数据结构,用于存储矩阵和执行与矩阵计算相关的操作。本文主要分享关于NumPy...

  • OpenGL(3) —— OpenGL 的矩阵变换

    基本计算 向量之间的计算有 点积、叉积。矩阵之间的计算有加减、数乘、矩阵间乘法。 矩阵的缩放 位移 旋转 一个向量...

  • 音视频开发之旅(11) OpenGL ES矩阵变换与坐标系统

    目录 矩阵与矩阵变换 坐标系统 OpenGL的矩阵与矩阵变换 实践:平移、旋转、缩放、3D 资料 收获 一、矩阵与...

  • 关联矩阵与邻接矩阵 2018-11-27

    参考: 关联矩阵与邻接矩阵 1. 邻接矩阵 1.1 定义 设无向图 G=(V, E),其中顶点集 , 边集 ,用 ...

网友评论

      本文标题:基本矩阵F与本质矩阵E的分析与计算

      本文链接:https://www.haomeiwen.com/subject/bhxzwqtx.html