最近一直在从事单目相机测距相关工作,相机模型是一个绕不过的知识点,索性趁此总结,以供后续查阅。
1.前置知识
进行相机模型介绍前,需要对基本的坐标系变换公式有一个了解。
1.1 坐标系旋转公式
如图1所示:(右手坐标系
)直角坐标系
x
′
y
′
z
′
x'y'z'
x′y′z′绕
z
′
z'
z′轴顺时针
旋转
θ
\theta
θ 角度,得到新坐标系
x y z xyz xyz,则原来的坐标系下R点坐标 [ x ′ , y ′ , z ′ ] [x',y',z'] [x′,y′,z′]与新坐标系下R点坐标 [ x , y , z ] [x,y,z] [x,y,z]关系为:
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= [ c o s θ − s i n θ 1 s i n θ c o s θ 1 0 0 1 ] \begin{bmatrix} cosθ&-sinθ&1\\ sinθ & cosθ& 1\\ 0&0&1\\ \end{bmatrix} ⎣⎡cosθsinθ0−sinθcosθ0111⎦⎤ [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤=R1 [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤
同理:绕 x x x, y y y轴顺时针旋转 ϕ \phi ϕ, ω \omega ω :
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= [ 1 0 0 0 c o s ϕ − s i n ϕ 0 s i n ϕ c o s ϕ ] \begin{bmatrix} 1&0&0\\ 0 & cos\phi& -sin\phi\\ 0&sin\phi&cos\phi\\ \end{bmatrix} ⎣⎡1000cosϕsinϕ0−sinϕcosϕ⎦⎤ [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤=R2 [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= [ c o s ω 0 s i n ω 0 1 0 − s i n ω 0 c o s ω ] \begin{bmatrix} cos\omega&0&sin\omega\\ 0 & 1& 0\\ -sin\omega&0&cos\omega\\ \end{bmatrix} ⎣⎡cosω0−sinω010sinω0cosω⎦⎤ [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤=R3 [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤
故可得旋转向量: R = R 1 ∗ R 2 ∗ R 3 R=R_1*R_2*R_3 R=R1∗R2∗R3
PS:若为右手坐标系
绕z轴逆时针
旋转则:
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= [ c o s θ s i n θ 1 − s i n θ c o s θ 1 0 0 1 ] \begin{bmatrix} cosθ&sinθ&1\\ -sinθ & cosθ& 1\\ 0&0&1\\ \end{bmatrix} ⎣⎡cosθ−sinθ0sinθcosθ0111⎦⎤ [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤=R1 [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤
1.2 坐标系平移公式
若坐标系无旋转,前后仅平移,则
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤+ [ x T y T z T ] \begin{bmatrix} x_T\\ y_T\\ z_T\\ \end{bmatrix} ⎣⎡xTyTzT⎦⎤
1.3 坐标系转换公式
所有坐标系(无缩放)转换过程均可分解为以上两个过程,即先旋转到指定坐标系方向,再平移过去,数学表示如下
[ x y z ] \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} ⎣⎡xyz⎦⎤= R R R [ x ′ y ′ z ′ ] \begin{bmatrix} x'\\ y'\\ z'\\ \end{bmatrix} ⎣⎡x′y′z′⎦⎤+ [ x T y T z T ] \begin{bmatrix} x_T\\ y_T\\ z_T\\ \end{bmatrix} ⎣⎡xTyTzT⎦⎤
齐次坐标表示:
[ x y z 1 ] \begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡xyz1⎦⎥⎥⎤= [ R 3 X 3 T 3 X 1 O 1 ] \begin{bmatrix} R_{3X3}&T_{3X1}\\ O&1\\ \end{bmatrix} [R3X3OT3X11] [ x y z 1 ] \begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡xyz1⎦⎥⎥⎤
引入齐次坐标的好处:
2. 相机投影公式
2.1 坐标系介绍
在进行相机投影公式推导前,需先对相关坐标系进行声明:
如图2所示,相机投影中涉及到以下四个坐标系:
-
O
w
X
w
Y
w
Z
w
O_wX_wY_wZ_w
OwXwYwZw:
世界坐标系
,一般为自定义坐标系 -
O
c
X
c
Y
c
Z
c
O_cX_cY_cZ_c
OcXcYcZc:
相机坐标系
,光心为原点 -
o
x
y
oxy
oxy:
图像坐标系
,原点为图像中心,单位为mm -
u
v
uv
uv:
像素坐标系
,原点为图像左上角,单位为pixel
2.2 世界坐标系到相机坐标系坐标转换
世界坐标系到相机坐标系的转换只涉及到坐标系的旋转平移过程,可得
[ X c Y c Z c ] \begin{bmatrix} X_c\\ Y_c\\ Z_c\\ \end{bmatrix} ⎣⎡XcYcZc⎦⎤= R R R [ X w Y w Z w ] \begin{bmatrix} X_w\\ Y_w\\ Z_w\\ \end{bmatrix} ⎣⎡XwYwZw⎦⎤+ T T T
齐次坐标表示:
[ X c Y c Z c 1 ] \begin{bmatrix} X_c\\ Y_c\\ Z_c\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤= [ R 3 X 3 T 3 X 1 O 1 ] \begin{bmatrix} R_{3X3}&T_{3X1}\\ O&1\\ \end{bmatrix} [R3X3OT3X11] [ X w Y w Z w 1 ] \begin{bmatrix} X_w\\ Y_w\\ Z_w\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
2.3 相机坐标系到图像坐标系坐标转换
小孔成像模型
下,相机坐标系->图像坐标系的坐标转换由简单的相似三角形
推导可得:
2.4 图像坐标->像素坐标
2.5 总结:各坐标系间转换关系
世界坐标系->像素坐标系
Z
C
Z_C
ZC
[
u
v
1
]
\begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix}
⎣⎡uv1⎦⎤=
[
1
d
X
0
u
0
0
1
d
Y
v
0
0
0
1
]
\begin{bmatrix} \frac 1{dX}&0&u_0\\ 0&\frac 1{dY}&v_0\\ 0&0&1\\ \end{bmatrix}
⎣⎡dX1000dY10u0v01⎦⎤
[
f
0
0
0
0
f
0
0
0
0
1
0
]
\begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0\\ \end{bmatrix}
⎣⎡f000f0001000⎦⎤
[
R
3
X
3
T
3
X
1
O
1
]
\begin{bmatrix} R_{3X3}&T_{3X1}\\ O&1\\ \end{bmatrix}
[R3X3OT3X11]
[
X
w
Y
w
Z
w
1
]
\begin{bmatrix} X_w\\ Y_w\\ Z_w\\ 1\\ \end{bmatrix}
⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤ =
[
f
x
0
u
0
0
0
f
y
v
0
0
0
0
1
0
]
\begin{bmatrix} f_x&0&u_0&0\\ 0&f_y&v_0&0\\ 0&0&1&0\\ \end{bmatrix}
⎣⎡fx000fy0u0v01000⎦⎤
[
R
3
X
3
T
3
X
1
O
1
]
\begin{bmatrix} R_{3X3}&T_{3X1}\\ O&1\\ \end{bmatrix}
[R3X3OT3X11]
[
X
w
Y
w
Z
w
1
]
\begin{bmatrix} X_w\\ Y_w\\ Z_w\\ 1\\ \end{bmatrix}
⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
其中:
[ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] \begin{bmatrix} f_x&0&u_0&0\\ 0&f_y&v_0&0\\ 0&0&1&0\\ \end{bmatrix} ⎣⎡fx000fy0u0v01000⎦⎤即为内参矩阵
f x , f y f_x,f_y fx,fy为相机焦距, u 0 , v 0 u_0,v_0 u0,v0为相机光轴与相机成像平面的交点在像素坐标系下的坐标。
[ R 3 X 3 T 3 X 1 O 1 ] \begin{bmatrix} R_{3X3}&T_{3X1}\\ O&1\\ \end{bmatrix} [R3X3OT3X11]为相机外参
相机坐标系->像素坐标系
Z C Z_C ZC [ u v 1 ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} ⎣⎡uv1⎦⎤= [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] \begin{bmatrix} f_x&0&u_0&0\\ 0&f_y&v_0&0\\ 0&0&1&0\\ \end{bmatrix} ⎣⎡fx000fy0u0v01000⎦⎤ [ X c Y c Z c 1 ] \begin{bmatrix} X_c\\ Y_c\\ Z_c\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤
3. 畸变模型补充
参考: