2D-2D:对极几何
A.对极约束
@输入:参考帧和当前帧的2D点坐标对(一般8对),内参
@输出:运动恢复R t
参考帧和当前帧的二维像素点通过特征点法拿到了匹配关系,那么从各自光心出发的两条射线交点即3D点,P和两个光心构成了极平面,e1e1e1 \ e2e2e2为极点,l1l1l1 \ l2l2l2是极线(Epipolar line)。
对极几何必须要有正确的匹配关系,否则当前帧无法找到参考帧p1p1p1对应的点在p2p2p2,那样的话就要用极线搜索了。
对极几何求R t的步骤是:
1.根据匹配的像素点对和内参求出基础矩阵F或者本质矩阵E。E=t^ R,只和运动有关,所以是我们求的本质,平移和旋转各3自由度,单目尺度歧义性自由度-1,所以E有5个自由度,一般用八点法,8对点求;F还包括内参F=K−T∗E∗K−1F=K^{-T}*E*K^{-1}F=K−T∗E∗K−1.
2.根据E或者R恢复R t。这里一般用SVD分解恢复出4个解,然后取点在相机前方的那个解。
B.单应矩阵
@输入:参考帧和当前帧的2D点坐标对(一般4对),内参
@输出:运动恢复R t
Homography描述两个平面之间的映射关系,自由度为8。可以通过4对不共线的点得出。一般配合RANSAC。
退化(degenerate):特征点共面or纯旋转,基础矩阵的自由度下降(比如平移那块没了),就出现了退化。
ORB中H 和F都算,取好的。
没有特征匹配下的2D-2D:极线搜索
深度滤波器:用多次三角测量让深度估计收敛
直接法时候没有特征点匹配,所以需要用极限搜索,如DSO中ImmaturePoint::traceOn()。DSO论文中没有过多提及,深度滤波器部分可以看SVO比较详细。
@输入:*Frame_ref, *Frame_curr, R, t, 参考帧点像素位置和深度估计区间, 内参
@输出:当前帧对应点像素位置,点的深度和不确定度。
这时候的前提是已知Rt(可以是估计出来的,也可以是静止模型、匀速模型、随机模型之类的),思路是:
这时候只知道参考帧的点像素坐标和深度区间,也知道当前帧的极线,p1p1p