本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始
文末正下方中心提供了本人
联系方式,
点击本人照片即可显示
W
X
→
官方认证
{\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证}
文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
一、前言
该篇博客,主要是对 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=Z\cdot \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}^T\mathbf{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] \propto\left[\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
a\mathbf{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 矩阵,什么情况下适合本质或者基本矩阵。
