世界坐标系
(
O
−
X
w
−
Y
w
)
(O - X_w - Y_w)
(O−Xw−Yw) -> 相机坐标系
(
O
−
X
c
−
Y
c
)
(O - X_c - Y_c)
(O−Xc−Yc) -> 图像坐标系
(
O
−
X
i
−
Y
i
)
(O - X_i - Y_i)
(O−Xi−Yi)-> 像素坐标系
(
O
−
U
−
V
)
(O - U - V)
(O−U−V)
像素坐标系
(
O
−
U
−
V
)
(O - U - V)
(O−U−V) -> 图像坐标系
(
O
−
X
i
−
Y
i
)
(O - X_i - Y_i)
(O−Xi−Yi) -> 相机坐标系
(
O
−
X
c
−
Y
c
)
(O - X_c - Y_c)
(O−Xc−Yc) -> 世界坐标系
(
O
−
X
w
−
Y
w
)
(O - X_w - Y_w)
(O−Xw−Yw)
世界坐标系 ( O − X w − Y w ) (O - X_w - Y_w) (O−Xw−Yw) <-> 相机坐标系 ( O − X c − Y c ) (O - X_c - Y_c) (O−Xc−Yc)
相机的外参矩阵:描述世界坐标系下的点,经过旋转和平移,转换成相机坐标系的矩阵。
世界坐标系 -> 相机坐标系:利用外参先旋转后平移
[
X
c
Y
c
Z
c
]
=
R
x
R
y
R
z
[
X
w
Y
w
Z
w
]
+
[
T
x
T
y
T
z
]
\left[ \begin{matrix} X_c\\ Y_c\\ Z_c\end{matrix} \right] = R_x R_yR_z \left[ \begin{matrix} X_w\\ Y_w\\ Z_w\end{matrix} \right] + \left[ \begin{matrix} T_x\\ T_y\\ T_z\end{matrix} \right]
XcYcZc
=RxRyRz
XwYwZw
+
TxTyTz
相机的外参矩阵由旋转矩阵
R
x
R
y
R
z
R_xR_yR_z
RxRyRz和平移矩阵
[
T
x
T
y
T
z
]
\left[\begin{matrix} T_x\\ T_y\\ T_z\end{matrix}\right]
TxTyTz
共同组成。假设世界坐标系通过分别绕着X, Y, Z分别沿着右手法则方向旋转
α
\alpha
α,
β
\beta
β,
γ
\gamma
γ得到相机坐标系,对应的旋转矩阵分别为
R
x
R_x
Rx,
R
y
R_y
Ry,
R
z
R_z
Rz.
我们可以得知旋转矩阵
R
x
=
[
1
0
0
0
cos
(
α
)
sin
(
α
)
0
−
sin
(
α
)
cos
(
α
)
]
,
R
y
=
[
cos
(
β
)
0
sin
(
β
)
0
1
0
−
sin
(
β
)
0
cos
(
β
)
]
,
R
y
=
[
cos
(
γ
)
sin
(
γ
)
0
−
sin
(
γ
)
cos
(
γ
)
0
0
0
1
]
,
R_x = \left[ \begin{matrix} 1 & 0 & 0\\ 0 & \cos(\alpha) & \sin(\alpha) \\ 0 & -\sin(\alpha) & \cos(\alpha) \end{matrix} \right], R_y = \left[ \begin{matrix} \cos(\beta) & 0 & \sin(\beta) \\ 0 & 1 & 0 \\ -\sin(\beta)& 0 & \cos(\beta) \end{matrix} \right], R_y = \left[ \begin{matrix} \cos(\gamma) & \sin(\gamma) & 0 \\ -\sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 \end{matrix} \right],
Rx=
1000cos(α)−sin(α)0sin(α)cos(α)
,Ry=
cos(β)0−sin(β)010sin(β)0cos(β)
,Ry=
cos(γ)−sin(γ)0sin(γ)cos(γ)0001
,
相机坐标系 -> 世界坐标系: 利用外参先平移后旋转
[
X
w
Y
w
Z
w
]
=
(
R
x
R
y
R
z
)
(
−
1
)
(
[
X
c
Y
c
Z
c
]
−
[
T
x
T
y
T
z
]
)
\left[ \begin{matrix} X_w\\ Y_w\\ Z_w\end{matrix} \right] = (R_x R_yR_z)^{(-1)} (\left[ \begin{matrix} X_c\\ Y_c\\ Z_c\end{matrix} \right] - \left[ \begin{matrix} T_x\\ T_y\\ T_z\end{matrix} \right])
XwYwZw
=(RxRyRz)(−1)(
XcYcZc
−
TxTyTz
)
相机坐标系 -> 图像坐标系
假设相机坐标下的点
P
c
(
x
c
,
y
c
,
z
c
)
P_c(x_c, y_c, z_c)
Pc(xc,yc,zc), 焦距为
f
c
f_c
fc, 物理成像平面上的点
P
i
(
x
i
,
y
i
)
P_i(x_i, y_i)
Pi(xi,yi)。由小孔成像原理知道,点
P
c
P_c
Pc经过相机的光心O投影到物理成像平面点
P
i
P_i
Pi。由像素三角形可以得到:
x
c
x
i
=
y
c
y
i
=
z
c
f
c
=
>
x
i
=
f
c
z
c
x
c
,
y
i
=
f
c
z
c
y
c
\frac{x_c}{x_i} = \frac{y_c}{y_i} = \frac{z_c}{f_c} => x_i = \frac{f_c}{z_c}x_c, y_i = \frac{f_c}{z_c}y_c
xixc=yiyc=fczc=>xi=zcfcxc,yi=zcfcyc
写成矩阵形式为
z
c
[
x
i
y
i
1
]
=
[
f
c
0
0
0
f
c
0
0
0
1
]
[
x
c
y
c
z
c
]
z_c\left[ \begin{matrix} x_i\\ y_i\\ 1\end{matrix} \right] = \left[ \begin{matrix} f_c & 0 & 0\\ 0 & f_c & 0\\ 0 & 0 & 1\end{matrix} \right] \left[ \begin{matrix} x_c\\ y_c\\ z_c \end{matrix} \right]
zc
xiyi1
=
fc000fc0001
xcyczc
从上面可以知道,如果已知相机焦距,相机坐标系的点到图像坐标系的点是可以转换的,也就是已知
P
c
P_c
Pc和
f
c
f_c
fc可以得到
P
i
P_i
Pi. 而图像坐标系的点到相机坐标系的点是没法转换,也就是已知
P
i
P_i
Pi和
f
c
f_c
fc没法直接得到
P
c
P_c
Pc。缺少深度信息,图像坐标系上的点映射到相机坐标系是一条射线。
图像坐标系 <-> 像素坐标系
图像坐标系还是在物理空间,单位还是m. 像素坐标系的单位是像素个数。分辨率R是指单位距离内存在的像素个数。通常情况下像素坐标系用平面O-U-V表示. 像素坐标系的通常定义是原点位于图像的左上角,u轴向右与图像坐标系X轴平行,v轴向下与图像坐标系Z轴平行。图像坐标系和像素坐标系存在缩放和原点平移关系。假设图像坐标系上的点
P
i
(
x
i
,
y
i
)
P_i(x_i, y_i)
Pi(xi,yi), 像素坐标系上的点
P
(
u
,
v
)
P(u, v)
P(u,v)。像素坐标在u轴上缩放了
R
x
R_x
Rx倍, 在v轴缩放了
R
y
R_y
Ry倍,同时原点平移了
[
c
x
,
c
y
]
T
\left[c_x, c_y \right]^T
[cx,cy]T.
[
u
v
]
=
[
R
x
0
0
R
y
]
[
x
i
y
i
]
+
[
c
x
c
y
]
\left[ \begin{matrix} u\\ v \end{matrix} \right]= \left[\begin{matrix} R_x & 0 \\ 0 & R_y\end{matrix}\right] \left[\begin{matrix} x_i \\ y_i \end{matrix}\right] + \left[\begin{matrix} c_x \\ c_y \end{matrix}\right]
[uv]=[Rx00Ry][xiyi]+[cxcy]
从上面可以得知,图像坐标系上的点到像素坐标系上的点经过了缩放和平移过程。
相机内参矩阵:描述相机坐标系上的点,通过缩放和平移,转换成像素坐标系上的点的矩阵。
结合相机坐标系 -> 图像坐标系 -> 像素坐标系,可以得到:
z
c
[
u
v
1
]
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
x
c
y
c
z
c
]
=
K
[
x
c
y
c
z
c
]
z_c\left[ \begin{matrix} u\\ v\\ 1\end{matrix} \right] = \left[ \begin{matrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1\end{matrix} \right] \left[ \begin{matrix} x_c\\ y_c\\ z_c \end{matrix} \right] = K\left[ \begin{matrix} x_c\\ y_c\\ z_c \end{matrix} \right]
zc
uv1
=
fx000fy0cxcy1
xcyczc
=K
xcyczc
上面的K即是相机内参,
f
x
=
R
x
f
c
,
f
y
=
R
y
f
c
f_x = R_xf_c, f_y = R_yf_c
fx=Rxfc,fy=Ryfc.
总体而言世界坐标到像素坐标的转换为
z
c
[
u
v
1
]
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
x
c
y
c
z
c
]
=
K
[
x
c
y
c
z
c
]
=
K
[
R
x
R
y
R
z
[
X
w
Y
w
Z
w
]
+
[
T
x
T
y
T
z
]
]
z_c\left[ \begin{matrix} u\\ v\\ 1\end{matrix} \right] = \left[ \begin{matrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1\end{matrix} \right] \left[ \begin{matrix} x_c\\ y_c\\ z_c \end{matrix} \right] = K\left[ \begin{matrix} x_c\\ y_c\\ z_c \end{matrix} \right] = K\left[R_x R_yR_z \left[ \begin{matrix} X_w\\ Y_w\\ Z_w\end{matrix} \right] + \left[ \begin{matrix} T_x\\ T_y\\ T_z\end{matrix} \right]\right]
zc
uv1
=
fx000fy0cxcy1
xcyczc
=K
xcyczc
=K
RxRyRz
XwYwZw
+
TxTyTz