Homography 知多少?

Posted 白巧克力亦唯心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Homography 知多少?相关的知识,希望对你有一定的参考价值。

该博客内容发表在泡泡机器人公众号上,请尊重泡泡机器人公众号的版权声明

在ORB-SLAM初始化的时候,作者提到,如果场景是平面,或者近似平面,或者低视差时,我们能应用单应性矩阵(homography),这三种情形在我应用SVO的过程中颇有同感,打破了我对 H H H矩阵的固有映像,即只能用于平面或近似平面。但是我不知道如何去具体分析这里面的误差,比如不共面的情况时,应用 H H H矩阵将一个图像坐标从图像1投影到图像2时,它会落在图像哪个位置?和实际位置的误差该怎么计算?误差会有多大?和哪些因素有关?另外,为何相机只做纯旋转运动时,不管平面还是非平面, H H H矩阵都能应用?等等,一些列问题,让我感觉对homography了解很粗浅。

先简单回顾我脑海里的 H H H矩阵,让大家有点代入感,原谅我的啰嗦,进入正文以后就会尽量言简意赅。在没做视觉SLAM以前,通过opencv大概知道:利用两个图像中至少四个特征点能够求解一个单应性矩阵(homography matrix),然后用这个单应性矩阵 H H H能够将图像1中的某个坐标 ( u , v ) (u,v) (u,v)变换到图像2中对应的位置 ( u ′ , v ′ ) (u',v') (u,v)。然而,那时忽略了两个图像能够计算 H H H的前提条件。在学SLAM过程中,知道 H H H矩阵的推导是来自于相机在不同位姿拍摄同一个三维平面,所以使用opencv计算单应性矩阵 H H H的时候前提是两个图像对应区域必须是同一平面。

最近,刘浩敏师兄的RKSLAM里面用了多 H H H矩阵来提高鲁棒性,以及加上开头的那些疑问让我有迫切进一步学习 H H H矩阵的想法。本文将包括三部分: H H H的由来, H H H矩阵的扩展:相机的纯旋转和非共面情形,由 H H H矩阵到6点法估计本征矩阵 E E E

H H H矩阵的由来

假设相机在两个不同位姿处拍摄一个平面,该平面在frame 1中的法向量为 N N N,到frame 1原点距离为 d d d,具体如下图所示

于是,坐标系1中的点可以用下式转换到坐标系2中: X 2 = R X 1 + T \\mathbfX_2=R\\mathbfX_1+\\mathbfT X2=RX1+T注意,大写粗体 X \\mathbfX X表示的是三维空间点。同时,由于三维点 X 1 \\mathbfX_1 X1所在平面上,由简单的直角三角形,可知该点沿着法线方向的投影距离应等于 d d d N T X 1 = n 1 X + n 2 Y + n 3 Z = d \\mathbfN^T\\mathbfX_1=n_1X+n_2Y+n_3Z=d NTX1=n1X+n2Y+n3Z=d或者 1 d N T X 1 = 1 ∀ X 1 ∈ P \\frac1d\\mathbfN^T\\mathbfX_1=1\\quad\\quad\\forall \\mathbfX_1\\in P d1NTX1=1X1P结合起来我们能够得到: X 2 = R X 1 + T 1 d N T X 1 = H X 1 \\mathbfX_2=R\\mathbfX_1+\\mathbfT\\frac1d\\mathbfN^T\\mathbfX_1=H\\mathbfX_1 X2=RX1+Td1NTX1=HX1所以我们就得到了平面单应性矩阵 H = R + T 1 d N T , H ∈ R 3 × 3 H=R+\\mathbfT\\frac1d\\mathbfN^T,\\quad H\\in\\mathbbR^3\\times3 H=R+Td1NT,HR3×3回忆之前提到过本征矩阵 x 2 T E x 1 = x 2 T T ^ R x 1 = 0 \\boldsymbolx_2^TE\\boldsymbolx_1=\\boldsymbolx_2^T\\hatTR\\boldsymbolx_1=0 x2TEx1=x2TT^Rx1=0,它只是把点对应到一条极线,而单应性矩阵约束更强,是点到点的一一对应

注意,本征矩阵约束公式是对于归一化图像平面坐标 x = ( x , y , 1 ) T \\boldsymbolx=(x,y,1)^T x=(x,y,1)T而言的,而上述推导的 H H H是对三维空间点的。从3d到2d, 只需要将3d点向归一化图像平面 z = 1 z=1 z=1上投影。三维空间点到归一化图像平面只是对坐标缩放了 z z z,有: λ 1 x 1 = X 1 , λ 2 x 2 = X 2 → λ 2 x 2 = H λ 1 x 1 \\lambda_1\\boldsymbolx_1=\\mathbfX_1,\\quad\\lambda_2\\boldsymbolx_2=\\mathbfX_2\\rightarrow \\lambda_2\\boldsymbolx_2=H\\lambda_1\\boldsymbolx_1 λ1x1=X1,λ2x2=X2λ2x2=Hλ1x1从这里我们可以发现,从归一化图像平面坐标 x 2 \\boldsymbolx_2 x2 H x 1 H\\boldsymbolx_1 Hx1之间还存在一个尺度因子,因此我们利用两个图像对应的坐标对能恢复 H H H,但从该 H H H中无法将平移 T \\mathbfT T d d d分离出来,就导致了尺度的不确定性。而利用 H H H,我们能得到 x 2 ∼ H x 1 \\boldsymbolx_2\\sim H\\boldsymbolx_1 x2Hx1,注意虽然这里是用的相似符号,但是我们还是能得到图像坐标的一一对应,计算出 x = H x 1 \\boldsymbolx=H\\boldsymbolx_1 x=Hx1以后,将 x \\boldsymbolx x的坐标都除以 x z \\boldsymbolx_z xz进行坐标归一化,就能得到 x 2 \\boldsymbolx_2 x2

H矩阵的扩展:相机的纯旋转和非共面情形

先看纯旋转情形,三维坐标关系如下: X 2 = R X 1 \\mathbfX_2=R\\mathbfX_1 X2=RX1对应的有 H = R + T 1 d N T , T =

以上是关于Homography 知多少?的主要内容,如果未能解决你的问题,请参考以下文章

找到与已知 Homography 的平面平行的平面的 Homography

从Homography分解中寻找最合适的旋转和平移

如何使用 Homography 在 OpenCV 中转换图片?

如何使用 ORB 获得良好的 Homography?

在点集的凸包内生成系列三角形

线性求解单应矩阵 Homography