该博客内容发表在泡泡机器人公众号上,请尊重泡泡机器人公众号的版权声明
在ORB-SLAM初始化的时候,作者提到,如果场景是平面,或者近似平面,或者低视差时,我们能应用单应性矩阵(homography),这三种情形在我应用SVO的过程中颇有同感,打破了我对 H 矩阵的固有映像,即只能用于平面或近似平面。但是我不知道如何去具体分析这里面的误差,比如不共面的情况时,应用 H 矩阵将一个图像坐标从图像1投影到图像2时,它会落在图像哪个位置?和实际位置的误差该怎么计算?误差会有多大?和哪些因素有关?另外,为何相机只做纯旋转运动时,不管平面还是非平面, H 矩阵都能应用?等等,一些列问题,让我感觉对homography了解很粗浅。
先简单回顾我脑海里的 H 矩阵,让大家有点代入感,原谅我的啰嗦,进入正文以后就会尽量言简意赅。在没做视觉SLAM以前,通过opencv大概知道:利用两个图像中至少四个特征点能够求解一个单应性矩阵(homography matrix),然后用这个单应性矩阵 H 能够将图像1中的某个坐标 (u,v) 变换到图像2中对应的位置 (u′,v′) 。然而,那时忽略了两个图像能够计算 H 的前提条件。在学SLAM过程中,知道 H 矩阵的推导是来自于相机在不同位姿拍摄同一个三维平面,所以使用opencv计算单应性矩阵 H 的时候前提是两个图像对应区域必须是同一平面。
最近,刘浩敏师兄的RKSLAM里面用了多 H 矩阵来提高鲁棒性,以及加上开头的那些疑问让我有迫切进一步学习 H 矩阵的想法。本文将包括三部分: H 的由来, H 矩阵的扩展:相机的纯旋转和非共面情形,由 H 矩阵到6点法估计本征矩阵 E 。
H 矩阵的由来
假设相机在两个不同位姿处拍摄一个平面,该平面在frame 1中的法向量为
N
,到frame 1原点距离为
d
,具体如下图所示
于是,坐标系1中的点可以用下式转换到坐标系2中:
注意,本征矩阵约束公式是对于归一化图像平面坐标 x=(x,y,1)T 而言的,而上述推导的 H 是对三维空间点的。从3d到2d, 只需要将3d点向归一化图像平面 z=1 上投影。三维空间点到归一化图像平面只是对坐标缩放了 z ,有:
H矩阵的扩展:相机的纯旋转和非共面情形
先看纯旋转情形,三维坐标关系如下:
假设我们有一些非共面点,通过RANSAC算法估计了一个满足大多数点对应关系的
H
矩阵,那么对于不在三维平面上的
p′
用矩阵
H
转换以后,
H
会强迫它落到三维平面上,然后投影到另一个图像归一化平面,示意图如下:
一个重要的启示是: H 矩阵的这种直接计算图像坐标一一对应关系的性质给解决SLAM中像素点的匹配又提供了一条思路,如果一个 H 矩阵不行,那一幅图片就用多个 H 矩阵,这正是浩敏师兄那篇ISMAR 2016论文的重要框架基础。而通过本征矩阵 E 只能计算极线,还需要沿着极线匹配。
由 H 矩阵到本征矩阵 E 的一点遐想
既然说到了极线,顺着上面的思路,干脆探一探本征矩阵
E
。其实,上面图中,大家伙都看到
x′2
和
x2
是位于极线上的,他们坐标都知道,就能得到极线方程,如果还有另外一个点再确定一条极线,如下图所示
另外,还可以解释为什么8点法计算求解本征矩阵不能应用于共面的情形。我们知道一个向量和自己叉乘结果等于0,所以有
总结
总算写完了,推荐大家去读Yi Ma的书《An Invitation to 3D vision》上面几乎都来自于这本书,同时之前也提到过TUM的Prof.Cremers上课就是用的这本书。除此之外,再推荐个基于该书的课程。视觉几何真心水深,没有理论积累,没有前人指点,坑是填不完的,祝好(对大家,也是对自己)。
【版权声明】泡泡机器人SLAM的所有文章全部由泡泡机器人的成员花费大量心血制作而成的原创内容,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能否进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!
【注】商业转载请联系刘富强(liufuqiang_robot@hotmail.com)进行授权。普通个人转载,请保留版权声明,并且在文章下方放上“泡泡机器人SLAM”微信公众账号的二维码即可。
ref:已在总结中指出,不再列举。