相机能将三维世界里的坐标点映射到二维图像平面,这样的一个过程能够用数学模型进行描述。这类的描述模型有很多,最经典的就是针孔模型。同时,由于相机镜头上的透镜的存在,使得光线投影到成像平面的过程会产生畸变。因此,常用针孔和畸变两个模型来描述整个映射的过程。
光圈:光圈的基本作用是调节相机的进光量,光圈越大进光面积就会越大;反之,光圈越小,图像就越暗。
景深:景深指的是焦点前后景物清晰的范围,般影响景深主要有三个要素,分别是摄距(被摄对象与镜头的距离)、镜头焦距、光圈。光圈越大,景深越小;光圈越小,景深越大。距离越近,景深越小;距离越远,景深越大。
视野:相机可以接收影像的角度范围,影响因有成像平面的大小、焦距。焦距越大视野越小。
一、针孔相机模型
蜡烛投影实验:点燃的蜡烛透过小孔投影到后方的平面上,形成一个倒立的蜡烛图像,其原理如下图所示。
假设 O − x − y − z O-x-y-z O−x−y−z为相机坐标系( z z z指向相机前方, x x x向右, y y y向下, O O O为相机的光心或指模型中的针孔)。
则现实空间一点 P P P,经过小孔 O O O,落在成像平面 O ′ − x ′ − y ′ O^{'}-x^{'}-y^{'} O′−x′−y′上,成像点为 P ′ P^{'} P′。
我们设
P
P
P的坐标为
[
X
,
Y
,
Z
]
[X,Y,Z]
[X,Y,Z],
P
′
P^{'}
P′为
[
X
′
,
Y
′
,
Z
′
]
[X^{'},Y^{'},Z^{'}]
[X′,Y′,Z′],并且成像平面到小孔
O
O
O的距离为
f
f
f(焦距),那么,根据三角形相似关系,有
Z
f
=
−
X
X
′
=
−
Y
Y
′
\frac{Z}{f} = -\frac{X}{X^{'}} = -\frac{Y}{Y^{'}}
fZ=−X′X=−Y′Y
其中,负号表示成的像是倒立的。不过,实际相机得到的图像并不是倒像,为了让模型更符合实际,我们可以等价把成像平面放到相机的前方,并去掉公式中的负号,更简洁:
Z
f
=
X
X
′
=
Y
Y
′
\frac{Z}{f} = \frac{X}{X^{'}} = \frac{Y}{Y^{'}}
fZ=X′X=Y′Y
整理得到:
{
X
′
=
f
X
Z
Y
′
=
f
Y
Z
\left\{ \begin{aligned} X^{'} = f\frac{X}{Z} \\ Y^{'} = f\frac{Y}{Z} \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧X′=fZXY′=fZY
1.1 相机内参
像素坐标系:原点 o ′ o^{'} o′位于图像的左上角, u u u轴向右与 x x x轴平行, v v v轴向下与 y y y轴平行。
像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。
我们设像素坐标在
u
u
u轴上缩放
α
\alpha
α倍,在
v
v
v轴上缩放了
β
\beta
β倍。同时,原点平移了
[
c
x
,
c
y
]
T
[c_x,c_y]^{T}
[cx,cy]T。那么,
P
′
P^{'}
P′的坐标与像素坐标
[
u
,
v
]
T
[u,v]^{T}
[u,v]T的关系为:
{
u
=
α
X
′
+
c
x
v
=
β
Y
′
+
c
y
\left\{ \begin{aligned} u = \alpha X^{'} + c_x \\ v = \beta Y^{'} + c_y \end{aligned} \right.
{u=αX′+cxv=βY′+cy
代入公式并把
α
f
\alpha f
αf合并成
f
x
f_x
fx,把
β
f
\beta f
βf合并为
f
y
f_y
fy,得
{
u
=
f
x
X
Z
+
c
x
v
=
f
y
Y
Z
+
c
y
\left\{ \begin{aligned} u = f_x \frac{X}{Z} + c_x \\ v = f_y \frac{Y}{Z} + c_y \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧u=fxZX+cxv=fyZY+cy
其中,
f
f
f的单位为米,
α
,
β
\alpha,\beta
α,β的单位为像素/米,所以
f
x
,
f
y
f_x,f_y
fx,fy和
c
x
,
c
y
c_x,c_y
cx,cy的单位为像素。写成矩阵的形式为:
(
u
v
1
)
=
1
Z
(
f
x
0
c
x
0
f
y
c
y
0
0
1
)
(
X
Y
Z
)
=
1
Z
K
P
\left(\begin{matrix}u \\v \\1\end{matrix} \right) = \frac{1}{Z} \left(\begin{matrix}f_x & 0 & c_x \\0 & f_y & c_y \\0 & 0 & 1\end{matrix} \right) \left(\begin{matrix}X \\Y \\Z\end{matrix} \right) = \frac{1}{Z} KP
⎝⎛uv1⎠⎞=Z1⎝⎛fx000fy0cxcy1⎠⎞⎝⎛XYZ⎠⎞=Z1KP
将
Z
Z
Z移到等式左边得:
Z
(
u
v
1
)
=
(
f
x
0
c
x
0
f
y
c
y
0
0
1
)
(
X
Y
Z
)
=
K
P
Z\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 \\Y \\Z\end{matrix} \right) = KP
Z⎝⎛uv1⎠⎞=⎝⎛fx000fy0cxcy1⎠⎞⎝⎛XYZ⎠⎞=KP
式中,我们把中间量组成的矩阵成为相机的内参数(Camera Intrinsics)矩阵K。一般的,相机的内参在出厂后就是固定的,不会随使用过程发生变化。
相机的内参可以通过咨询生产厂家得到,或者通过标定的方式得到相机内参。
1.2 相机外参
除了内参,还有相对的外参。由于实际中相机是运动的,所以
P
P
P的相机坐标应该是有世界坐标(
P
w
P_w
Pw)根据相机的当前位姿转换到相机坐标系下得到的。相机的位姿由它的旋转矩阵
R
R
R和平移向量
t
t
t来描述。那么有:
Z
P
u
v
=
Z
[
u
v
1
]
=
K
(
R
P
w
+
t
)
=
K
T
P
w
ZP_{uv} = Z \left[\begin{matrix}u \\v \\1\end{matrix} \right] = K(RP_w + t) = KTP_w
ZPuv=Z⎣⎡uv1⎦⎤=K(RPw+t)=KTPw
其中相机的位姿
R
,
t
R,t
R,t成为相机的外参(Camera Extrinsics)。
需要注意的是,右式中又经过一次齐次坐标到非齐次坐标的转换。
Z [ u v 1 ] = ( f x 0 c x 0 f y c y 0 0 1 ) ( f 0 0 0 0 f 0 0 0 0 0 1 ) ( R t 0 T 1 ) [ X Y Z 1 ] Z \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}f & 0 & 0 & 0 \\0 & f & 0 & 0 \\0 & 0 & 0 & 1\end{matrix} \right) \left(\begin{matrix}R & t \\0^T & 1\end{matrix} \right) \left[\begin{matrix}X \\Y \\ Z \\1\end{matrix} \right] Z⎣⎡uv1⎦⎤=⎝⎛fx000fy0cxcy1⎠⎞⎝⎛f000f0000001⎠⎞(R0Tt1)⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
1.3 归一化处理
我们可以将世界坐标系上的一点,先转换到相机坐标系中,再除以距离成像平面的距离
Z
Z
Z,这就相当于进行了一次归一化处理,得到点
P
P
P在相机归一化平面上的投影:
(
R
P
w
+
t
)
=
[
X
,
Y
,
Z
]
T
→
[
X
/
Z
,
Y
/
Z
,
1
]
T
(RP_w + t) = [X,Y,Z]^T →[X/Z,Y/Z,1]^T
(RPw+t)=[X,Y,Z]T→[X/Z,Y/Z,1]T
二、畸变模型
由于相机前方的透镜,会对光的传播产生影响,产生畸变。
引起畸变的主要因素有两种:
- 透镜的形状:径向畸变;
- 透镜与成像平面不平行:切向畸变。
归一化平面上的任意一点 p p p,它的坐标为 [ x , y ] T [x,y]^T [x,y]T,可以用极坐标的形式 [ r , θ ] T [r,\theta]^T [r,θ]T表示,其中 r r r表示点 p p p与坐标系原点之间的距离, θ \theta θ表示与水平轴的夹角。
径向畸变可以看作坐标点沿着长度方向发生了变化,也就是其距离远点的长度发生了变化。
切向畸变可以看作坐标点沿着切线方向发生了变化,也就是水平夹角发生了变化。
通常假设这些畸变呈多项式关系,即:
径向畸变:
{
x
d
i
s
t
o
r
t
e
d
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
y
d
i
s
t
o
r
t
e
d
=
y
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
\left\{ \begin{aligned} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6) \end{aligned} \right.
{xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)
切向畸变:
{
x
d
i
s
t
o
r
t
e
d
=
x
+
2
p
1
x
y
+
p
2
(
r
2
+
2
x
2
)
y
d
i
s
t
o
r
t
e
d
=
y
+
p
1
(
r
2
+
2
y
2
)
+
2
p
2
x
y
\left\{ \begin{aligned} x_{distorted} = x+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted} = y+p_1(r^2+2y^2)+2p_2xy \end{aligned} \right.
{xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+p1(r2+2y2)+2p2xy
其中,
p
1
,
p
2
p1,p2
p1,p2为纠正参数。两式联立,得到点在图像上的正确位置为:
{
x
d
i
s
t
o
r
t
e
d
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
+
2
p
1
x
y
+
p
2
(
r
2
+
2
x
2
)
y
d
i
s
t
o
r
t
e
d
=
y
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
+
p
1
(
r
2
+
2
y
2
)
+
2
p
2
x
y
\left\{ \begin{aligned} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2) \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy \end{aligned} \right.
{xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy
即畸变模型为:
{
u
=
f
x
x
d
i
s
t
o
r
t
e
d
+
c
x
v
=
f
y
y
d
i
s
t
o
r
t
e
d
+
c
y
\left\{ \begin{aligned} u = f_xx_{distorted}+c_x \\ v = f_yy_{distorted}+c_y \end{aligned} \right.
{u=fxxdistorted+cxv=fyydistorted+cy