最近在看论文的时候遇到了对极几何这个知识点,之前完全没有听到过,这里做一个补充学习。

什么是对极几何

如果仅看一个相机,我们并不能知道深度信息,可如果有两个相机的话(就像人有两只眼睛)我们就能得到深度的信息,用两个相机在不同的位置拍摄同一物体,如果两张照片中的景物有重叠的部分,我们有理由相信,这两张照片之间存在一定的对应关系,

所以要想获得二位图片的深度信息,需要通过两张及以上的图片进行多幅图片中对应点的匹配,然后通过一种方法进行计算深度得到,其中一种描述多视角图片深度关系的方法就是对极几何。

对极几何(Epipolar Geometry) - 图1

上图O和O’是两个相机中心,P点是物体所在,如果我们只看左边图像 对极几何(Epipolar Geometry) - 图2 上的点p,我们不能知道物体到底是在哪,点P1、P2或其他地方,可有了右边图像 对极几何(Epipolar Geometry) - 图3 上的p’我们就能得到物体点P

在上图,我们把两相机中心的连线OO’成为基线,把他们与观测物体的平面OO’P成为对极平面,对极平面与两相机图像的交线l和l’称为对极线,而OO’与两图像的交点e,e’就是对极点

本质矩阵(Essential Matrix)

对于如图所示,P是物体在世界坐标中的位置,p(后文中直接称为P)和p’(后文中称为P’)分别是P在两个相机成像平面上的投影,O为相机1的光心,O’为相机2的光心,从p到p’为刚体运动,转换公式为:
对极几何(Epipolar Geometry) - 图4

P’实际上是OP’向量,而T是O’T向量,而这两个向量都位于OO’P这个对极平面上,因此两个向量的叉乘即为对极平面的法向量
对极几何(Epipolar Geometry) - 图5

因为T*T=0,所以最后对极几何(Epipolar Geometry) - 图6,再左乘P’,P’与法向量对极几何(Epipolar Geometry) - 图7垂直,因此可得:
对极几何(Epipolar Geometry) - 图8

两向量的叉乘可以转换为一向量的反对称矩阵与另一向量的点乘,由此可得:
对极几何(Epipolar Geometry) - 图9
有些作者将对极几何(Epipolar Geometry) - 图10
设本质矩阵为E,得:
对极几何(Epipolar Geometry) - 图11
即:
对极几何(Epipolar Geometry) - 图12
由上可知,约束两个成像点关系的,就只有T和R这个内参数

基本矩阵(Fundamental Matrix)

还记得我们将世界坐标系的观测点转换到2D图像点的方法吗,没错,就是用相机矩阵,而相机矩阵又分为内参和外参的,代数表示为 对极几何(Epipolar Geometry) - 图13
K和 对极几何(Epipolar Geometry) - 图14 分别表示内参矩阵和外参矩阵,P_im和P_w分别表示图像点和世界点,如果我们把经外参矩阵转换到相机坐标系的世界点称作P_c,那么上式可化为 对极几何(Epipolar Geometry) - 图15
现在我们考虑左右两视图,又由于K是可逆的,有 对极几何(Epipolar Geometry) - 图16
还记得上面的本质矩阵吗
对极几何(Epipolar Geometry) - 图17
将矩阵相乘

对极几何(Epipolar Geometry) - 图18

我们另 对极几何(Epipolar Geometry) - 图19 ,上式化简为

对极几何(Epipolar Geometry) - 图20
F就是我们的基本矩阵
**
关于F与E的关系:
对极几何(Epipolar Geometry) - 图21

对极几何(Epipolar Geometry) - 图22

本质矩阵求解相机运动

在实际中我们可以通过特征点匹配(如ORBSLAM2使用ORB特征)计算出相机运动前后两幅视图中较多组匹配特征点坐标 对极几何(Epipolar Geometry) - 图23对极几何(Epipolar Geometry) - 图24 ,另外相机内参矩阵 对极几何(Epipolar Geometry) - 图25 已知。
对极几何(Epipolar Geometry) - 图26
通过对极几何恢复相机运动的过程为:特征点匹配 → 计算本质矩阵 → 恢复相机运动
以本质矩阵 对极几何(Epipolar Geometry) - 图27 的定义公式来看,两边乘以 对极几何(Epipolar Geometry) - 图28 ,得:
对极几何(Epipolar Geometry) - 图29
化简得
对极几何(Epipolar Geometry) - 图30
再回头来看公式 对极几何(Epipolar Geometry) - 图31
对极几何(Epipolar Geometry) - 图32
其中 对极几何(Epipolar Geometry) - 图33对极几何(Epipolar Geometry) - 图34 ,带表相机主点位置。这时明显可以看到findEssentialMat代码通过上述过程计算本质矩阵 对极几何(Epipolar Geometry) - 图35

  • 奇异值分解 对极几何(Epipolar Geometry) - 图36 计算相机运动

对极几何(Epipolar Geometry) - 图37
对极几何(Epipolar Geometry) - 图38 进行初等行变换:
对极几何(Epipolar Geometry) - 图39
这里的 对极几何(Epipolar Geometry) - 图40 是一个正交矩阵( 对极几何(Epipolar Geometry) - 图41 )。通过上述初等行变换可以得到:
对极几何(Epipolar Geometry) - 图42 对极几何(Epipolar Geometry) - 图43
那么通过公式 对极几何(Epipolar Geometry) - 图44 改写 对极几何(Epipolar Geometry) - 图45 为:

