之前在 单目初始化Initializer.cc 干了啥事中简单介绍了一下基础矩阵F,本质矩阵E和单应矩阵H,最近把他们详细的计算过程手推了一遍。
本质矩阵E
本质矩阵:描述空间中的一个点,在不同视角下几何约束关系(不同坐标下的归一化坐标系)
本质矩阵(E矩阵)平移t tt的待自由度是3(xyz三个方向),旋转矩阵R RR的自由度是3(row,pitch,yaw三个方向),所以其自由度最高是6,同时E 满足尺度等价性约束,所以E的自由度减一,其自由度为5.
基础矩阵F
基础矩阵F:描述不同帧之间同一空间点像素坐标的几何约束关系(由本质矩阵E归一化坐标转为像素坐标)
首先F矩阵是三阶的,最高自由度为9,然后其满足尺度等价性(因为图像坐标是通过齐次坐标表示,因此你矩阵同乘一个常数,最后求得的坐标其实是一致的,可以理解为H33 衡等于1,或者满足一个约束等式),因此自由度减一,再其次其满足不可逆矩阵的性质,行列式为零的约束等式,因此自由度再减一,因此自由度为7。
F矩阵和E矩阵的计算
这两个矩阵的计算方法都是类似的,通过DLT ,8点法求解(以本质矩阵为例):
最后可以通过带入8个点来求解,当然超过8个点就用超定方程求解。
计算RT
通过F矩阵和E矩阵来计算RT也是类似的,以E矩阵为例(F矩阵只需要通过内参矩阵转化为E矩阵即可)
这里有两个t和R,通过两两组合有四种可能,再带入具体的点求出最佳解即可。
单应矩阵H
单应矩阵H:描述处于共同平面的一些点在两张图像之间的变换关系
设图像A,B有一对匹配好的特征点P1,P2,这个特征点落在平面P上。
单应矩阵所有的空间点都再同一个平面上,则两幅图像中的点都满足同一个射影变换,该射影变换即单应矩阵,射影变换的自由度为9,其同样具有尺度等价性(因为图像坐标是通过齐次坐标表示,因此你矩阵同乘一个常数,最后求得的坐标其实是一致的),因此自由度减一,其自由度为8。
计算H矩阵
单应矩阵的求解其实只需要4个点对就行了,因为一个点对能提供两组方程。但为了统一也用了8点法。
计算RT
单应矩阵计算RT目前有两种方法Faugeras SVD-based decomposition 和 Zhang SVD-based decomposition
令 H = K * A * K_inv
则 A = k_inv * H * k
讨论 d’ > 0 时的 4 组解
有这四种解
// | ctheta 0 -aux_stheta| | aux1|
// Rp = | 0 1 0 | tp = | 0 |
// | aux_stheta 0 ctheta | |-aux3|
// | ctheta 0 aux_stheta| | aux1|
// Rp = | 0 1 0 | tp = | 0 |
// |-aux_stheta 0 ctheta | | aux3|
// | ctheta 0 aux_stheta| |-aux1|
// Rp = | 0 1 0 | tp = | 0 |
// |-aux_stheta 0 ctheta | |-aux3|
// | ctheta 0 -aux_stheta| |-aux1|
// Rp = | 0 1 0 | tp = | 0 |
// | aux_stheta 0 ctheta | | aux3|
同理d’ <0 时也有的 4 组解。最后也是遍历8种情况,找最佳的解。