针孔相机模型
- 坐标系
- (1) 图像像素坐标系
- (2) 图像物理坐标系
- (3) 相机坐标系
- (4) 归一化平面坐标系
- (5) 世界坐标系
- 畸变校正
针孔相机模型中一般会涉及到图像像素坐标系、图像物理坐标系、相机坐标系、归一化平面坐标系和世界坐标系这5个坐标系。
坐标系
(1) 图像像素坐标系
图像像素坐标系u-v是像素点的水平方向和垂直方向作为该坐标系的u轴和v轴。图像中的像素坐标点表示为(u,v),图像的中心像素点表示为(u0,v0)。
(2) 图像物理坐标系
同样,如上图所示,图像物理坐标系(本文简称其为物理系)x-y的中心点是图像成像平面的中心位置,也就是像素系的中点。与像素系不同的是,物理系的单位是mm,而像素坐标系的单位是像素。因此,物理系与像素坐标系之间存在一个转换关系,其表示为:
{
u
=
u
0
+
x
d
x
v
=
v
0
+
y
d
y
⇒
[
u
v
1
]
=
[
1
/
d
x
s
u
0
0
1
/
d
y
v
0
0
0
1
]
[
x
y
1
]
\left\{\begin{array}{l}u=u_0+\frac{x}{d_x} \\ v=v_0+\frac{y}{d_y}\end{array} \Rightarrow\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{ccc}1 / d_x & s & u_0 \\ 0 & 1 / d_y & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{l}x \\ y \\ 1\end{array}\right]\right.
⎩
⎨
⎧u=u0+dxxv=v0+dyy⇒
uv1
=
1/dx00s1/dy0u0v01
xy1
其中(u,v)是像素坐标,(u0,v0)表示在像素坐标系下的主点坐标,(x,y)是物理坐标。 1/dx,1/dy分别表示x、y轴方向一个像素点对应的物理距离,即相元尺寸,一般来说两者相等;s表示u轴和v轴的不垂直因子,一般情况下不做考虑,设置为0即可。
(3) 相机坐标系
如图所示,相机坐标系(本文简称其为相机系)是以相机光心Oc为原点建立的三维坐标系Oc-XcYcZc。为了更清楚地表示相机系与物理系之间的关系,按照小孔成像的原理,将成像平面对称到相机光心的另一侧。
相机系下的三维空间点P与图像平面的二维像素点P’构成相似三角形,如上图右侧所示。根据三角形相似,因此有:
{
x
=
f
X
c
Z
c
y
=
f
Y
c
Z
c
⇒
Z
c
[
x
y
1
]
=
[
f
0
0
0
0
f
0
0
0
0
1
0
]
[
X
c
Y
c
Z
c
1
]
\left\{ \begin{matrix} x = f\frac{{{X_c}}}{{{Z_c}}}\\ y = f\frac{{{Y_c}}}{{{Z_c}}} \end{matrix} \right. \Rightarrow {Z_c}\left[ \begin{matrix}x\\y\\1\end{matrix} \right] = \left[ {\begin{matrix} f&0&{\begin{matrix}0&0\end{matrix}}\\0&f&{\begin{matrix}0&0\end{matrix}}\\0&0&{\begin{matrix}1&0 \end{matrix}}\end{matrix}} \right]\left[ {\begin{matrix}{{X_c}}\\{{Y_c}}\\{{Z_c}}\\1\end{matrix}} \right]
{x=fZcXcy=fZcYc⇒Zc
xy1
=
f000f0000010
XcYcZc1
式中x、y表示P’点在图像平面的坐标;Xc、Yc、Zc表示P点在相机系下的坐标 ;f表示相机的焦距大小,单位为mm。
(4) 归一化平面坐标系
如上图所示,归一化平面坐标系是指在相机系下令Z=1的平面坐标系。由于P点的坐标为Pc(Xc, Yc, Zc),根据归一化原则,因此该点在归一化坐标Pg可以表示为:
P
g
=
(
X
c
/
Z
c
,
Y
c
/
Z
c
,
1
)
Pg{\rm{ = }}\left( {Xc/Zc,Yc/Zc,1} \right)
Pg=(Xc/Zc,Yc/Zc,1)
归一化平面坐标多用于相机畸变校正,以及在单目视觉SLAM初始化中实现三维空间点的归一化,得到归一化的尺度信息。
(5) 世界坐标系
同样,如上图所示,世界坐标系是指在三维场景中以任意一点作为原点建立的Ow-XwYwZw坐标系(在实际的单目视觉SLAM中,通常以初始化成功后的第一帧的相机系作为世界坐标系)。且世界坐标系和相机坐标系的转换关系使用矩阵形式表示为:
[
X
c
Y
c
Z
c
1
]
=
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
\left[ \begin{matrix} {X_c}\\{Y_c}\\{Z_c}\\1\end{matrix} \right] = \left[ {\begin{matrix}R&t\\ {{0^T}}&1\end{matrix}} \right]\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\1\end{matrix}} \right]
XcYcZc1
=[R0Tt1]
XwYwZw1
其中Xc、Yc、Zc表示P点在相机系下的坐标Pc(Xc, Yc, Zc);Xw,Yw,Zw表示P点在世界坐标系下的坐标Pw(Xw, Yw, Zw);R和t分别表示两者之间的的旋转、平移矩阵。
前面分别阐述了几个坐标系之间的变换关系,在相机标定过程中需要实现对这些变换关系的求解。为了更加清楚地表示这些转换关系,对空间中任意一点Pw(Xw, Yw, Zw),将之投影到像素平面,根据坐标变换关系有:
Z
c
[
u
v
1
]
=
[
1
/
d
x
s
u
0
0
1
/
d
y
v
0
0
0
1
]
[
f
0
0
0
0
f
0
0
0
0
1
0
]
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
=
[
f
x
s
u
0
0
0
f
y
v
0
0
0
0
1
0
]
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
\begin{aligned} Z_c\left[\begin{array}{c}u \\v \\1 \end{array}\right] & =\left[\begin{array}{ccc} 1 / d_x & s & u_0 \\ 0 & 1 / d_y & v_0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right]\left[\begin{array}{ll} R & t \\ 0^T & 1 \end{array}\right]\left[\begin{array}{c} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right] \\ & =\left[\begin{array}{cccc} f_x & s & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right]\left[\begin{array}{cc} R & t \\ 0^T & 1 \end{array}\right]\left[\begin{array}{c} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right] \end{aligned}
Zc
uv1
=
1/dx00s1/dy0u0v01
f000f0001000
[R0Tt1]
XwYwZw1
=
fx00sfy0u0v01000
[R0Tt1]
XwYwZw1
这里表示图像像素点与空间中三维点的对应转换关系,其中fx=f/dx,fy=f/dy,单位为像素。
由fx, fy,等参数构成的矩阵为相机的内部参数矩阵,简记为K;由R,t等参数构成的矩阵为外部参数,简记为M。因此,可以写成:
Z
c
[
l
u
v
1
]
=
K
[
r
1
r
2
r
3
t
]
[
X
w
Y
w
Z
w
1
]
=
K
M
[
X
w
Y
w
Z
w
1
]
=
H
[
X
w
Y
w
Z
w
1
]
Zc\left[ \begin{matrix}{l}u\\v\\ 1\end{matrix} \right] = K\left[ {\begin{matrix} {{r_1}}&{{r_2}}&{{r_3}}&t \end{matrix}} \right]\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\ 1\end{matrix}} \right] = KM\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\ 1\end{matrix}} \right] = H\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\ {{Z_w}}\\1\end{matrix}} \right]
Zc
luv1
=K[r1r2r3t]
XwYwZw1
=KM
XwYwZw1
=H
XwYwZw1
其中r1,r2,r3表示旋转向量,均为3x1的矩阵。这里的K是3x3的矩阵;M是3x4的矩阵;H表示最终的世界坐标系下三维点到图像像素平面二维点的投影矩阵,其大小为3x4的矩阵。
畸变校正
在相机进行场景信息获取过程中,由于相机制作过程中或是长时间使用等原因使得成像平面与透镜不完全平行,致使相机在成像时造成图像的畸变。其主要包括径向和切向畸变,具体表示如图所示:
其中(x,y)表示归一化平面上进行畸变校正前的图像点;(xdis, ydis)表示归一化平面上进行畸变校正后的点,且两者的转换关系为:
{
x
d
i
s
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
+
2
q
1
x
y
+
q
2
(
r
2
+
2
x
2
)
y
d
i
s
=
y
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
+
q
1
(
r
2
+
2
y
2
)
+
2
q
2
x
y
)
\left\{ {\begin{matrix} {{x_{dis}} = x(1 + {k_1}{r^2} + {k_2}{r^4} + {k_3}{r^6}) + 2{q_1}xy + {q_2}({r^2} + 2{x^2})}\\ {{y_{dis}} = y(1 + {k_1}{r^2} + {k_2}{r^4} + {k_3}{r^6} + {q_1}({r^2} + 2{y^2}) + 2{q_2}xy)} \end{matrix}} \right.
{xdis=x(1+k1r2+k2r4+k3r6)+2q1xy+q2(r2+2x2)ydis=y(1+k1r2+k2r4+k3r6+q1(r2+2y2)+2q2xy)
其中k1,k2, k3表示径向畸变;q1,q2表示切向畸变;r=sqrt(x^2 + y ^2),且均为常量。在计算出畸变校正后的归一化平面坐标后,需要将其转换到图像像素平面的二维点,得到:
{
u
=
f
x
x
d
i
s
+
c
x
v
=
f
y
y
d
i
s
+
c
y
\left\{ {\begin{matrix} {u = {f_x}{x_{dis}} + {c_x}}\\ {v = {f_y}{y_{dis}} + {c_y}} \end{matrix}} \right.
{u=fxxdis+cxv=fyydis+cy
可以通过内部参数矩阵K,将归一化平面的三维坐标点转换到图像平面的二维坐标点,实现图像的畸变校正。