概述
本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始
有兴趣的朋友可以加微信 17575010159 相互讨论技术 - 文末公众号也可关注
一、前言
该篇博客,主要是对 Homography 矩阵进行一个细致的讲解,主要分为三个部分: 基本介绍、参数设定、公式推导、八点法求解。废话也不多说,那么我们下面就开始吧。
二、基本介绍
单应性矩阵
H
mathbf H
H(Homography), 其约束了同一 3D 空间点,在两个
像
素
平
面
color{red}{像素平面}
像素平面 的 2D
齐
次
坐
标
color{red}{齐次坐标}
齐次坐标,现在我们假设
p
a
1
,
p
b
1
p_{a1},p_{b1}
pa1,pb1 分别是两个像素平面
A
A
A,
B
B
B 的像素坐标,以及 单应性矩阵
H
b
a
mathbf H_{ba}
Hba(能够把像素坐标
p
a
1
p_{a1}
pa1变换到
p
b
1
p_{b1}
pb1的矩阵):
p
b
1
=
[
u
b
1
v
b
1
1
]
p
b
1
=
[
u
a
1
v
a
1
1
]
H
b
a
=
[
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
h
9
]
(01)
tag{01} color{blue} p_{b1}=left[begin{array}{c} u_{b1} \ v_{b1}\ 1 end{array}right]~~~~~~~~p_{b1}=left[begin{array}{c} u_{a1} \ v_{a1} \ 1 end{array}right]~~~~~~~~mathbf H_{ba}= left[begin{array}{lll} h_{1} & h_{2} & h_{3} \ h_{4} & h_{5} & h_{6} \ h_{7} & h_{8} & h_{9} end{array}right]
pb1=⎣⎡ub1vb11⎦⎤ pb1=⎣⎡ua1va11⎦⎤ Hba=⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤(01)
其上的
p
a
1
,
p
b
1
p_{a1},p_{b1}
pa1,pb1 (一般是已知量)是两张图像对应的像素齐次坐标,也可以为理解为一对匹配特征点,那么他们对应关系如下:
p
b
1
∝
H
p
a
1
(02)
tag{02} color{blue} {p}_{b1} propto mathbf{H} {p}_{a1}
pb1∝Hpa1(02)其上正比于符号
∝
color{red} propto
∝(这里并非是等号,大家需要注意一点) 约束了
p
b
1
{p}_{b1}
pb1 与
H
b
a
p
a
1
mathbf{H}_{ba} {p}_{a1}
Hbapa1 的方向是同方向,但是没有约束尺度。那么可以通过叉乘计算是可以消去尺度因子,因此上式还可以转化为等式,表达如下:
p
b
1
×
H
b
a
p
a
1
=
0
(03)
tag{03} color{blue} {p}_{b1} times mathbf{H}_{ba} {p}_{a1} =mathbf 0
pb1×Hbapa1=0(03)如果两个向量方向相同则叉乘为
0
mathbf 0
0 向量,不是很明白的朋友可以百度一下向量叉乘的相关知识。经过详细推导,最终可以获得如下公式:
H
b
a
=
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
=
K
b
R
b
a
(
E
+
1
d
a
⋅
t
a
b
n
a
T
)
K
a
−
1
(04)
tag{04} color{blue} mathbf{H}_{b a}=mathbf{K}_{b}left(mathbf{R}_{b a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1}=mathbf{K}_{b} mathbf{R}_{b a}left(mathbf{E}+frac{1}{d_{a}} cdot mathbf{t}_{a b} mathbf{n}_{a}^{T}right) mathbf{K}_{a}^{-1}
Hba=Kb(Rba−datbanaT)Ka−1=KbRba(E+da1⋅tabnaT)Ka−1(04)
其上的
R
b
a
mathbf{R}_{b a}
Rba 表示相机坐标
三、参数设定
在相机坐标系下,3D 空间坐标为
X
mathbf X
X,投影到像素坐标系的齐次坐标为p,
K
mathbf K
K 为相机内参,分别表示如下,:
X
=
[
X
Y
Z
]
p
=
[
u
v
1
]
=
1
Z
⋅
K
X
K
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
(05)
tag{05} color{blue} mathbf X=left[begin{array}{c} X\ Y\ Z end{array}right]~~~~~~~~~~~p=left[begin{array}{c} u\ v\ 1 end{array}right]= frac{1}{Z} cdot mathbf K mathbf X~~~~~~~~~~mathbf{K}=left[begin{array}{ccc} f_{x} & 0 & c_{x} \ 0 & f_{y} & c_{y} \ 0 & 0 & 1 end{array}right]
X=⎣⎡XYZ⎦⎤ p=⎣⎡uv1⎦⎤=Z1⋅KX K=⎣⎡fx000fy0cxcy1⎦⎤(05)
另外 3D 空间点
X
mathbf X
X 所在平面,在相机坐标系得下参数:
n
mathbf n
n 表示该平面的法向量,
d
d
d 表示相机坐标系原点到平面的距离。3D 点
X
mathbf X
X 位于平面
{
n
,
d
}
{mathbf n,d}
{n,d} 上, 其方程表达式为:
n
T
⋅
X
+
d
=
0
(06)
tag{06} color{blue} mathbf n^T cdot mathbf X+d=0
nT⋅X+d=0(06)
上面我们已经相机系坐标转像素系坐标,那么反过来像素系坐标转相机系坐标公式如下:
X
=
Z
⋅
K
−
1
p
(07)
tag{07} color{blue} mathbf X=Zcdot mathbf K^{-1}p
X=Z⋅K−1p(07)那么这里出现了一个问题。就是说,如果我们知道一个相机坐标系下的三维点与相机内参的时候,根据公式(5)中的第二项是可以求解出对应的像素坐标的。但是在已知像素坐标的情况下,无法求解出该像素点对应相机坐标系下的三维点。根据公式(07)可知,还缺少一个变量
Z
Z
Z, 只要当
Z
Z
Z 已知的情况下,才能求解出相机系下对应的三维点。如果知道3D点所在平面参数,也就是(06)式中的
{
n
,
d
}
{mathbf n,d}
{n,d}。那么结合(06),(07)整理得:
Z
⋅
n
T
K
−
1
p
+
d
=
0
Z
=
−
d
n
T
K
−
1
p
(08)
tag{08} color{blue} Z cdot mathbf{n}^T mathbf{K}^{-1} p+d=0 ~~~~~~~~~~~~~~~Z=-frac{d}{mathbf{n}^T mathbf{K}^{-1} p}
Z⋅nTK−1p+d=0 Z=−nTK−1pd(08)也就是,如果知道3D点所在平面的相关参数,那么我们就有办法求解出3D点的深度
Z
Z
Z,把 (08)式 代入 (07)式 可得:
X
=
−
d
n
T
K
−
1
p
⋅
K
−
1
p
(09)
tag{09} color{blue} mathbf{X}=-frac{d}{mathbf{n}^Tmathbf{K}^{-1} p} cdot mathbf{K}^{-1} p
X=−nTK−1pd⋅K−1p(09)
四、公式推导
在前面提到,Homography 是像素坐标系之间的转换。比如(02)表示的就是由像素坐标系
a
a
a 转到 像素坐标系
b
b
b。 下面我们来推导其具体过程,根据相机成像原理,相机坐标系a下的点
X
a
mathbf {X_a}
Xa, 和相机坐标系下的
X
b
mathbf {X_b}
Xb,可知公式如下:
[
X
b
1
]
=
[
R
b
a
t
b
a
0
1
]
⏟
T
b
a
[
X
a
1
]
(10)
tag{10} color{blue} left[begin{array}{c} mathbf X_{b} \ 1 end{array}right]=underbrace{left[begin{array}{cc} mathbf{R}_{b a} & mathbf{t}_{b a} \ mathbf{0} & 1 end{array}right]}_{mathbf{T}_{b a}}left[begin{array}{c} mathbf{X}_{a} \ 1 end{array}right]
[Xb1]=Tba
[Rba0tba1][Xa1](10)
X
b
=
R
b
a
X
a
+
t
b
a
(12)
tag{12} color{blue} mathbf{X}_{b}=mathbf{R}_{b a} mathbf{X}_{a}+mathbf{t}_{b a}
Xb=RbaXa+tba(12)其中:
R
b
a
mathbf R_{ba}
Rba →表示 a系 到 b系的坐标旋转变换(也可以理解为,b系下a系的姿态)
t
b
a
mathbf t_{ba}
tba →表示 a系 到 b系的坐标平移变换(也可以理解为,b系下a系的位置)。
再根据(07)式子,可得
Z
b
⋅
K
b
−
1
p
b
=
Z
a
⋅
R
b
a
K
a
−
1
p
a
+
t
b
a
(13)
tag{13} color{blue} Z_{b} cdot mathbf{K}_{b}^{-1} p_{b}=Z_{a} cdot mathbf{R}_{b a} mathbf{K}_{a}^{-1} p_{a}+mathbf{t}_{ba}
Zb⋅Kb−1pb=Za⋅RbaKa−1pa+tba(13)那么继续化简,可得到由 a系下 表达 b系像素:
p
b
=
Z
a
Z
b
⋅
K
b
R
b
a
K
a
−
1
p
a
+
1
Z
b
⋅
K
b
t
b
a
(14)
tag{14} color{blue} p_{b}=frac{Z_{a}}{Z_{b}} cdot mathbf{K}_{b} mathbf{R}_{b a} mathbf{K}_{a}^{-1} p_{a}+frac{1}{Z_{b}} cdot mathbf{K}_{b} mathbf{t}_{b a}
pb=ZbZa⋅KbRbaKa−1pa+Zb1⋅Kbtba(14)假设其上的
R
b
a
mathbf R_{ba}
Rba,
t
b
a
mathbf t_{ba}
tba 为已知量, 但是跟前面结论一样,因为存在未知参数
Z
b
,
Z
a
Z_b, Z_a
Zb,Za, 所以无法直接通过 a系像素 得到 b系像素。那么我们根据前面的推导(08),引入a系中平面参数:
p
b
=
Z
a
Z
b
⋅
K
b
R
b
a
K
a
−
1
p
a
+
1
Z
b
⋅
K
b
t
b
a
=
Z
a
Z
b
⋅
K
b
(
R
b
a
K
a
−
1
p
a
+
t
b
a
Z
a
)
=
Z
a
Z
b
⋅
K
b
(
R
b
a
K
a
−
1
p
a
−
t
b
a
n
a
T
K
a
−
1
p
a
d
a
)
=
Z
a
Z
b
⋅
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
p
a
(15)
tag{15} color{blue} begin{aligned} p_{b} &=frac{Z_{a}}{Z_{b}} cdot mathbf{K}_{b} mathbf{R}_{b a} mathbf{K}_{a}^{-1} p_{a}+frac{1}{Z_{b}} cdot mathbf{K}_{b} mathbf{t}_{b a} \ &=frac{Z_{a}}{Z_{b}} cdot mathbf{K}_{b}left(mathbf{R}_{b a} mathbf{K}_{a}^{-1} p_{a}+frac{mathbf{t}_{b a}}{Z_{a}}right) \ &=frac{Z_{a}}{Z_{b}} cdot mathbf{K}_{b}left(mathbf{R}_{b a} mathbf{K}_{a}^{-1} p_{a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T} mathbf{K}_{a}^{-1} p_{a}}{d_{a}}right) \ &=frac{Z_{a}}{Z_{b}} cdot mathbf{K}_{b}left(mathbf{R}_{b a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1} p_{a}end{aligned}
pb=ZbZa⋅KbRbaKa−1pa+Zb1⋅Kbtba=ZbZa⋅Kb(RbaKa−1pa+Zatba)=ZbZa⋅Kb(RbaKa−1pa−datbanaTKa−1pa)=ZbZa⋅Kb(Rba−datbanaT)Ka−1pa(15)到这个位置呢,可以说是基本推导完成了,另外如果
p
b
p_{b}
pb 使用齐次像素坐标
(
x
,
y
,
1
)
T
(x,y,1)^T
(x,y,1)T 与
λ
(
x
,
y
,
1
)
T
lambda (x,y,1)^T
λ(x,y,1)T 以及
(
λ
x
,
λ
y
,
λ
)
T
(lambda x,lambda y,lambda)^T
(λx,λy,λ)T 其对应的都是空间中的同一三维点,也就是所谓的齐次坐标尺度不变性。根据这个性质,可以省略掉
Z
a
Z
b
frac{Z_{a}}{Z_{b}}
ZbZa 这个尺度因子。那么上式可以写成:
p
b
∝
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
p
a
(16)
tag{16} color{blue} p_{b} propto mathbf{K}_{b}left(mathbf{R}_{b a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1} p_{a}
pb∝Kb(Rba−datbanaT)Ka−1pa(16)然后再进行符号简化,如下:
H
b
a
=
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
p
b
=
H
b
a
p
a
(17)
tag{17} color{blue} mathbf{H}_{ba} =mathbf{K}_{b}left(mathbf{R}_{b a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1} ~~~~~~~~~p_b=mathbf{H}_{ba}p_a
Hba=Kb(Rba−datbanaT)Ka−1 pb=Hbapa(17)另外我们根据变换矩阵
T
a
b
T
b
a
=
E
mathbf T_{ab}mathbf T_{ba}=mathbf E
TabTba=E(单位矩阵),如下:
T
a
b
=
[
R
a
b
t
a
b
0
T
1
]
T
b
a
=
[
R
b
a
t
b
a
0
T
1
]
(18)
tag{18} color{blue} mathbf{T_{ab}}=left[begin{array}{cc} mathbf{R_{ab}} & mathbf{t_{ab}} \ \ mathbf{0}^{mathbf{T}} & 1 end{array}right]~~~~~~~~~mathbf{T_{ba}}=left[begin{array}{cc} mathbf{R_{ba}} & mathbf{t_{ba}} \ \ mathbf{0}^{mathbf{T}} & 1 end{array}right]
Tab=⎣⎡Rab0Ttab1⎦⎤ Tba=⎣⎡Rba0Ttba1⎦⎤(18)我们可以推导出
R
b
a
t
a
b
=
−
t
b
a
(19)
tag{19} color{blue} mathbf{R}_{b a} mathbf{t}_{a b}=-mathbf{t}_{b a}
Rbatab=−tba(19)
把这个带入到(19)式子当中继续推导如下:
H
b
a
=
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
=
K
b
(
R
b
a
+
R
b
a
t
a
b
n
a
T
d
a
)
K
a
−
1
p
a
=
K
b
R
b
a
(
E
+
1
d
a
⋅
t
a
b
n
a
T
)
K
a
−
1
p
a
=
K
b
R
b
a
(
E
+
1
d
a
⋅
t
a
b
n
a
T
)
K
a
−
1
p
a
(20)
tag{20} color{blue} begin{aligned} mathbf{H}_{ba} &=mathbf{K}_{b}left(mathbf{R}_{b a}-frac{mathbf{t}_{b a} mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1}\ &=mathbf{K}_{b}left(mathbf{R}_{b a}+mathbf{R}_{b a} mathbf{t}_{a b} frac{mathbf{n}_{a}^{T}}{d_{a}}right) mathbf{K}_{a}^{-1} p_{a} \ &= mathbf{K}_{b} mathbf{R}_{b a}left(mathbf{E}+frac{1}{d_{a}} cdot mathbf{t}_{a b} mathbf{n}_{a}^{T}right) mathbf{K}_{a}^{-1} p_{a} \ &=mathbf{K}_{b} mathbf{R}_{b a}left(mathbf{E}+frac{1}{d_{a}} cdot mathbf{t}_{a b} mathbf{n}_{a}^{T}right) mathbf{K}_{a}^{-1} p_{a} end{aligned}
Hba=Kb(Rba−datbanaT)Ka−1=Kb(Rba+RbatabdanaT)Ka−1pa=KbRba(E+da1⋅tabnaT)Ka−1pa=KbRba(E+da1⋅tabnaT)Ka−1pa(20)这样结合起来就得到前面(04)式。竟然我们推导出
H
mathbf H
H 矩阵,那么如何进行求解呢,如下推导。
五、八点法求解
根据前面的公式(02)
p
b
1
∝
H
p
a
1
{p}_{b1} propto mathbf{H} {p}_{a1}
pb1∝Hpa1,其表示的是一对匹配点,使用齐次坐标展开如下:
[
u
b
1
v
b
1
1
]
∝
[
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
h
33
]
[
u
a
1
v
a
1
1
]
(21)
tag{21} color{blue} left[begin{array}{c} u_{b1} \ v_{b1} \ 1 end{array}right] proptoleft[begin{array}{lll} h_{11} & h_{12} & h_{13} \ h_{21} & h_{22} & h_{23} \ h_{31} & h_{32} & h_{33} end{array}right]left[begin{array}{c} u_{a1} \ v_{a1} \ 1 end{array}right]
⎣⎡ub1vb11⎦⎤∝⎣⎡h11h21h31h12h22h32h13h23h33⎦⎤⎣⎡ua1va11⎦⎤(21)转化为方程组如下:
{
u
b
1
=
h
11
u
a
1
+
h
12
v
a
1
+
h
13
v
b
1
=
h
21
u
a
1
+
h
22
v
a
1
+
h
23
1
=
h
31
u
a
1
+
h
32
v
a
1
+
h
33
⇒
{
u
b
1
=
u
b
1
1
=
h
11
u
a
1
+
h
12
v
a
1
+
h
13
h
31
u
a
1
+
h
32
v
a
1
+
h
33
v
b
1
=
v
b
1
1
=
h
21
u
a
1
+
h
22
v
a
1
+
h
23
h
31
u
a
1
+
h
32
v
a
1
+
h
33
(22)
tag {22} color{blue}left{begin{aligned} u_{b1} &=h_{11} u_{a1}+h_{12} v_{a1}+h_{13} \ v_{b1} &=h_{21} u_{a1}+h_{22} v_{a1}+h_{23} \ 1 &=h_{31}u_{a1}+h_{32} v_{a1}+h_{33} end{aligned}right.~~~Rightarrow~~~left{begin{aligned} u_{b1} &=frac{u_{b1}}{1}=frac{h_{11} u_{a1}+h_{12} v_{a1}+h_{13}}{h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}\ v_{b1} &=frac{v_{b1} }{1}=frac{h_{21} u_{a1}+h_{22} v_{a1}+h_{23}}{h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}\ end{aligned}right.
⎩⎪⎨⎪⎧ub1vb11=h11ua1+h12va1+h13=h21ua1+h22va1+h23=h31ua1+h32va1+h33 ⇒ ⎩⎪⎪⎨⎪⎪⎧ub1vb1=1ub1=h31ua1+h32va1+h33h11ua1+h12va1+h13=1vb1=h31ua1+h32va1+h33h21ua1+h22va1+h23(22)进一步转换如下:
{
u
b
1
(
h
31
u
a
1
+
h
32
v
a
1
+
h
33
)
=
h
11
u
a
1
+
h
12
v
a
1
+
h
13
v
b
1
(
h
31
u
a
1
+
h
32
v
a
1
+
h
33
)
=
h
21
u
a
1
+
h
22
v
a
1
+
h
23
(23)
tag {23} color{blue} left{begin{aligned} u_{b1}({h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}) &=h_{11} u_{a1}+h_{12} v_{a1}+h_{13}\ \ v_{b1}({h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}) &=h_{21} u_{a1}+h_{22} v_{a1}+h_{23}\ end{aligned}right.
⎩⎪⎨⎪⎧ub1(h31ua1+h32va1+h33)vb1(h31ua1+h32va1+h33)=h11ua1+h12va1+h13=h21ua1+h22va1+h23(23)然后我买了转化为一般式:
{
h
11
u
a
1
+
h
12
v
a
1
+
h
13
−
h
31
u
a
1
u
b
1
−
h
32
v
a
1
u
b
1
−
h
33
u
b
1
=
0
h
21
u
a
1
+
h
22
v
a
1
+
h
23
−
h
31
u
a
1
v
b
1
−
h
32
v
a
1
v
b
1
−
h
33
v
b
1
=
0
(24)
tag {24} color{blue} left{begin{aligned} h_{11} u_{a1}+h_{12} v_{a1}+h_{13}-{h_{31}u_{a1}u_{b1}-h_{32} v_{a1}u_{b1}-h_{33}u_{b1}}=0\ \ h_{21} u_{a1}+h_{22} v_{a1}+h_{23}-{h_{31}u_{a1}v_{b1}-h_{32} v_{a1}v_{b1}-h_{33}v_{b1}}=0\ end{aligned}right.
⎩⎪⎨⎪⎧h11ua1+h12va1+h13−h31ua1ub1−h32va1ub1−h33ub1=0h21ua1+h22va1+h23−h31ua1vb1−h32va1vb1−h33vb1=0(24) 因为使用齐次坐标,那么
H
mathbf{H}
H 的作用与
a
H
amathbf{H}
aH 是一样的,也就是
1
h
33
H
frac{1}{h33}mathbf{H}
h331H 与
H
mathbf{H}
H 效果一致,或者也可以令
h
33
=
1
h_{33}=1
h33=1 写成如下形式。
H
=
[
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
1
]
(25)
tag {25} color{blue} mathbf{H}=left[begin{array}{lll} h_{11} & h_{12} & h_{13} \ h_{21} & h_{22} & h_{23} \ h_{31} & h_{32} & 1 end{array}right]
H=⎣⎡h11h21h31h12h22h32h13h231⎦⎤(25)
八对特征点的方程组如下:
{
h
11
u
a
1
+
h
12
v
a
1
+
h
13
−
h
31
u
a
1
u
b
1
−
h
32
v
a
1
u
b
1
−
h
33
u
b
1
=
0
h
21
u
a
1
+
h
22
v
a
1
+
h
23
−
h
31
u
a
1
v
b
1
−
h
32
v
a
1
v
b
1
−
h
33
v
b
1
=
0
h
11
u
a
2
+
h
12
v
a
2
+
h
13
−
h
31
u
a
2
u
b
2
−
h
32
v
a
2
u
b
2
−
h
33
u
b
2
=
0
h
21
u
a
2
+
h
22
v
a
2
+
h
23
−
h
31
u
a
2
v
b
2
−
h
32
v
a
2
v
b
2
−
h
33
v
b
2
=
0
h
11
u
a
3
+
h
12
v
a
3
+
h
13
−
h
31
u
a
3
u
b
3
−
h
32
v
a
3
u
b
3
−
h
33
u
b
3
=
0
h
21
u
a
3
+
h
22
v
a
3
+
h
23
−
h
31
u
a
3
v
b
3
−
h
32
v
a
3
v
b
3
−
h
33
v
b
3
=
0
h
11
u
a
4
+
h
12
v
a
4
+
h
13
−
h
31
u
a
4
u
b
4
−
h
32
v
a
4
u
b
4
−
h
33
u
b
4
=
0
h
21
u
a
4
+
h
22
v
a
4
+
h
23
−
h
31
u
a
4
v
b
4
−
h
32
v
a
4
v
b
4
−
h
33
v
b
4
=
0
(26)
tag {26} color{blue} left{begin{aligned} h_{11} u_{a1}+h_{12} v_{a1}+h_{13}-{h_{31}u_{a1}u_{b1}-h_{32} v_{a1}u_{b1}-h_{33}u_{b1}}=0\ h_{21} u_{a1}+h_{22} v_{a1}+h_{23}-{h_{31}u_{a1}v_{b1}-h_{32} v_{a1}v_{b1}-h_{33}v_{b1}}=0\ h_{11} u_{a2}+h_{12} v_{a2}+h_{13}-{h_{31}u_{a2}u_{b2}-h_{32} v_{a2}u_{b2}-h_{33}u_{b2}}=0\ h_{21} u_{a2}+h_{22} v_{a2}+h_{23}-{h_{31}u_{a2}v_{b2}-h_{32} v_{a2}v_{b2}-h_{33}v_{b2}}=0\ h_{11} u_{a3}+h_{12} v_{a3}+h_{13}-{h_{31}u_{a3}u_{b3}-h_{32} v_{a3}u_{b3}-h_{33}u_{b3}}=0\ h_{21} u_{a3}+h_{22} v_{a3}+h_{23}-{h_{31}u_{a3}v_{b3}-h_{32} v_{a3}v_{b3}-h_{33}v_{b3}}=0\ h_{11} u_{a4}+h_{12} v_{a4}+h_{13}-{h_{31}u_{a4}u_{b4}-h_{32} v_{a4}u_{b4}-h_{33}u_{b4}}=0\ h_{21} u_{a4}+h_{22} v_{a4}+h_{23}-{h_{31}u_{a4}v_{b4}-h_{32} v_{a4}v_{b4}-h_{33}v_{b4}}=0\ end{aligned}right.
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧h11ua1+h12va1+h13−h31ua1ub1−h32va1ub1−h33ub1=0h21ua1+h22va1+h23−h31ua1vb1−h32va1vb1−h33vb1=0h11ua2+h12va2+h13−h31ua2ub2−h32va2ub2−h33ub2=0h21ua2+h22va2+h23−h31ua2vb2−h32va2vb2−h33vb2=0h11ua3+h12va3+h13−h31ua3ub3−h32va3ub3−h33ub3=0h21ua3+h22va3+h23−h31ua3vb3−h32va3vb3−h33vb3=0h11ua4+h12va4+h13−h31ua4ub4−h32va4ub4−h33ub4=0h21ua4+h22va4+h23−h31ua4vb4−h32va4vb4−h33vb4=0(26):上面的方程组就可以转化成矩阵形式:
[
u
a
1
v
a
1
1
0
0
0
−
u
a
1
u
b
1
−
v
a
1
u
b
1
−
u
b
1
=
0
0
0
0
u
a
1
v
a
1
1
−
u
a
1
v
b
1
−
v
a
1
v
b
1
−
v
b
1
=
0
u
a
2
v
a
2
1
0
0
0
−
u
a
2
u
b
2
−
v
a
2
u
b
2
−
u
b
2
=
0
0
0
0
u
a
2
v
a
2
1
−
u
a
2
v
b
2
−
v
a
2
v
b
2
−
v
b
2
=
0
u
a
3
v
a
3
1
0
0
0
−
u
a
3
u
b
3
−
v
a
3
u
b
3
−
u
b
3
=
0
0
0
0
u
a
3
v
a
3
1
−
u
a
3
v
b
3
−
v
a
3
v
b
3
−
v
b
3
=
0
u
a
4
v
a
4
1
0
0
0
−
u
a
4
u
b
4
−
v
a
4
u
b
4
−
u
b
4
=
0
0
0
0
u
a
4
v
a
4
1
−
u
a
4
v
b
4
−
v
a
4
v
b
4
−
v
b
4
=
0
]
[
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
h
33
]
=
0
(27)
tag {27} color{blue} begin{bmatrix} u_{a1}&v_{a1}&{1}&{0}&0&0&-u_{a1}u_{b1}&-v_{a1}u_{b1}&-u_{b1}=0\ 0&0&0&u_{a1}&v_{a1}&1&-u_{a1}v_{b1}&-v_{a1}v_{b1}&-v_{b1}=0\ u_{a2}&v_{a2}&1&0&0&0&-u_{a2}u_{b2}&-v_{a2}u_{b2}&-u_{b2}=0\ 0&0&0&u_{a2}&v_{a2}&1&-u_{a2}v_{b2}&-v_{a2}v_{b2}&-v_{b2}=0\ u_{a3}&v_{a3}&1&0&0&0&-u_{a3}u_{b3}&-v_{a3}u_{b3}&-u_{b3}=0\ 0&0&0&u_{a3}&v_{a3}&1&-u_{a3}v_{b3}&-v_{a3}v_{b3}&-v_{b3}=0\ u_{a4}&v_{a4}&1&0&0&0&-u_{a4}u_{b4}&-v_{a4}u_{b4}&-u_{b4}=0\ 0&0&0&u_{a4}&v_{a4}&1&-u_{a4}v_{b4}&-v_{a4}v_{b4}&-v_{b4}=0\ end{bmatrix}left[begin{array}{l} h_{11} \ h_{12} \ h_{13} \ h_{21} \ h_{22} \ h_{23} \ h_{31} \ h_{32} \ h_{33} end{array}right]=mathbf 0
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡ua10ua20ua30ua40va10va20va30va40101010100ua10ua20ua30ua40va10va20va30va401010101−ua1ub1−ua1vb1−ua2ub2−ua2vb2−ua3ub3−ua3vb3−ua4ub4−ua4vb4−va1ub1−va1vb1−va2ub2−va2vb2−va3ub3−va3vb3−va4ub4−va4vb4−ub1=0−vb1=0−ub2=0−vb2=0−ub3=0−vb3=0−ub4=0−vb4=0⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡h11h12h13h21h22h23h31h32h33⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0(27)因为使用齐次坐标, 可以令
h
33
=
1
h_{33}=1
h33=1,那么我们只需要求解八个未知数,上式我们简写成
A
(
8
,
9
)
H
(
9
,
1
)
=
0
(28)
tag {28} color{blue} mathbf A_{(8,9)}mathbf{H}_{(9,1)}=mathbf 0
A(8,9)H(9,1)=0(28)
该公式在已知 A ( 8 , 9 ) mathbf A_{(8,9)} A(8,9) 的情况下,我们通过 SVD奇异值分解,即可求解出单应性 H ( 9 , 1 ) mathbf{H}_{(9,1)} H(9,1) 矩阵。
六、结语
通过该篇博客,我们已经对 单应性Homography 矩阵进行了详细的讲解。下面我们会结合前面的本质矩阵与基本矩阵进行一个对比,然后讲解他们的适用场景。或者说,什么情况下适合 单应性Homography 矩阵,什么情况下适合本质或者基本矩阵。
最后
以上就是喜悦冷风为你收集整理的史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解的全部内容,希望文章能够帮你解决史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复