亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间。而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感知能力,并希望在速度和精度上超越人类,比如自动驾驶导航中的定位导航,无人机的自动避障,测量仪中的三维扫描等,都是高智机器智能技术在3D视觉上的具体实现。
立体视觉是三维重建领域的重要方向,它模拟人眼结构用双相机模拟双目,以透视投影、三角测量为基础,通过逻辑复杂的同名点搜索算法,恢复场景中的三维信息。它的应用十分之广泛,自动驾驶、导航避障、文物重建、人脸识别等诸多高科技应用都有它关键的身影。
本课程将带大家由浅入深的了解立体视觉的理论与实践知识。我们会从坐标系讲到相机标定,从被动式立体讲到主动式立体,甚至可能从深度恢复讲到网格构建与处理,感兴趣的同学们,来和我一起探索立体视觉的魅力吧!
本课程是电子资源,所以行文并不会有太多条条框框的约束,但会以逻辑清晰、浅显易懂为目标,水平有限,若有不足之处,还请不吝赐教!
个人微信:EthanYs6,加我申请进技术交流群 StereoV3D,一起技术畅聊。
CSDN搜索 :Ethan Li 李迎松,查看网页版课程。
随课代码,将上传至github上,地址:StereoV3DCode:https://github.com/ethan-li-coding/StereoV3DCode
大家好,上一篇立体视觉入门指南(1):坐标系与相机参数中,我们对立体视觉的基础坐标系做了详细的介绍,承接上篇,本篇我们继续来讲基础:关键矩阵。
矩阵运算是立体视觉最常见的数学工具了,在前一篇中,相机的内参和外参也都是以矩阵的形式描述,我认为大家都有了一定的基础,线性代数和矩阵论都有涉猎,万一没有,那只能建议你们补补基础课了。
在双目视觉中,两个图像之间会有公共区域,自然地大家会想到这些公共区域的点是否会存在一些联系,更具体地是它们的坐标是否存在一些约束关系,比如关于它们坐标的关系式是否满足某个条件等式,抑或能否直接将某张图像上的点坐标转换成另一个图像上的点坐标。幸运的是,答案都是肯定的。本篇即为大家介绍双目视觉中三个关键的矩阵:本质矩阵、基础矩阵、单应性矩阵,它们可以建立两个视图公共点之间的坐标联系,或者完成公共点之间的坐标转换。它们就像立体视觉双视图之间的桥梁,让彼此紧密相连,形成一个整体,才算有了立体视觉系统的概念。
大家想必会发现,在上一篇中所介绍的坐标系知识,都是针对于单个相机而言,那么双目该如何考虑呢?双目视觉又是如何形成的呢?
首先让我们从人眼出发,我们之所以能够感受周围的立体世界,正是因为人的双眼形成了双目立体,同一个物体在两只眼睛内同时成像,由三角原理可以得到物体的三维空间坐标。

双目立体系统的结构和人眼类似,由两个相机组成,它们的视场相互重叠,重叠区域的场景可以通过寻找在两个相机上各自的成像点,并基于三角测量原理计算空间三维坐标。从硬件上来说,单目到双目只是多了一个相机(广义上来说,同一个相机移动到两个不同的位置也形成双目立体系统,这里以两个相机为角度展开);从系统上来说,要形成一个系统,就需要双相机之间建立一条让两者紧密相连的纽带。上一课我们描述了单相机的几个重要的坐标系,显然,双相机都会有各自的独立坐标系统,而这条纽带就是建立在各自的独立坐标系统之间,而哪还有比以相机中心为原点的三维相机坐标系更适合这个角色的呢?因此,在双目立体系统中,在双相机的相机坐标系之间建立一个旋转和平移转换关系,也就是熟知的外参矩阵 R R R 和 t t t ,直观上来说,它们将空间点在左相机的相机坐标系坐标转换为在右相机的相机坐标系坐标,实质上,它们是描述两个相机的相对位姿关系,让两者紧密相连,互为彼此。如下图为一个典型的双目结构图。

