对于这三个矩阵还有坐标系什么的真是看了忘,忘了看,今日索性一次性将它记下来,下次再忘的时候翻看一下就行了。
相机成像原理
如果直接将胶片放置在物体前面,由于光的折射,反射等等现象,在胶片上是成不了像的。但是在物体和胶片之间放上一块挡板,挡板上有一个小孔,它阻挡了大部分的光线,就将这个屏障上的小孔称之为光圈,胶片上就获得了倒立的图像。但是,这个小孔成像存在一个问题,就是,光圈越小曝光时间越长,形成高亮度的图像,,而且太小了,就会产生光的衍射现象,图像也模糊了,光圈大虽然曝光时间短了,可图像变模糊了。对于这样子的相机来进行实时的特征提取等等显然是行不通的,所以就有了透镜系统。在光圈之前加凸透镜,众所周知,凸透镜具有聚焦的功能,这样,成像的速度加快了许多,只需要差不多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的系数。可以对其进行证明(两点的叉乘表达一条直线),直线的方程可以表示为,所以该直线可以用向量进行表示。e2是光心O1在第二帧上的投影,假设光心O1的齐次坐标为,转到光心O2的坐标为,将O2投影到相机平面,则e2的坐标为,q的齐次坐标为。又因为所以直线qe2可以表示为,由于这里p和q的坐标都用齐次坐标表示,那么(这里的"="是在相差尺度系数的情况下成立的):
设和是归一化平面的坐标,所以:
,
(1)
所以,又因为q在直线上,那么,
由于K是3*3的矩阵,[R|t]是4*4的矩阵,将K进行扩展第4行第4列为1之外,第四列的其他值均为0,所以对于[R|t]来说,t的值已经对结果没有影响了,所以上式就变成,将代入,得:
又有,所以
且。
方法二:
将(1)式叉乘t,可以得到:,再将其乘以,由于是一个与t和x2都垂直的向量,所以左边为0,有;
,代入p,q,得,综上所述:
,
基本矩阵F的求解
由于,F的秩为2(原因是因为的秩为2),自由度为7(尺度等价性),使用直接线性变换8点法来进行计算。具体推导出来的就不写了,直接得出,A是一个8*9的矩阵,就是将F矩阵展开的向量。
A中的一行为:,一共需要8组匹配点
为:
计算过程:
(1)构造得到;
(2)对A进行SVD分解。由于A的秩是8(忽略特征点在同一个平面上的情况),那么它的对角矩阵的值为,而,右乘得到(U和V都是正交矩阵,转置就是它的逆),其列向量形式为:
求得的刚好是Af=0,为了求得F只要取V的最后一列就能构造了。
(3)但是,从上面构造的F可能是满秩的,所以需要进一步的求解,将上面构造的F进行SVD分解,,现在求得的值应该是有三个大于0的数,由于秩为2,应该将最后一个特征值置为0,为:
最终的F就等于最后一个特征值置为0对角矩阵乘以U和V,为。
本质矩阵E的求解及分解
可以通过基本矩阵F得到本质矩阵E,,也可以通过构造和基本矩阵一样的八点法来得到。由于,t有3个自由度,R也有3个自由度,那么它应该有6个自由度,又因为E的尺度等价性,所以E只有5个自由度。
对E进行奇异值分解相当于对与的乘积进行分解,乘积奇异值分解有个性质是任何一个矩阵A与正交矩阵相乘,其奇异值保持不变,证明:
由于奇异值是通过计算的特征值得到的,那么,所以奇异值不变。
设,
由于为反对称矩阵,可以证明任意的反对称矩阵都可以用来表示,又有:
所以,则本质矩阵就可以写成(根据尺度等价性,k可以去掉),那么,这就可以说明E的奇异值为何是的形式了。
知道了E的SVD分解形式,R和t也可以相应的分解出来,E和-E是等价的,所以R和t存在两组解:
,
,
最后只要把任意一点带入4种解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的了。
总结
先就写这些吧,之后遇到什么不会或是容易忘记的再补充。
参考资料
《视觉SLAM十四讲》 高翔
《矩阵分析与应用》 张贤达