介绍
之前博客中介绍了基于二维标定板的张正友相机标定法,本文介绍基于三维标定物的相机标定。相比于二维标定板,使用三维标定物的优点是只需拍摄一张图片就能实现相机标定,效率较高,缺点是标定物成本高。
与二维标定板标定类似,三维标定物的标定也需要先进行解析求解,获得忽略畸变情况下的初值,然后再进行最优化求解。先前给出的张正友标定法C++代码中,Ceres的优化求解是支持使用三维标定物坐标进行优化求解的,本文不再赘述。这里主要介绍如何使用三维标定物坐标进行解析求解。
推导
物体坐标系中的三维点
P
=
[
X
,
Y
,
Z
]
T
P=[X,Y,Z]^T
P=[X,Y,Z]T,经过旋转平移、透视投影、像素采样后,成为像素坐标系中的二维点
U
=
[
u
,
v
]
T
U=[u,v]^T
U=[u,v]T,过程表示为
U
=
K
[
R
∣
t
]
P
[
u
v
1
]
⋍
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
r
11
r
12
r
13
t
1
r
21
r
22
r
23
t
2
r
31
r
32
r
33
t
3
]
[
X
Y
Z
1
]
U=K[R|t]P\\ \begin{bmatrix}u\\v\\1\end{bmatrix}\backsimeq\begin{bmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix}\begin{bmatrix}r_{11}&r_{12}&r_{13}&t_1\\r_{21}&r_{22}&r_{23}&t_2\\r_{31}&r_{32}&r_{33}&t_3\end{bmatrix}\begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}
U=K[R∣t]P
uv1
⋍
fx000fy0cxcy1
r11r21r31r12r22r32r13r23r33t1t2t3
XYZ1
其中,
K
K
K为内参矩阵,
R
R
R为旋转矩阵,
t
t
t为平移向量。
令矩阵
Q
=
K
[
R
∣
t
]
Q=K[R|t]
Q=K[R∣t],则有
u
=
q
11
X
+
q
12
Y
+
q
13
Z
+
q
14
q
31
X
+
q
32
Y
+
q
33
Z
+
q
34
v
=
q
21
X
+
q
22
Y
+
q
23
Z
+
q
24
q
31
X
+
q
32
Y
+
q
33
Z
+
q
34
u=\frac{q_{11}X+q_{12}Y+q_{13}Z+q_{14}}{q_{31}X+q_{32}Y+q_{33}Z+q_{34}}\\ v=\frac{q_{21}X+q_{22}Y+q_{23}Z+q_{24}}{q_{31}X+q_{32}Y+q_{33}Z+q_{34}}
u=q31X+q32Y+q33Z+q34q11X+q12Y+q13Z+q14v=q31X+q32Y+q33Z+q34q21X+q22Y+q23Z+q24写成矩阵形式
[
X
Y
Z
1
0
0
0
0
−
u
X
−
u
Y
−
u
Z
−
u
0
0
0
0
X
Y
Z
1
−
v
X
−
v
Y
−
v
Z
−
v
]
[
q
11
q
12
q
13
q
14
q
21
q
22
q
23
q
24
q
31
q
32
q
33
q
34
]
=
0
\begin{bmatrix}X&Y&Z&1&0&0&0&0&-uX&-uY&-uZ&-u\\0&0&0&0&X&Y&Z&1&-vX&-vY&-vZ&-v\end{bmatrix}\begin{bmatrix}q_{11}\\q_{12}\\q_{13}\\q_{14}\\q_{21}\\q_{22}\\q_{23}\\q_{24}\\q_{31}\\q_{32}\\q_{33}\\q_{34}\\\end{bmatrix}=0
[X0Y0Z0100X0Y0Z01−uX−vX−uY−vY−uZ−vZ−u−v]
q11q12q13q14q21q22q23q24q31q32q33q34
=0同样是求解
A
x
=
0
Ax=0
Ax=0问题,需要六个三维点提供十二组约束来求解。求解得到
Q
Q
Q后,将结果除以
q
34
q_{34}
q34进行归一化。将
Q
Q
Q其拆分为
3
×
3
3\times3
3×3和
3
×
1
3\times1
3×1的矩阵,表示为
Q
=
[
B
∣
b
]
Q=[B|b]
Q=[B∣b],则有
B
=
η
K
R
b
=
η
K
t
B = \eta KR\\b=\eta Kt
B=ηKRb=ηKt其中,
η
\eta
η为求解上述
A
x
=
0
Ax=0
Ax=0问题时引入的未知尺度。利用旋转矩阵的正交性,有
B
B
T
=
K
R
η
η
R
T
K
T
=
η
2
K
K
T
BB^T=KR\eta\eta R^TK^T=\eta^2KK^T
BBT=KRηηRTKT=η2KKT记
A
=
B
B
T
A=BB^T
A=BBT,则有
A
=
[
a
11
a
12
a
13
a
12
a
22
a
23
a
13
a
23
a
33
]
=
η
2
[
f
x
2
+
c
x
2
c
x
c
y
c
x
c
x
c
y
f
y
2
+
c
y
2
c
y
c
x
c
y
1
]
=
η
2
K
K
T
A=\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{12}&a_{22}&a_{23}\\a_{13}&a_{23}&a_{33}\end{bmatrix}=\eta^2\begin{bmatrix}f_x^2+c_x^2&c_xc_y&c_x\\c_xc_y&f_y^2+c_y^2&c_y\\c_x&c_y&1\end{bmatrix}=\eta^2KK^T
A=
a11a12a13a12a22a23a13a23a33
=η2
fx2+cx2cxcycxcxcyfy2+cy2cycxcy1
=η2KKT
可得
η
=
a
33
c
x
=
a
13
/
η
2
c
y
=
a
23
/
η
2
f
x
=
a
11
/
η
2
−
c
x
2
f
y
=
a
22
/
η
2
−
c
y
2
\eta=\sqrt{a_{33}}\\c_x=a_{13}/\eta^2\\c_y=a_{23}/\eta^2\\f_x=\sqrt{a_{11}/\eta^2-c_x^2}\\f_y=\sqrt{a_{22}/\eta^2-c_y^2}
η=a33cx=a13/η2cy=a23/η2fx=a11/η2−cx2fy=a22/η2−cy2求解得到内参矩阵
K
K
K和未知尺度
η
\eta
η后,可得
R
=
K
−
1
B
/
η
t
=
K
−
1
b
/
η
R=K^{-1}B/\eta\\t=K^{-1}b/\eta
R=K−1B/ηt=K−1b/η