对于
R
R
R和
t
t
t,我们给出纯数学上的描述,假设空间点P在左相机相机坐标系下的坐标为
P
P
P,在右相机相机坐标系下的坐标为
P
′
P'
P′,则满足:
P
′
=
R
∗
P
+
t
P'=R*P+t
P′=R∗P+t
除此之外,还通常会将双目系统的世界坐标系放在左相机的中心,并和左相机坐标系完全重合,从这个角度来说, R , t R,t R,t就相当于是右相机在世界坐标系下的外参,而左相机在世界坐标系的外参则是 I , 0 I,0 I,0( I I I为单位阵)。
以上便是双目立体系统双相机之间的坐标系联系,但不能忽视的是,这些坐标系似乎并不那么直接,在实际应用中,我们最先接触的可不是虚拟在脑海中的坐标系,而是呈现在眼前亦或存储在计算机内存中的图像!图像像素和像素的像点坐标,才是最直观的输入信息。所以,是否存在像素坐标之间的紧密联系呢?答案是有,也便是本篇的内容:关键矩阵,正是描述像素坐标之间的紧密联系。
本质矩阵和基础矩阵
设空间点P在左相机坐标系坐标的坐标为
P
P
P,则在右相机坐标系中的坐标为
R
P
+
t
RP + t
RP+t,其在左右相机视图中的投影点分别为
p
1
,
p
2
p_1,p_2
p1,p2。基于相机坐标系到影像坐标系的转换公式,得到如下转换式:
d
1
p
1
=
K
1
P
,
d
2
p
2
=
K
2
(
R
P
+
t
)
d_1p_1=K_1P,d_2p_2=K_2(RP+t)
d1p1=K1P,d2p2=K2(RP+t)
左边的
p
p
p是齐次坐标,如果对空间点也取齐次,即将空间点归一化到
Z
=
1
Z=1
Z=1的平面,
d
d
d 就变成了1,上式变成
p
1
=
K
1
P
,
p
2
=
K
2
(
R
P
+
t
)
p_1=K_1P,p_2=K_2(RP+t)
p1=K1P,p2=K2(RP+t)
该等式在齐次意义上成立,也就是乘以任意非零常数依旧相等。
咱们把
K
K
K拿到等式左边来,则公式变成:
K
1
−
1
p
1
=
P
,
K
2
−
1
p
2
=
R
P
+
t
K_1^{-1}p_1=P,K_2^{-1}p_2=RP+t
K1−1p1=P,K2−1p2=RP+t
设
x
1
=
K
1
−
1
p
1
,
x
2
=
K
2
−
1
p
2
x_1=K_1^{-1}p_1,x_2=K_2^{-1}p_2
x1=K1−1p1,x2=K2−1p2
可得
x
1
=
P
,
x
2
=
R
P
+
t
=
>
x
2
=
R
x
1
+
t
x_1=P,x_2=RP+t => x_2=Rx_1+t
x1=P,x2=RP+t=>x2=Rx1+t
两边同时叉乘
t
t
t,可得
t
×
x
2
=
t
×
R
x
1
+
t
×
t
t×x_2=t×Rx_1+t×t
t×x2=t×Rx1+t×t
矢量和自己叉乘等于0,因此 t × R x 1 = t × x 2 t×Rx_1=t×x_2 t×Rx1=t×x2,
再两边同时左乘
x
2
T
x_2^T
x2T,得
x
2
T
t
×
R
x
1
=
x
2
T
t
×
x
2
x_2^Tt×Rx_1=x_2^Tt×x_2
x2Tt×Rx1=x2Tt×x2
等式右边显然是等于0的,可得
x
2
T
t
×
R
x
1
=
0
x_2^Tt×Rx_1=0
x2Tt×Rx1=0
叉乘可以等价于用反对称矩阵来点乘,
t
t
t 的反对称矩阵表示为
t
t
t^,上式变成
x
2
T
t
∧
R
x
1
=
0
x_2^Tt^∧Rx_1=0
x2Tt∧Rx1=0
该式描述了像平面坐标 x 1 , x 2 x_1,x_2 x1,x2之间的联系,即空间点在两个像平面的成像点通过外参矩阵 R , t R,t R,t建立了一个等式关系,或者称为一种约束关系,这个约束就叫做对极约束。
但是不能忽视的一点是,
x
1
,
x
2
x_1,x_2
x1,x2并不是原始像点坐标,而是左乘内参矩阵
K
K
K之后的坐标,那如果是原始坐标应该是怎样的形式呢?我们把
x
1
,
x
2
x_1,x_2
x1,x2还原成
p
1
,
p
2
p_1,p_2
p1,p2,得到
p
2
T
K
2
−
T
t
∧
R
K
1
−
1
p
1
=
0
p_2^TK_2^{-T}t^∧RK_1^{-1}p_1=0
p2TK2−Tt∧RK1−1p1=0
这两个公式是等价的,它们都是对极约束,几何意义是
O
1
,
P
,
O
2
,
p
1
,
p
2
O_1,P,O_2,p_1,p_2
O1,P,O2,p1,p2共面(见下图)。我们把上面两式像点中间夹着的部分记做两个矩阵:本质矩阵E:Essential matrix和基础矩阵F:Fundamental matrix。得到更简洁的表示形式:
x
2
T
E
x
1
=
0
,
p
2
T
F
p
1
=
0
x_2^TEx_1=0,p_2^TFp_1=0
x2TEx1=0,p2TFp1=0
其中,本质矩阵和基础矩阵的表达式分别是:
E
=
t
∧
R
,
F
=
K
2
−
T
t
∧
R
K
1
−
1
E=t^∧R,F=K_2^{-T}t^∧RK_1^{-1}
E=t∧R,F=K2−Tt∧RK1−1
本质矩阵和基础矩阵的区别是:本质矩阵是和 x x x建立的关系,而 x x x是由内参矩阵 K K K和像素坐标 p p p计算出来的,所以本质矩阵使用的前提是内参矩阵 K K K已知;而基础矩阵直接和像素坐标 p p p建立联系,所以不需要已知内参矩阵。
![]() |
本质矩阵的分解
本质矩阵有良好的性质,它的奇异值是
[
σ
,
σ
,
0
]
[σ,σ,0]
[σ,σ,0]的形式(继承于反对称矩阵
t
∧
t^∧
t∧的性质),可以通过SVD分解得到
R
R
R和
t
t
t。若
E
E
E的SVD分解为
E
=
U
Σ
V
T
E=U\Sigma V^T
E=UΣVT,则
R
R
R和
t
t
t的可能结果如下:
t
1
∧
=
U
Z
U
T
,
t
2
∧
=
U
Z
T
U
T
,
R
1
=
U
W
V
T
,
R
2
=
U
W
T
V
T
t_1^∧=UZU^T,t_2^∧=UZ^TU^T,R_1=UWV^T,R_2=UW^TV^T
t1∧=UZUT,t2∧=UZTUT,R1=UWVT,R2=UWTVT
其中, W = [ 0 − 1 0 1 0 0 0 0 1 ] W=\left[\begin{matrix} 0&-1&0\\1&0&0\\0&0&1 \end{matrix}\right] W=⎣⎡010−100001⎦⎤(正交阵), Z = [ 0 1 0 − 1 0 0 0 0 0 ] Z=\left[\begin{matrix} 0&1&0\\-1&0&0\\0&0&0 \end{matrix}\right] Z=⎣⎡0−10100000⎦⎤(反对称矩阵,若矢量 z = ( 0 , 0 , 1 ) T z=(0,0,1)^T z=(0,0,1)T,则 z ∧ = Z z^∧=Z z∧=Z)。
(证明见《Multiple View Geometry in Computer Vision(Second Edition)》chapter 9.6.2, page 258)
在解算
t
t
t时,并不需要先计算出
t
∧
t^∧
t∧,拿
t
1
t_1
t1举例,实际上因为
t
1
∧
=
U
Z
U
T
t_1^∧=UZU^T
t1∧=UZUT,而
t
1
∧
t
1
=
0
t_1^∧t_1=0
t1∧t1=0,因此
U
Z
U
T
t
1
=
0
UZU^Tt_1=0
UZUTt1=0,等式两边左乘
U
T
U^T
UT,可得
Z
(
U
T
t
1
)
=
0
Z(U^Tt_1)=0
Z(UTt1)=0,由于
Z
=
z
∧
Z=z^∧
Z=z∧且
z
∧
z
=
0
z^∧z=0
z∧z=0,因此
U
T
t
1
=
z
U^Tt_1=z
UTt1=z,得
t
1
=
U
z
=
U
(
0
,
0
,
1
)
T
t_1=Uz=U(0,0,1)^T
t1=Uz=U(0,0,1)T,即
t
1
t_1
t1为矩阵
U
U
U的第三列,即
t
1
=
U
.
c
o
l
(
3
)
,
t
2
=
−
t
1
t_1=U.col(3),t_2=-t_1
t1=U.col(3),t2=−t1
一共存在四组可能的 R , t R,t R,t组合,如下图所示:

