坐标系类型
- 世界坐标系:指的就是真实世界中的一个坐标系,单位是m,其中任意一点及其坐标表示为 P w = [ X w , Y w , Z w ] T P_w=[X_w,Y_w,Z_w]^T Pw=[Xw,Yw,Zw]T
- 相机坐标系:以光圈 O O O为原点的右手坐标系(一般都是右手坐标系,当然也可以是左手),z轴一般与光轴重合(与成像平面垂直),单位为m,其中任意一点及其坐标表示为 P c = [ X c , Y c , Z c ] T P_c=[X_c,Y_c,Z_c]^T Pc=[Xc,Yc,Zc]T
- 图像物理坐标系:就是虚拟成像平面上的坐标系,是一个二维坐标系,原点在虚拟成像平面中心,单位是mm,相当于是用物理单位来描述像素的位置,其上任意一点的坐标可表示为 P = [ x , y ] T P=[x,y]^T P=[x,y]T
- 像素平面坐标系:就是最后的数字图像上的二维坐标系,一般坐标原点在图像的左上角,单位是像素,从图像物理坐标系到像素平面坐标系,存在一个缩放和平移,其上任意一点的坐标表示为
p
=
[
u
,
v
]
T
p=[u,v]^T
p=[u,v]T
`
世界坐标系—>像素坐标系
1. 从世界坐标系转换到相机坐标系
二者处于同一空间,只是位置和方向不同,因此只需要旋转和平移操作。通过 W 2 C W2C W2C外参矩阵完成,将世界坐标系中的点转换到相机坐标系中
假设世界坐标系中的点为 ( X w , Y w , Z w ) (X_w, Y_w, Z_w) (Xw,Yw,Zw),相机坐标系中的点为 ( X c , Y c , Z c ) (X_c, Y_c, Z_c) (Xc,Yc,Zc)
W2C
=
(
R
T
0
1
)
\text{W2C} = \begin{pmatrix} R & T \\ 0 & 1 \end{pmatrix}
W2C=(R0T1)
其中:
- R R R 是3x3的旋转矩阵,描述相机的旋转
- T T T 是3x1的平移向量,描述相机在世界坐标系中的位置
转换过程如下:
(
X
c
Y
c
Z
c
1
)
=
W2C
(
X
w
Y
w
Z
w
1
)
\begin{pmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{pmatrix} = \text{W2C} \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix}
XcYcZc1
=W2C
XwYwZw1
这一步完成后,得到了点在相机坐标系中的坐标
(
X
c
,
Y
c
,
Z
c
)
(X_c, Y_c, Z_c)
(Xc,Yc,Zc)
2. 从相机坐标系转换到图像坐标系
`
- P P P:世界坐标系中的一点
- O x y O_{xy} Oxy:图像坐标系,光心为图像中点
- p p p:点 P P P在图像中的成像点,在图像坐标系中为 ( x , y ) (x,y) (x,y),在像素坐标系中为 ( u , v ) (u,v) (u,v)
- f f f:相机焦距, o O c oO_c oOc的长度
接下来,通过透视投影将相机坐标系中的三维点投影到图像坐标系中
根据相似三角形可得出如下关系式:
A B o C = A O c o O c = P B p C = X c x = Z c f = Y c y x = f X c Z c , y = f Y c Z c \frac{AB}{oC}=\frac{AO_c}{oO_c}=\frac{PB}{pC}=\frac{X_c}{x}=\frac{Z_c}{f}=\frac{Y_c}{y} \\ x = f\frac{X_c}{Z_c}, \quad y = f\frac{Y_c}{Z_c} oCAB=oOcAOc=pCPB=xXc=fZc=yYcx=fZcXc,y=fZcYc
齐次坐标的表示:
Z
c
(
x
y
1
)
=
(
f
0
0
0
0
f
0
0
0
0
1
0
)
(
X
c
Y
c
Z
c
1
)
Z_c \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{pmatrix}
Zc
xy1
=
f000f0001000
XcYcZc1
❓为什么 △ A B O c \triangle ABO_c △ABOc和 △ P B O c \triangle PBO_c △PBOc不在一个平面,但是仍有等比关系
因为有一条公共边,所以二者的比例相同
3. 从图像坐标系到像素坐标系
`
像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。
- 图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点
- 像素坐标系的原点在成像平面的左上角
图像坐标系的单位是mm,是物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这两者之间的转换关系如下:
u
=
x
d
x
+
u
0
,
(
1
p
i
x
e
l
=
d
x
m
m
)
v
=
y
d
y
+
v
0
,
(
1
p
i
x
e
l
=
d
y
m
m
)
u = \frac{x}{dx}+u_0 ,(1pixel=dxmm)\\ v = \frac{y}{dy}+v_0,(1pixel=dymm)
u=dxx+u0,(1pixel=dxmm)v=dyy+v0,(1pixel=dymm)
齐次坐标形式:
(
u
v
1
)
=
(
1
d
x
0
u
0
0
1
d
y
v
0
0
0
1
)
(
x
y
z
1
)
\begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \begin{pmatrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix}
uv1
=
dx1000dy10u0v01
xyz1
4. 完整公式
将以上步骤结合在一起,可以得到从世界坐标系到图像坐标系的完整转换公式:
Z c ( u v 1 ) = K ⋅ W2C ⋅ ( X w Y w Z w 1 ) Z_c \begin{pmatrix} u \\v \\1\\ \end{pmatrix} = K \cdot \text{W2C} \cdot \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1\\ \end{pmatrix} Zc uv1 =K⋅W2C⋅ XwYwZw1
相机内参矩阵通常表示为:
K = ( f x 0 u 0 0 f y v 0 0 0 1 ) K = \begin{pmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{pmatrix} K= fx000fy0u0v01
Z c Z_c Zc是该点在相机坐标系下的深度值,即从相机到该点的距离