概述
文章目录
- @[toc]
- 前言
- 什么是立体视觉
- 对极几何
- 对极约束
- 本征矩阵
- 去掉归一化坐标系的限制,引入基础矩阵
- Reference
文章目录
- @[toc]
- 前言
- 什么是立体视觉
- 对极几何
- 对极约束
- 本征矩阵
- 去掉归一化坐标系的限制,引入基础矩阵
- Reference
前言
在立体视觉中,我们通过多个摄像机的相互配合,可以获得关于现实生活中物体的一些3D信息,通过这些信息,我们可以对这个物体进行重建,建模等等。而在立体视觉中,对极几何有着非常重要的作用,在本文中,笔者将讨论下立体视觉中的对极几何,如何用对极几何去进行更好更快地寻找不同视图中的对应点。如有谬误,请联系指正。转载请注明出处。
∇ nabla ∇ 联系方式:
e-mail: FesianXu@gmail.com
QQ: 973926198
github: https://github.com/FesianXu
知乎专栏: 计算机视觉/计算机图形理论与应用
微信公众号:
什么是立体视觉
立体视觉(Stereo Vision)是什么呢?我们可以这样理解:
立
体
视
觉
(
S
t
e
r
e
o
V
i
s
i
o
n
)
=
寻
找
相
关
性
(
C
o
r
r
e
s
p
o
n
d
e
n
c
e
s
)
+
重
建
(
R
e
c
o
n
s
t
r
u
c
t
i
o
n
)
立体视觉(Stereo Vision) = 寻找相关性(Correspondences) + 重建(Reconstruction)
立体视觉(StereoVision)=寻找相关性(Correspondences)+重建(Reconstruction)
- Correspondences: 给定一张图片中的像素 P l P_l Pl点,寻找其在另一张图片中的对应点 P r P_r Pr。
- Reconstruction: 给定一组对应点对 ( P l , P r ) (P_l, P_r) (Pl,Pr),计算其在空间中对应点 P P P的3D坐标。
那么,在本文中,其实我们要讨论的内容就属于如何去更好更快地寻找对应点。抱着这个问题,我们正式地开始讨论对极几何吧。
对极几何
假设我们现在有两张从不同视角拍摄的,关于同一个物体的图片,如Fig 2.1所示,最为朴素的想法就是从一个2D区域中去寻找对应点,这样显然我们的计算复杂度很高,而且还不一定精准,那么我们有没有能够改善这个算法的方案呢?我们能不能对对应点的可能搜索范围进一步缩小呢?答案是可以的。
通过对极几何的约束,我们可以把搜索空间限制在一个直线上,我们将这个直线称之为对极线,显然,这样不仅提供了搜索的效率,还提高了搜索的精确度。如Fig 2.2所示。
这个对极几何那么神奇,那到底是什么原理呢?且听笔者慢慢道来。
对极约束
为了简单分析考虑,我们现在只是假设两台摄像机的情况,假设我们已经对摄像机进行了内外参数的标定[2],也就是说,我们已经知道了摄像机的朝向以及彼此之间的距离,相对位置关系等,同时也知道了内参数,也就是焦距等等。那么我们假设现在这两台摄像机同时对某个现实物体点 P P P进行成像,我们有几何关系示意图Fig 2.3。
在Fig 2.3中,其中的 P = ( x , y , z ) P = (x,y,z) P=(x,y,z)是实体3D点,而 O O O和 O ′ O^{prime} O′是两个摄像机的焦点(对于焦点,读者不妨看成是一个观察者的视角,也就是你可以想象成你在 O O O和 O ′ O^{prime} O′点观察P点。),而成像平面 ∏ prod ∏和 ∏ ′ prod^{prime} ∏′就是我们的成像面,其中面上的 p p p和 p ′ p^{prime} p′是实体点P的成像对应点,我们需要找的对应关系,其实就是 ( p , p ′ ) (p, p^{prime}) (p,p′)这样的点对。
对于这两个不同的相机坐标系,我们对于这两个成像点有着不同的坐标系表达,让我们分别以各自的焦点为原点,表达这两个点,有:
p
=
[
p
1
p
2
f
]
和
p
′
=
[
p
1
′
p
2
′
f
′
]
(2.1)
mathbf{p} = left[ begin{matrix} p_1 \ p_2 \ f \ end{matrix} right] 和 , , mathbf{p^{prime}} = left[ begin{matrix} p_1^{prime} \ p_2^{prime} \ f^{prime} \ end{matrix} right] tag{2.1}
p=⎣⎡p1p2f⎦⎤和p′=⎣⎡p1′p2′f′⎦⎤(2.1)
对于Fig 2.3中的其他几何元素,我们分别给予术语,以方便称呼:
- 点 e e e和点 e ′ e^{prime} e′称之为极点(epipole)
- 线 l l l和 l ′ l^{prime} l′称之为对极线(epipolar line),其中 l l l是点 p ′ p^{prime} p′的对极线, l ′ l^{prime} l′是点 p p p的对极线。
- 焦点之间的连线 O O ′ OO^{prime} OO′称之为基线(Baseline)
- 平面 P O O ′ POO^{prime} POO′称之为对极面(epipolar plane)。
具体的元素位置,我们还能参考图Fig 2.4中的英语标注。
那么由图Fig 2.3我们其实很容易发现,所谓的对极约束,指的就是,成像平面 ∏ prod ∏上的点 p p p,其在 ∏ ′ prod^{prime} ∏′的对应点 p ′ p^{prime} p′必然在其对极线 l ′ l^{prime} l′上,这个关系可以由三者共面很容易看出来,其证明可参考[3]。也就是说,对于点 p p p,如果我们要搜索其在另一个成像平面上的对应点,无需在整个平面上搜索,只需要在对极线上寻找即可了。如图Fig 2.5所示,我们发现这个几何关系其实是很直观的。
再如图Fig 2.6所示,这是个实际图像的例子,我们发现我们刚才在几何上的结论在实际中是成立的。
同时,我们要注意到,我们的基线和成像平面的位置是不会改变的(假设不改变摄像机的相对位置的话),那么显然,不管实体点 P P P的位置在哪里,所有的对极线都是会经过极点的,如图Fig 2.7所示,其中虚线表示不同的对极面,不管对极面是哪个,都是会经过基线的;相对应的,所有的对极线也是会经过极点的。
好的,那么我们以上就直觉上讨论了对极约束,那么我们应该怎么用代数的方式去描述这个约束呢?毕竟只有用代数的方式表达,才能进行计算机的编程和实现。为了实现代数化,我们要引入所谓的本征矩阵。我们接下来讨论这个。
本征矩阵
还记得公式(2.1)中,我们曾经对两个对应点
p
p
p和
p
′
p^{prime}
p′进行了坐标表达吗?假设我们现在知道了每台摄像机的内部参数,并且图像坐标已经归一化[4,5],这里所说的归一化指的是假设存在一个焦距为1的面,如Fig 2.8所示,这里假设焦距为单位长度,是为了后面的分析方便而已,我们将会看到,当考虑实际焦距时,其处理略有不同。进行了归一化之后,我们有
p
=
p
^
p
′
=
p
^
′
begin{aligned}mathbf{p} &= mathbf{hat{p}} \mathbf{p}^{prime} &= mathbf{hat{p}}^{prime}end{aligned}
pp′=p^=p^′
其中
p
^
,
p
^
′
mathbf{hat{p}}, mathbf{hat{p}}^{prime}
p^,p^′是图像点的单位坐标向量。
OK, 不管怎么样,我们继续我们的讨论。我们发现在Fig 2.3中,
O
p
⃗
,
O
′
p
′
⃗
vec{Op}, vec{O^{prime}p^{prime}}
Op,O′p′和
O
O
′
⃗
vec{OO^{prime}}
OO′共面,我们用代数描述就是:
O
p
⃗
⋅
[
O
O
′
⃗
×
O
′
p
′
⃗
]
=
0
(2.2)
vec{Op} cdot [vec{OO^{prime}} times vec{O^{prime}p^{prime}}] = 0 tag{2.2}
Op⋅[OO′×O′p′]=0(2.2)
其中,
×
times
×表示的是向量叉乘,我们知道空间向量叉乘表示求得其在右手坐标系中的正交向量,如图Fig 2.9所示。
而式子中的点积为0表示了垂直关系,因此式子(2.2)正确表达了我们的对极约束,我们接下来代入坐标。
考虑在
∏
′
prod^{prime}
∏′中表示点
p
p
p,通过坐标的平移和旋转可以容易实现,见:
q
′
=
R
(
p
−
t
)
(2.3)
mathbf{q}^{prime} = mathbf{R}(mathbf{p}-mathbf{t}) tag{2.3}
q′=R(p−t)(2.3)
其中
t
mathbf{t}
t表示平移向量,
R
mathbf{R}
R表示旋转矩阵。那么反过来有:
p
=
R
T
q
′
+
t
=
R
T
(
q
′
+
R
t
)
(2.4)
mathbf{p} = mathbf{R}^{mathrm{T}}mathbf{q}^{prime}+mathbf{t} = mathbf{R}^{mathrm{T}}(mathbf{q}^{prime}+mathbf{R}mathbf{t}) tag{2.4}
p=RTq′+t=RT(q′+Rt)(2.4)
令
R
′
=
R
T
R^{prime} = mathbf{R}^{mathrm{T}}
R′=RT和
s
′
=
−
R
t
s^{prime} = -mathbf{R}mathbf{t}
s′=−Rt,我们有(2.4)的简化形式:
p
=
R
′
(
q
′
−
s
′
)
(2.5)
mathbf{p} = R^{prime} (mathbf{q}^{prime}-s^{prime}) tag{2.5}
p=R′(q′−s′)(2.5)
考虑公式(2.2),我们发现:
O
p
⃗
=
p
O
O
′
⃗
=
t
O
′
p
′
⃗
=
p
′
(2.6)
begin{aligned} vec{Op} &= mathbf{p} \ vec{OO^{prime}} &= mathbf{t} \ vec{O^{prime}p^{prime}} &= mathbf{p}^{prime} end{aligned} tag{2.6}
OpOO′O′p′=p=t=p′(2.6)
注意到,因为对于垂直关系而言,平移与否没有影响,我们最终有式子:
p
⋅
[
t
×
p
′
]
=
0
(
R
p
)
⋅
[
t
×
p
′
]
=
0
(
R
p
)
T
[
t
×
p
′
]
=
0
p
T
R
T
[
t
×
p
′
]
=
0
p
T
R
T
[
t
]
×
p
′
=
0
(2.7)
begin{aligned}mathbf{p} cdot [mathbf{t} times mathbf{p}^{prime}] &= 0 \(mathbf{R} mathbf{p}) cdot [mathbf{t} times mathbf{p}^{prime}] &= 0 \(mathbf{R} mathbf{p})^{mathrm{T}} [mathbf{t} times mathbf{p}^{prime}] &= 0 \mathbf{p}^{mathrm{T}} mathbf{R}^{mathrm{T}} [mathbf{t} times mathbf{p}^{prime}] &= 0 \mathbf{p}^{mathrm{T}} mathbf{R}^{mathrm{T}}[mathbf{t}]_{times} mathbf{p}^{prime} &= 0end{aligned}tag{2.7}
p⋅[t×p′](Rp)⋅[t×p′](Rp)T[t×p′]pTRT[t×p′]pTRT[t]×p′=0=0=0=0=0(2.7)
其中,(2.7)第二行的公式表示在另一个成像平面
∏
′
prod^{prime}
∏′ 表示
∏
prod
∏上的坐标,最后一行,我们把叉乘转化成矩阵乘法操作[6]。对于一个
t
=
[
t
1
,
t
2
,
t
3
]
T
mathbf{t} = [t_1, t_2, t_3]^{mathrm{T}}
t=[t1,t2,t3]T来说,其叉乘乘子的矩阵乘法形式为:
[
t
]
×
=
[
0
−
t
3
t
2
t
3
0
−
t
1
−
t
2
t
1
0
]
(2.8)
[mathbf{t}]_{times} = left[begin{matrix}0 & -t_3 & t_2 \t_3 & 0 & -t_1 \-t_2 & t_1 & 0 end{matrix}right]tag{2.8}
[t]×=⎣⎡0t3−t2−t30t1t2−t10⎦⎤(2.8)
如果用
E
=
R
T
[
t
]
×
mathcal{E} = mathbf{R}^{mathrm{T}}[mathbf{t}]_{times}
E=RT[t]×,我们有:
(
p
T
)
E
p
′
=
0
(2.9)
(mathbf{p}^{mathrm{T}}) mathcal{E} mathbf{p}^{prime} = 0tag{2.9}
(pT)Ep′=0(2.9)
我们把这里的
E
mathcal{E}
E称之为本征矩阵(Essential matrix)。
我们发现,这里的旋转矩阵
R
mathbf{R}
R其实是可以通过相机标定进行外参数估计得到的,同样的,
t
mathbf{t}
t也是如此。假设,我们现在已知了
∏
prod
∏上的点
p
p
p,我们可以令
μ
p
=
(
p
T
)
E
∈
R
3
mathbf{mu}_p = (mathbf{p}^{mathrm{T}}) mathcal{E} in mathbb{R}^3
μp=(pT)E∈R3,我们知道这个是个常数向量。最终,公式(2.9)可以写成:
μ
p
p
′
=
0
(2.10)
mathbf{mu}_p mathbf{p}^{prime} = 0 tag{2.10}
μpp′=0(2.10)
我们发现(2.10)其实就是一个直线方程了,这个直线方程正是
p
p
p的对极线,我们需要搜索的对应点
p
′
p^{prime}
p′正是在对极线上。
去掉归一化坐标系的限制,引入基础矩阵
我们在本征矩阵那一节考虑的是归一化的坐标系,那么如果在原始的图像坐标系中,我们需要改写成:
p
=
K
p
^
p
′
=
K
′
p
^
′
(2.11)
begin{aligned}mathbf{p} &= mathcal{K} mathbf{hat{p}} \mathbf{p}^{prime} &= mathcal{K}^{prime} mathbf{hat{p}}^{prime}end{aligned}tag{2.11}
pp′=Kp^=K′p^′(2.11)
其中,
K
,
K
′
mathcal{K}, mathcal{K}^{prime}
K,K′是
3
×
3
3 times 3
3×3的标定矩阵,
p
^
,
p
^
′
mathbf{hat{p}}, mathbf{hat{p}}^{prime}
p^,p^′是图像点的单位坐标向量。那么我们有:
p
T
F
p
′
=
0
(2.12)
mathbf{p}^{mathrm{T}} mathcal{F} mathbf{p}^{prime} = 0tag{2.12}
pTFp′=0(2.12)
其中,矩阵
F
=
K
−
T
E
K
′
−
1
mathcal{F} = mathcal{K}^{-mathrm{T}} mathcal{E} {mathcal{K}^{prime}}^{-1}
F=K−TEK′−1称之为基础矩阵(Fundamental matrix)。
通常来说,无论是基础矩阵还是本征矩阵都可以通过内外参数的标定来求得,特别地,通过足够多的的图像匹配计算,我们同样可以无须采用标定图像,也可以得到这两个矩阵。
Reference
[1]. 电子科技大学自动化学院 杨路 老师 计算机视觉课程课件。
[2]. https://blog.csdn.net/LoseInVain/article/details/102632940
[3]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[4]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[5]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[6]. https://en.wikipedia.org/wiki/Cross_product
最后
以上就是优雅斑马为你收集整理的立体视觉中的对极几何——如何更好更快地寻找对应点前言什么是立体视觉对极几何Reference的全部内容,希望文章能够帮你解决立体视觉中的对极几何——如何更好更快地寻找对应点前言什么是立体视觉对极几何Reference所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复