只有一种情况下,三角化后的点P均在两个相机前方,即正解(图中(a)即为正解)。将观测点带入验证即可得到正确的那组解。
应用本质矩阵的前提是已知内参矩阵 K K K,比如在单目SLAM中,我们先标定了相机得到 K K K,再估计本质矩阵来分解得到 t t t和 R R R。而基础矩阵不需要内参,但是未知数套多,很难分解得到准确的内外参,我们需要做一些假设,比如具有初始的焦距值,比如像主点在图像中心等。而无论是估计本质矩阵还是估计基础矩阵,分解得到的相机参数都只能作为初值,要得到精确的参数,还需要通过非线性迭代优化求解精确值。
单应性矩阵
想必有的同学注意到,本质矩阵和基础矩阵并不是两个像素之间的相互转换关系,而是一种坐标之间的内在约束式。那是否存在直接将左视图像素坐标转换到右视图对应点像素坐标的表达式呢?确实是有的,即单应性矩阵Homography matrix,但有特定条件:当空间中场景是同一个平面时,它们在左右视图的投影点可通过可逆的单应性矩阵一对一相互转换,表达式为
p
2
=
H
p
1
,
p
1
=
H
−
1
p
2
p_2=Hp_1,p_1=H^{-1}p_2
p2=Hp1,p1=H−1p2
实际上,单应性矩阵不只是描述同一平面的像素点之间的关系,而是同一个平面在任意坐标系之间都可以建立单应性变换关系,比如影像坐标系与影像坐标系之间,世界坐标系和影像坐标系之间,如下图所示,

