计算相机运动
对极几何(Epipolar Geometry)
下图表示在两帧图像I1,I2中,点P投影到两张图像中为p1,p2。两个相机中心分别O1,O2,假设第一帧到第二帧的运动为[R,t].
- 极平面(Epipolar plane): O1O2P三点组成的平面
- 极点(Epipolar): e1,e2
- 基线: O1O2连线
- 极线: l1,l2
设点P在世界坐标系下表示为:
P=[X,Y,Z]T
为方便计算,以O1为世界坐标系,O2在O1坐标系下的运动为[R,t],则P在O1和O2坐标系下分别表示为:
P1=[X1,Y1,Z1]T=P P2=[X2,Y2,Z2]=RP1+t=RP+t
跟拒相机模型:
Z1p1=KPZ2p2=kP2=K(RP+t)
通过转换可以推导出:
pT2K−T[T×]RK−1p1=0
这被称为对极约束.事实上这个公式的几何意义是O1,P,O2三点共面。
令E=[T×]R,F=K−T[T×]RK−1,分别记为本质矩阵(Essential Matrix) E和基础矩阵(Fundamental Matrix) F.
根据对极约束求解相机姿态:
- 根据匹配点求出基础矩阵或本质矩阵
- 根据基础矩阵或本质矩阵求解旋转矩阵和平移向量
本质矩阵
- 由于对极约束是等市为0的约束,乘以任意常量等市一人成立,这被称为E在不同尺度的等价性。
- 根据E=[T×]R,本质矩阵奇异值必定是[σ,σ,0]T的形式,这被称为本质矩阵的内在性质。
- 平移和旋转各有三个自由度,加起来为6个。又由于尺度等价性,本质矩阵的实际自由度为5个
本质矩阵常用经典的八点法(Eight-point-algorithm)进行求解。
令x1=K−1p1,x2=K−1p2, 则xT2Ex1=0.
根据x1,x2的归一化坐标和对极约束:
$$\left(u_{2}, v_{2}, 1\right)\left(e1e2e3e4e5e6e7e8e9\right)\left(u1v11\right)=0 \ \text{(这里x1,x2的坐标并不是指真实的像素坐标p1,p2,而是经过相机外参矩阵变换过后的归一化坐标)}$$
写成向量形式:
e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T⇓[u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]⋅e=0⇓(u12u11u12v11u12v12u11v12v11v12u11v111u22u21u22v21u22v22u21v22v21v22u21v211⋮⋮⋮⋮⋮⋮⋮⋮u82u81u82v81u82v82u81v82v81v82u81v811)(e1e2e3e4e5e6e7e8e9)=0
这就转化为一个齐次线性方程求解的问题。
Ae=0
一般采用SVD和最小二乘法进行求解。解空间为A矩阵的零空间。而零空间即是V矩阵的列向量。为了约束e的二范数最小,一般取最小特征值对应的列向量作为解。
η=argmin||η||=1||Aη||=v9A=UAΣAVTA
本质矩阵分解相机运动
E=UΣVT,Σ=diag(σ,σ,0)t1=U(:,2)R1=URZ(π2)VTt2=−U(:,2)R2=URTZ(π2)VTRz(π2)=(0,−1,01,0,00,0,1),RTz(π2)=(0,1,0−1,0,00,0,1) 共有4种情况 (R1,t1),(R1,t2),(R2,t1),(R2,t2)
- 解的判断。任取一点对四个解进行验证,只有在两个相机下都具有正的深度的是合理的解。
- 根据SVD分解出的特征值可能不是[σ,σ,0]T的形式。若Σ=[σ1,σ2,σ3]T,(σ1≥σ2≥σ3),则可以取Σ=[σ1+σ22,σ1+σ22,0]T或直接取Σ=[1,1,0]T。由于尺度不变性,这样取也是合理的。
单应矩阵
H: homography.
单应矩阵通常描述处于共同平面的一些点在两张图像之间的变换关系。所以单应矩阵多适用于平面场景中的姿态估计。