三维重建理论知识总结(一)
一、几个坐标系
像素坐标系 -> 像平面坐标系 -> 相机坐标系 -> 世界坐标系
-
像素坐标系:以左下角为原点的二维坐标系,所有拍摄到的图像,在存入矩阵Mat后,基本上都是在该坐标系下对像素进行操作;
-
像平面坐标系:以图像为中心的二维坐标系,可以由像素坐标系旋转平移得到;
-
相机坐标系:三维坐标系,从光心射出Z轴;
-
世界坐标系:描述不同相机下的同一个物体,为了使每个相机坐标系下的确定的点累计起来形成点云,需要一个统一的三维坐标系(可以是自己定义,比如可以将第一张图的相机坐标系作为世界坐标系);
转换公式如下:
P
′
=
K
[
I
0
]
[
R
T
0
1
]
P
w
=
K
[
R
T
]
P
w
=
M
P
w
(1)
P^{\prime} = K \left[\begin{matrix} I & 0 \end{matrix} \right] \left[\begin{matrix} R & T \\ 0 & 1 \end{matrix} \right] P_{w}= K \left[\begin{matrix} R & T \end{matrix} \right] P_{w} = MP{w} \tag{1}
P′=K[I0][R0T1]Pw=K[RT]Pw=MPw(1)
上述公式描述了像素坐标系(或者像平面坐标系)结合内参矩阵 K 可以得到相机坐标系 P ′ = K P c P^{\prime} = K P_c P′=KPc ,其中 P c P_c Pc 代表相机坐标系下的坐标;这里需要注意,为了将公式表示成齐次坐标的形式,用的都是齐次坐标而非欧式坐标(简单的讲就是多一维,在两种坐标变换时只用进行一个尺度变换,除以最后一维的值)。
得到相机坐标系后,可以结合旋转矩阵与平移向量将相机坐标系下的坐标变换到世界坐标系下。 M M M 被称为投影矩阵,它包含了相机外参、内参信息,描述了一个图像像素坐标到世界坐标系下三维点的转换。
二、相机的标定
对相机进行标定可以求解相机的内外参数 K 、 R 、 T K、R、T K、R、T。但是对于我目前学习以及将要实现的功能而言只需要内参就够了。
相机标定可以用 Matlab 中的内置工具包实现,所以我也不再赘述原理。一般会得到
K
K
K 矩阵和畸变参数。畸变参数矩阵如下:
(
1
λ
0
0
0
1
λ
0
0
0
1
)
(2)
\left(\begin{matrix} {1}\over{\lambda} & 0 & 0 \\ 0 & {1}\over{\lambda} & 0 \\ 0 & 0 & 1 \end{matrix} \right) \tag{2}
λ1000λ10001
(2)
其中
λ
=
1
±
∑
p
=
1
3
k
p
d
2
\lambda = 1 \pm \displaystyle \sum ^3 _{p=1} {k_p d^2}
λ=1±p=1∑3kpd2,
k
p
k_p
kp 是畸变因子,
d
=
u
2
+
v
2
d = \sqrt{u^2 + v^2}
d=u2+v2 即像平面坐标系中,某点到中心坐标的距离。
三、极几何与三角化
由第一节我们知道像素和三维空间的关系可以由投影矩阵 M M M 练习起来,并且投影矩阵可以由相机的内参、和关于世界坐标系的旋转和平移求得。实际应用中,我们通常会遇到如下两种情况:
- 已知两幅图像中对应点的像素坐标 p 、 p ′ p、p^{\prime} p、p′ ,以及两个相机的内参 K 、 K ′ K、K^{\prime} K、K′ ;
- 已知两幅图像中对应点的像素坐标 p 、 p ′ p、p^{\prime} p、p′。
所以多视图几何有三个关键问题:
- 摄像机几何问题:根据一张或者多张图求解相机内外参数(标定);
- 场景几何问题:通过多张图片寻找3D场景坐标(三角化);
- 像素对应关系问题;已知 p p p 如何在另一个图中找到 p ′ p^{\prime} p′ (极线矫正/图像校正)