在双目立体视觉内,单应性变换是Zhang式相机标定法1的理论基础,纯平的标定板平面和影像平面存在单应性变换关系,同时它们存在世界坐标系到影像坐标系之间的投影变换关系,两个关系对等即可解出相机的内外参数,详细我们后面在讲。

单应性变换的另一个典型应用是图像拼接,将像素点假象成一个局部小平面,并求解局部的单应性矩阵,即可建立两个视图之间像素的一一映射,从而完成拼接。

从单应性矩阵的角度,我们来完成基础矩阵的另一个推导,假设左右视图中的一对同名点
p
1
,
p
2
p_1,p_2
p1,p2,它们之间的单应性变换矩阵为
H
H
H,则有
p
2
=
H
p
1
p_2=Hp_1
p2=Hp1
设右视图上的极点为
e
2
e_2
e2,则
e
2
e_2
e2和
p
2
p_2
p2共同构成极线
l
l
l,则有
l
=
e
2
×
p
2
=
e
2
∧
H
p
1
l=e_2×p_2=e_2^∧Hp_1
l=e2×p2=e2∧Hp1
由于
p
2
p_2
p2在极线上,则有
p
2
T
l
=
0
p_2^Tl=0
p2Tl=0,推得
p
2
T
e
2
∧
H
p
1
=
0
p_2^Te_2^∧Hp_1=0
p2Te2∧Hp1=0
参照前面的推导:
p
2
T
F
p
1
=
0
p_2^TFp_1=0
p2TFp1=0,可得
F
=
e
2
∧
H
F=e_2^∧H
F=e2∧H
即基础矩阵等于右视图极点的反对称矩阵和像素之间单应性矩阵的乘积 。
矩阵自由度分析

矩阵求解
本质矩阵和单应性矩阵的求解是相对更常见的需求,本篇重点介绍这两个矩阵的求解。
本质矩阵求解
本质矩阵 E E E的自由度是5,一对点可以列1个方程,这表明最少要用5对点来求解;但是由于这5个自由度是非线性相关的,如果要用5对来求解,就涉及到非线性解算,比较麻烦,所以更常见的方法是不按照 E E E的真实自由度,而是只考虑尺度等价性,把 E E E当做8个自由度来求解,最少用8对点,称之为8点法。
假设一对匹配点在左右视图的像素坐标分别为
p
1
=
[
u
1
,
v
1
,
1
]
T
,
p
2
=
[
u
2
,
v
2
,
1
]
T
p_1=[u_1,v_1,1]^T,p_2=[u_2,v_2,1]^T
p1=[u1,v1,1]T,p2=[u2,v2,1]T,左乘内参矩阵
K
K
K之后的坐标为
x
1
=
[
x
1
,
y
1
,
1
]
T
,
x
2
=
[
x
2
,
y
2
,
1
]
T
x_1=[x_1,y_1,1]^T,x_2=[x_2,y_2,1]^T
x1=[x1,y1,1]T,x2=[x2,y2,1]T,则根据对极约束
x
2
T
E
x
1
=
0
x_2^TEx_1=0
x2TEx1=0,有
[
x
2
y
2
1
]
[
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
]
[
x
1
y
1
1
]
=
0
\left[\begin{matrix}x_2&y_2&1\end{matrix}\right]\left[\begin{matrix}e_1&e_2&e_3\\e_4&e_5&e_6\\e_7&e_8&e_9\end{matrix}\right]\left[\begin{matrix}x_1\\y_1\\1\end{matrix}\right]=0
[x2y21]⎣⎡e1e4e7e2e5e8e3e6e9⎦⎤⎣⎡x1y11⎦⎤=0
其中,未知数
e
1
,
e
2
.
.
.
e
9
e_1,e_2...e_9
e1,e2...e9是本质矩阵的9个元素,若记一维矢量
e
=
[
e
1
,
e
2
,
.
.
.
,
e
9
]
T
e=[e_1,e_2,...,e_9]^T
e=[e1,e2,...,e9]T,把上式展开,可得
[
x
2
x
1
,
x
2
y
1
,
x
2
,
y
2
x
1
,
y
2
y
1
,
y
2
,
x
1
,
y
1
,
1
]
e
=
0
[x_2x_1,x_2y_1,x_2,y_2x_1,y_2y_1,y_2,x_1,y_1,1]e=0
[x2x1,x2y1,x2,y2x1,y2y1,y2,x1,y1,1]e=0
这是一个线性方程,而8对匹配点可以得到线性方程组:
[
x
2
1
x
1
1
x
2
1
y
1
1
x
2
1
y
2
1
x
1
1
y
2
1
y
1
1
y
2
1
x
1
1
y
1
1
1
x
2
2
x
1
2
x
2
2
y
1
2
x
2
2
y
2
2
x
1
2
y
2
2
y
1
2
y
2
2
x
1
2
y
1
2
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
x
2
8
x
1
8
x
2
8
y
1
8
x
2
8
y
2
8
x
1
8
y
2
8
y
1
8
y
2
8
x
1
8
y
1
8
1
]
[
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
]
=
0
\left[\begin{matrix}x_2^1x_1^1&x_2^1y_1^1&x_2^1&y_2^1x_1^1&y_2^1y_1^1&y_2^1&x_1^1&y_1^1&1\\x_2^2x_1^2&x_2^2y_1^2&x_2^2&y_2^2x_1^2&y_2^2y_1^2&y_2^2&x_1^2&y_1^2&1\\.&.&.&.&.&.&.&.\\.&.&.&.&.&.&.&.\\.&.&.&.&.&.&.&.\\x_2^8x_1^8&x_2^8y_1^8&x_2^8&y_2^8x_1^8&y_2^8y_1^8&y_2^8&x_1^8&y_1^8&1\end{matrix}\right]\left[\begin{matrix}e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9\end{matrix}\right]=0
⎣⎢⎢⎢⎢⎢⎢⎡x21x11x22x12...x28x18x21y11x22y12...x28y18x21x22...x28y21x11y22x12...y28x18y21y11y22y12...y28y18y21y22...y28x11x12...x18y11y12...y18111⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡e1e2e3e4e5e6e7e8e9⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
解该线性方程 A e = 0 Ae=0 Ae=0得到矢量 e e e,即可得到本质矩阵 E E E。矢量 e e e为系数矩阵 A A A的零空间,由线性代数的知识可知方程的特解数为 9 − r a n k ( A ) 9-rank(A) 9−rank(A),当 r a n k ( A ) = 8 rank(A)=8 rank(A)=8时,存在唯一特解,方程所有解均为特解的常数倍,正对应着 E E E尺度不变性的性质。
一般情况下,我们基于大量观测值求最小二乘解:矢量 e e e是方阵 A T A A^TA ATA最小特征值对应的特征向量(证略)。同时,奇异值分解也一种解法。
需要注意的是,由于噪声的存在,通过线性方程解出来的本质矩阵,大概率不满足内在性质,即奇异值不是
[
σ
,
σ
,
0
]
[\sigma,\sigma,0]
[σ,σ,0]的形式,通常的做法是将奇异值强制调整成
[
σ
,
σ
,
0
]
[σ,σ,0]
[σ,σ,0]的形式,若对求解得到的E进行SVD分解,得到奇异值矩阵
Σ
=
d
i
a
g
(
σ
1
,
σ
2
,
σ
3
)
\Sigma=diag(\sigma_1,\sigma_2,\sigma_3)
Σ=diag(σ1,σ2,σ3),不妨设
σ
1
,
σ
2
>
σ
3
\sigma_1,\sigma_2>\sigma_3
σ1,σ2>σ3,则更新
E
E
E为:
E
=
U
[
σ
1
+
σ
2
2
σ
1
+
σ
2
2
0
]
V
T
E=U\left[\begin{matrix}\frac{\sigma_1+\sigma_2}2&&\\&\frac{\sigma_1+\sigma_2}2&\\&&0\end{matrix}\right]V^T
E=U⎣⎡2σ1+σ22σ1+σ20⎦⎤VT
实际上就是把最小值去掉(最小值大概率是接近0的),让新的 σ \sigma σ取两个大值的平均值。另一种更简单做法是直接让 σ = 1 \sigma=1 σ=1,因为 E E E的尺度等价性质。
单应性矩阵求解
单应性矩阵的自由度是8,一对点可以列2个方程,这表明最少要用4对点来求解。假设一对匹配点在左右视图的像素坐标分别为
p
1
=
[
u
1
,
v
1
,
1
]
T
,
p
2
=
[
u
2
,
v
2
,
1
]
T
p_1=[u_1,v_1,1]^T,p_2=[u_2,v_2,1]^T
p1=[u1,v1,1]T,p2=[u2,v2,1]T,则根据对极约束
p
2
=
H
p
1
p_2=Hp_1
p2=Hp1,有
[
u
1
v
1
1
]
=
[
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
h
9
]
[
u
2
v
2
1
]
\left[\begin{matrix}u_1\\v_1\\1\end{matrix}\right]=\left[\begin{matrix}h_1&h_2&h_3\\h_4&h_5&h_6\\h_7&h_8&h_9\end{matrix}\right]\left[\begin{matrix}u_2\\v_2\\1\end{matrix}\right]
⎣⎡u1v11⎦⎤=⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤⎣⎡u2v21⎦⎤
上式具有尺度不变性,即
H
H
H可以乘以任意非零常数,那我们不妨让
h
9
=
1
h_9=1
h9=1(即
H
H
H除以
h
9
h_9
h9),按照齐次公式的常规处理方式,我们会让第1,2行除以第3行以去除尺度因子,可得
u
2
=
h
1
u
1
+
h
2
v
1
+
h
3
h
7
u
1
+
h
8
v
1
+
h
9
v
2
=
h
4
u
1
+
h
5
v
1
+
h
6
h
7
u
1
+
h
8
v
1
+
h
9
u_2=\frac{h_1u_1+h_2v_1+h_3}{h_7u_1+h_8v_1+h_9}\\v_2=\frac{h_4u_1+h_5v_1+h_6}{h_7u_1+h_8v_1+h_9}
u2=h7u1+h8v1+h9h1u1+h2v1+h3v2=h7u1+h8v1+h9h4u1+h5v1+h6
代入
h
9
=
1
h_9=1
h9=1,并将未知数
h
1
,
h
2
.
.
.
h
8
h_1,h_2...h_8
h1,h2...h8整理到等式左边,得到
u
1
h
1
+
v
1
h
2
+
h
3
−
u
1
u
2
h
7
−
v
1
u
2
h
8
=
u
2
u
1
h
4
+
v
1
h
5
+
h
6
−
u
1
v
2
h
7
−
v
1
v
2
h
8
=
v
2
u_1h_1+v_1h_2+h_3-u_1u_2h_7-v_1u_2h_8=u_2\\u_1h_4+v_1h_5+h_6-u_1v_2h_7-v_1v_2h_8=v_2
u1h1+v1h2+h3−u1u2h7−v1u2h8=u2u1h4+v1h5+h6−u1v2h7−v1v2h8=v2
这样一对匹配点可以列出两个方程,求解8个未知数需要至少4对点,前提是这4对点不存在三点一线的退化情况。同样列出4对点情况下的线性方程组:
[
u
1
1
v
1
1
1
0
0
0
−
u
1
1
u
2
1
−
v
1
1
u
2
1
0
0
0
u
1
1
v
1
1
1
−
u
1
1
v
2
1
−
v
1
1
v
2
1
u
1
2
v
1
2
1
0
0
0
−
u
1
2
u
2
2
−
v
1
2
u
2
2
0
0
0
u
1
2
v
1
2
1
−
u
1
2
v
2
2
−
v
1
2
v
2
2
u
1
3
v
1
3
1
0
0
0
−
u
1
3
u
2
3
−
v
1
3
u
2
3
0
0
0
u
1
3
v
1
3
1
−
u
1
3
v
2
3
−
v
1
3
v
2
3
u
1
4
v
1
4
1
0
0
0
−
u
1
4
u
2
4
−
v
1
4
u
2
4
0
0
0
u
1
4
v
1
4
1
−
u
1
4
v
2
4
−
v
1
4
v
2
4
]
[
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
]
=
[
u
2
1
v
2
1
u
2
2
v
2
2
u
2
3
v
2
3
u
2
4
v
2
4
]
\left[\begin{matrix}u_1^1&v_1^1&1&0&0&0&-u_1^1u_2^1&-v_1^1u_2^1\\0&0&0&u_1^1&v_1^1&1&-u_1^1v_2^1&-v_1^1v_2^1\\u_1^2&v_1^2&1&0&0&0&-u_1^2u_2^2&-v_1^2u_2^2\\0&0&0&u_1^2&v_1^2&1&-u_1^2v_2^2&-v_1^2v_2^2\\u_1^3&v_1^3&1&0&0&0&-u_1^3u_2^3&-v_1^3u_2^3\\0&0&0&u_1^3&v_1^3&1&-u_1^3v_2^3&-v_1^3v_2^3\\u_1^4&v_1^4&1&0&0&0&-u_1^4u_2^4&-v_1^4u_2^4\\0&0&0&u_1^4&v_1^4&1&-u_1^4v_2^4&-v_1^4v_2^4\end{matrix}\right]\left[\begin{matrix}h_1\\h_2\\h_3\\h_4\\h_5\\h_6\\h_7\\h_8\end{matrix}\right]=\left[\begin{matrix}u_2^1\\v_2^1\\u_2^2\\v_2^2\\u_2^3\\v_2^3\\u_2^4\\v_2^4\end{matrix}\right]
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u110u120u130u140v110v120v130v140101010100u110u120u130u140v110v120v130v1401010101−u11u21−u11v21−u12u22−u12v22−u13u23−u13v23−u14u24−u14v24−v11u21−v11v21−v12u22−v12v22−v13u23−v13v23−v14u24−v14v24⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡h1h2h3h4h5h6h7h8⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u21v21u22v22u23v23u24v24⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
解该线性方程组即可得到单应性矩阵 H H H。
作业
这里为大家准备了一些练习题,可以通过实践加深理解:
1 提供同名像点对的像素坐标集合,以及内参矩阵 K K K,求解本质矩阵 E E E,并分解得到 R R R和 t t t。
2 提供同名像点对的像素坐标集合,求解单应性矩阵 H H H。
(假设以上像素坐标都是畸变纠正后的坐标。)
参考答案地址:https://github.com/ethan-li-coding/StereoV3DCode [代码持续更新,大家感兴趣可以star和watch]