对极几何(Epipolar Geometry) - 图46

同理通过公式 对极几何(Epipolar Geometry) - 图47 改写 对极几何(Epipolar Geometry) - 图48 为:

对极几何(Epipolar Geometry) - 图49

观察公式 对极几何(Epipolar Geometry) - 图50对极几何(Epipolar Geometry) - 图51 ,这就是典型的奇异值分解(SVD):

对极几何(Epipolar Geometry) - 图52

其中 对极几何(Epipolar Geometry) - 图53对极几何(Epipolar Geometry) - 图54 都是正交矩阵, 对极几何(Epipolar Geometry) - 图55对极几何(Epipolar Geometry) - 图56 。同时可以得到结论:

一个矩阵是本质矩阵的充要条件是其奇异值中有两个相等且第三个是0。

那么看到这儿应该比较清晰了,通过两幅图对极几何计算相机运动的方法是:

  1. 特征点匹配计算 对极几何(Epipolar Geometry) - 图57对极几何(Epipolar Geometry) - 图58
  2. 通过对极约束 对极几何(Epipolar Geometry) - 图59 计算本质矩阵 对极几何(Epipolar Geometry) - 图60
  3. 用奇异值分解 对极几何(Epipolar Geometry) - 图61 计算 对极几何(Epipolar Geometry) - 图62对极几何(Epipolar Geometry) - 图63 ,从而得到旋转矩阵 对极几何(Epipolar Geometry) - 图64 和平移向量 对极几何(Epipolar Geometry) - 图65
  • 机运动 对极几何(Epipolar Geometry) - 图66对极几何(Epipolar Geometry) - 图67 的四个解

已知 对极几何(Epipolar Geometry) - 图68 并进行奇异值分解(SVD)求得 对极几何(Epipolar Geometry) - 图69对极几何(Epipolar Geometry) - 图70 之后,那么根据公式 对极几何(Epipolar Geometry) - 图71对极几何(Epipolar Geometry) - 图72 可以得到旋转矩阵的两个解:
对极几何(Epipolar Geometry) - 图73
接着可以得到:
对极几何(Epipolar Geometry) - 图74
对于对极约束 对极几何(Epipolar Geometry) - 图75 ,两边乘以 对极几何(Epipolar Geometry) - 图76 等式依然成立;对本质矩阵的数值解来说, 对极几何(Epipolar Geometry) - 图77对极几何(Epipolar Geometry) - 图78 只是相差一个负号;但是对于平移向量,对极几何(Epipolar Geometry) - 图79对极几何(Epipolar Geometry) - 图80 代表方向相反。
对极几何(Epipolar Geometry) - 图81
综合考虑,求解得到的 对极几何(Epipolar Geometry) - 图82对极几何(Epipolar Geometry) - 图83 共有4种如下可能位置:
对极几何(Epipolar Geometry) - 图84
由于真实物理条件限定,两个相机和被拍摄点在同一侧,且被拍摄点在相机前方所以只有上图中(a)是符合真实的解。

在OpenCV中cv::recoverPose函数帮我们做这一堆事情

输入本质矩阵、匹配特征点 _points1 + _points2、相机矩阵 _cameraMatrix,输出旋转矩阵 _R和平移向量 _t 。代码太长就不列出来了。

若干问题

  • 对极几何不能求解纯旋转问题

对极几何(Epipolar Geometry) - 图85
当相机无平移且只有旋转时 对极几何(Epipolar Geometry) - 图86 为全 对极几何(Epipolar Geometry) - 图87 矩阵,等式两边都等于 对极几何(Epipolar Geometry) - 图88 显然会导致无法求解 对极几何(Epipolar Geometry) - 图89 。反过来当相机只有平移且无旋转时 对极几何(Epipolar Geometry) - 图90 ,并不影响 对极几何(Epipolar Geometry) - 图91 的求解,这时问题退化成双目测距。

  • 对极几何“结构性”恢复运动

对于对极约束 对极几何(Epipolar Geometry) - 图92 ,在等式两边乘以任意不为 对极几何(Epipolar Geometry) - 图93 的常数 对极几何(Epipolar Geometry) - 图94 都成立:
对极几何(Epipolar Geometry) - 图95
换句话说,如果 对极几何(Epipolar Geometry) - 图96对极几何(Epipolar Geometry) - 图97 的解,那么 对极几何(Epipolar Geometry) - 图98 也是 对极几何(Epipolar Geometry) - 图99 的解。
这就是说,即使求解出平移向量 对极几何(Epipolar Geometry) - 图100 ,我们也无法知道 对极几何(Epipolar Geometry) - 图101 的单位具体是米、厘米还是毫米。所以计出的 对极几何(Epipolar Geometry) - 图102 只是恢复移动的“结构性”,并不是真实值。

ref

https://zhuanlan.zhihu.com/p/141799551
https://www.cnblogs.com/gemstone/articles/2294551.html
https://zhuanlan.zhihu.com/p/33458436