相机标定是世界坐标系与图像坐标系关系建立过程中,确定相机的内部固定参数的过程。比如工业相机在设计时有一个具体的焦距,光心等参数,但是实际做出来可能会和设计时有所偏差,相机标定就是确定相机在实际拍摄使用时的参数。(可以类比电器的额定功率和实际功率)
相机标定的参数称为内参。主要有光心位置( δ x \delta x δx, δ y \delta y δy),焦距( f x f_x fx, f y f_y fy)。这些参数构成了一个内参矩阵。此外如果考虑畸变的影响,根据不同的畸变模型,输出畸变的参数。
外参是拍摄的图像与相机坐标系之间的关系。每张照片不同位置不同角度,外参都不一样。该参数并没有很重要。
这个推导过程因为不是很难也不是重点,此处省略,可以看看这篇文章。https://blog.csdn.net/byyastal/article/details/108474083
它们的转换关系为:

解释一个里面的重要参数含义:
f
x
f_x
fx:x方向的焦距,注意此处
f
=
f
x
∗
d
x
f=f_x * dx
f=fx∗dx,
f
f
f才是真正光学意义上的焦距(mm),
d
x
dx
dx是像元单位,一般是μm级别
f
y
f_y
fy:y方向的焦距,注意此处
f
=
f
x
∗
d
x
f=f_x * dx
f=fx∗dx
u
0
u_0
u0:图像坐标系x轴起始坐标,一般都是0
v
0
v_0
v0:图像坐标系y轴起始坐标,一般都是0
R
R
R:旋转矩阵,具体参考旋转矩阵的特点
T
T
T:平移向量
X
w
,
Y
w
,
Z
w
X_w,Y_w,Z_w
Xw,Yw,Zw:世界坐标系坐标,是一个三维坐标系
u
,
v
u,v
u,v:是图像上的坐标,是一个二维坐标
Z
c
Z_c
Zc:是一个缩放因子,同一幅图像中不同点的缩放因子不同,后续公式中的
λ
\lambda
λ也指的是这个值。
要求解内参,第一步是要求解单应矩阵,求解了单应矩阵,后面再进一步通过某些方法(如张正友标定法)求解内参矩阵。一般定标的方法第一步都是如此。
单应矩阵为内参矩阵和外参矩阵的乘积。
即:

其中,
M
M
M是内参矩阵,
s
s
s为缩放因子的倒数,
r
1
r_1
r1、
r
2
r_2
r2是旋转矩阵的两个列向量,
t
t
t为平移向量。
单应矩阵的求解过程:
设单应矩阵为H:
H
=
[
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
h
33
]
H=\left[
则有:
[
x
′
y
′
1
]
∼
[
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
h
33
]
[
x
y
1
]
\left[
矩阵展开后有3个等式,将第3个等式代入前两个等式中可得:
x
′
=
h
11
x
+
h
12
y
+
h
13
h
31
x
+
h
32
y
+
h
33
y
′
=
h
21
x
+
h
22
y
+
h
23
h
31
x
+
h
32
y
+
h
33
也就是说,一个点对对应两个等式。H矩阵我们令
h
3
3
h_33
h33为1,则一共有8个未知数,所以需要至少四个点求解。

一般都用大于4个的点求解,然后利用LM等优化方法得到最合适的单应矩阵H。具体的话,可以使用matlab和OpenCV中的函数来求解单应矩阵。分别是estimateGeometricTransform和findHomography函数。
上述步骤中求得了单应矩阵H,则:
H
=
s
[
f
x
γ
u
0
0
f
y
v
0
0
0
1
]
[
r
1
r
2
t
]
=
s
M
[
r
1
r
2
t
]
H=s\left[
我们知道H是内参矩阵和外参矩阵的混合体,而我们想要最终分别获得内参和外参。所以需要想个办法,先把内参求出来(先求内参是因为更容易,因为每张图片的内参都是固定的,而外参是变化的),得到内参后,那张标定图片的外参也就随之解出了。
为了利用旋转向量之间的约束关系,我们先将单应性矩阵H化为3个列向量,即H=[
h
1
h_1
h1
h
2
h_2
h2
h
3
h_3
h3],则有
H
=
[
h
1
h
2
h
3
]
=
s
M
[
r
1
r
2
t
]
H=\left[

因为旋转向量在构造中是相互正交的,即r1和r2相互正交,由此我们就可以利用“正交”的两个含义,得出每个单应矩阵提供的两个约束条件:
约束条件1: 旋转向量点积为0(两垂直平面上的旋转向量互相垂直),这个可以参考上面对旋转矩阵的性质介绍 – 旋转矩阵的每一列都是彼此正交,且模为1,即:

约束条件2: 旋转向量长度相等(旋转不改变尺度),(我认为还是上面的那个性质–旋转矩阵的每一列都是彼此正交,且模为1)即:

记
(
M
−
1
)
T
M
−
1
\left(M^{-1}\right)^{T} M^{-1}
(M−1)TM−1为B展开:
B
=
(
M
−
1
)
T
M
−
1
=
[
1
f
x
2
−
γ
f
x
2
f
y
v
0
γ
−
u
0
f
y
f
x
2
f
y
−
γ
f
x
2
f
y
γ
2
f
x
2
f
y
2
+
1
f
y
2
−
γ
v
0
γ
−
u
0
f
y
f
x
2
f
y
y
2
−
v
0
f
y
2
v
0
γ
−
u
0
f
y
f
x
2
f
y
−
γ
v
0
γ
−
u
0
f
y
f
x
2
f
y
2
−
v
0
f
y
2
(
v
0
γ
−
u
0
f
y
)
2
f
x
2
f
y
2
+
v
0
2
f
y
2
+
1
]
=
[
B
11
B
12
B
13
B
21
B
22
B
23
B
31
B
32
B
33
]
B=\left(M^{-1}\right)^{T} M^{-1}=\left[
这里其实B中包含了一个尺度因子
λ
\lambda
λ,因为求模运算两边相等时,有一个
λ
\lambda
λ被消去。B为对称矩阵,真正有用的元素只有6个(主对角线任意一侧的6个元素)。把B带入前面两个约束条件后可转化为:
{
h
1
T
B
h
2
=
0
h
1
T
B
h
1
=
h
2
T
B
h
2
\left\{
上面两约束中的式子均可写为通式:
h
i
T
B
h
j
h_{i}^{T} B h_{j}
hiTBhj,定义3X3的单应矩阵H=[h1 h2 h3]的第i列列向量:
h
i
=
[
h
i
1
,
h
i
2
,
h
i
3
]
h_{i}=\left[h_{i 1}, h_{i 2}, h_{i 3}\right]
hi=[hi1,hi2,hi3]将如下表达式代入上述的约束单项式:
h
i
T
B
h
j
=
[
h
i
1
h
j
1
h
i
1
h
j
2
+
h
i
2
h
j
1
h
i
2
h
j
2
h
i
3
h
j
1
+
h
i
1
h
j
3
h
i
3
h
j
2
+
h
i
2
h
j
3
h
i
3
h
j
3
]
T
[
B
11
B
12
B
22
B
13
B
23
B
33
]
h_{i}^{T} B h_{j}=\left[
v
i
j
=
[
h
i
h
j
1
h
i
1
h
j
2
+
h
i
2
h
j
1
h
i
2
h
j
2
h
i
3
h
j
1
+
h
i
1
h
j
3
h
i
3
h
j
2
+
h
i
2
h
j
3
h
i
3
h
j
3
]
,
b
=
[
B
11
B
12
B
22
B
13
B
23
B
33
]
v_{i j}=\left[
h
i
T
B
h
j
=
ν
i
j
T
b
h_{i}^{T} B h_{j}=\nu_{i j}^{T} b
hiTBhj=νijTb由此,两约束条件最终可以转化为如下形式:
v
12
T
b
=
0
(
v
11
T
−
v
22
T
)
b
=
0
→
[
v
12
T
v
11
T
−
v
22
T
]
b
=
0
当b向量求解出来以后:
B
=
λ
M
−
T
M
B=\lambda M^{-T} M
B=λM−TM根据B展开的内容:
{
f
x
=
λ
/
B
11
f
y
=
λ
B
11
/
(
B
11
B
22
−
B
12
2
)
u
0
=
γ
v
0
/
f
y
−
B
13
f
x
2
/
λ
v
0
=
(
B
12
B
13
−
B
11
B
23
)
/
(
B
11
B
22
−
B
12
2
)
γ
=
−
B
12
f
x
2
f
y
/
λ
λ
=
B
33
−
[
B
13
2
+
v
0
(
B
12
B
13
−
B
11
B
23
)
]
/
B
11
\left\{
r
1
=
λ
M
−
1
h
1
r
2
=
λ
M
−
1
h
2
r
3
=
r
1
×
r
2
t
=
λ
M
−
1
h
3
最大似然估计
上述的推导结果是基于理想情况下的解,从理论上证明了张氏标定算法的可行性。但在实际标定过程中,一般使用最大似然估计进行优化。假设我们拍摄了n张标定图片,每张图片里有m个棋盘格角点。三维空间点
P
P
P在图片上对应的二维像素为
p
p
p,三维空间点经过相机内参
M
M
M,外参
R
R
R,
t
t
t变换后得到的二维像素为
p
′
p^{\prime}
p′(假设噪声是独立同分布的,我们通过最小化
p
p
p,
p
’
p’
p’的位置来求解上述最大似然估计问题:
∑
i
=
1
n
∑
j
=
1
m
∥
p
i
j
−
p
′
(
M
,
R
i
,
t
i
,
P
i
j
)
∥
2
\sum_{i=1}^{n} \sum_{j=1}^{m}\left\|p_{i j}-p^{\prime}\left(M, R_{i}, t_{i}, P_{ij}\right)\right\|^{2}
i=1∑nj=1∑m∥pij−p′(M,Ri,ti,Pij)∥2
考虑畸变的影响:
畸变模型为:
{
x
brown
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
y
brown
=
y
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
\left\{
∑
i
=
1
n
∑
j
=
1
m
∥
p
i
j
−
p
′
(
M
,
k
1
,
k
2
,
R
i
,
t
i
,
P
i
j
)
∥
2
\sum_{i=1}^{n} \sum_{j=1}^{m}\left\|p_{i j}-p^{\prime}\left(M, k_1,k_2,R_{i}, t_{i}, P_{ij}\right)\right\|^{2}
i=1∑nj=1∑m∥pij−p′(M,k1,k2,Ri,ti,Pij)∥2