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=1∀X1∈P结合起来我们能够得到:
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,H∈R3×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 x2∼Hx1,注意虽然这里是用的相似符号,但是我们还是能得到图像坐标的一一对应,计算出 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