空间六点标定法
具体小孔成像原理推理过程参见如下另一篇文章
小孔成像原理和多张照片的张氏标定
相机小孔成像公式
设相机小孔成像原理为
z
a
(
u
v
1
)
=
K
(
R
t
)
(
x
y
z
1
)
,
z_a\begin{gathered} \begin{pmatrix} u \\ v\\1\end{pmatrix}=K\begin{pmatrix} R &t\end{pmatrix}\begin{pmatrix}x\\y\\z\\1\end{pmatrix} \end{gathered},
za⎝⎛uv1⎠⎞=K(Rt)⎝⎜⎜⎛xyz1⎠⎟⎟⎞,
这里
K
=
(
α
γ
u
0
0
β
v
0
0
0
1
)
,
R
=
(
l
1
m
1
n
1
l
2
m
2
n
2
l
3
m
3
n
3
)
,
t
=
(
x
0
′
y
0
′
z
0
′
)
。
K=\begin{pmatrix} \alpha&\gamma&u_0 \\ 0&\beta&v_0\\0&0&1\end{pmatrix},R=\begin{pmatrix} l_1&m_1&n_1\\l_2&m_2&n_2\\l_3&m_3&n_3\end{pmatrix},t=\begin{pmatrix}x'_0\\y'_0\\z'_0\end{pmatrix}。
K=⎝⎛α00γβ0u0v01⎠⎞,R=⎝⎛l1l2l3m1m2m3n1n2n3⎠⎞,t=⎝⎛x0′y0′z0′⎠⎞。
其中
t
=
(
x
0
′
y
0
′
z
0
′
)
=
−
R
(
x
0
y
0
z
0
)
。
t=\begin{pmatrix}x'_0\\y'_0\\z'_0\end{pmatrix}=-R\begin{pmatrix}x_0\\y_0\\z_0\end{pmatrix}。
t=⎝⎛x0′y0′z0′⎠⎞=−R⎝⎛x0y0z0⎠⎞。
这里
(
x
0
,
y
0
,
z
0
)
T
(x_0,y_0,z_0)^T
(x0,y0,z0)T为小孔的世界坐标,
z
a
z_a
za为物点到小孔坐标系“水平”平面的距离,该“水平”平面有时可称为相机平面。
P矩阵的处理
令
P
=
K
(
R
t
)
P=K\begin{pmatrix} R &t\end{pmatrix}
P=K(Rt),则
P
=
(
α
l
1
+
γ
l
2
+
u
0
l
3
α
m
1
+
γ
m
2
+
u
0
m
3
α
n
1
+
γ
n
2
+
u
0
n
3
α
x
0
′
+
γ
y
0
′
+
u
0
z
0
′
β
l
2
+
v
0
l
3
β
m
2
+
v
0
m
3
β
n
2
+
v
0
n
3
β
y
0
′
+
v
0
z
0
′
l
3
m
3
n
3
z
0
′
)
,
P=\begin{pmatrix}\alpha l_1+\gamma l_2+u_0l_3&\alpha m_1+\gamma m_2+u_0m_3& \alpha n_1+\gamma n_2+u_0n_3&\alpha x'_0+\gamma y'_0+u_0z'_0\\ \beta l_2+v_0l_3& \beta m_2+v_0m_3& \beta n_2+v_0n_3&\beta y'_0+v_0z'_0\\l_3&m_3&n_3&z'_0\end{pmatrix},
P=⎝⎛αl1+γl2+u0l3βl2+v0l3l3αm1+γm2+u0m3βm2+v0m3m3αn1+γn2+u0n3βn2+v0n3n3αx0′+γy0′+u0z0′βy0′+v0z0′z0′⎠⎞,
为方便讨论,记
P
=
(
p
1
p
2
p
3
p
10
p
4
p
5
p
6
p
11
p
7
p
8
p
9
p
12
)
,
P=\begin{pmatrix}p_1&p_2&p_3&p_{10}\\p_4&p_5&p_6&p_{11}\\p_7&p_8&p_9&p_{12}\end{pmatrix},
P=⎝⎛p1p4p7p2p5p8p3p6p9p10p11p12⎠⎞,则
z
a
=
l
3
x
+
m
3
y
+
n
3
z
+
z
0
′
=
p
7
x
+
p
8
y
+
p
9
z
+
p
12
,
z_a=l_3x+m_3y+n_3z+z'_0=p_7x+p_8y+p_9z+p_{12},
za=l3x+m3y+n3z+z0′=p7x+p8y+p9z+p12,
已知空间6点的世界坐标
(
x
i
,
y
i
,
z
i
)
T
,
i
=
1
,
2...
,
6
(x_i,y_i,z_i)^T,i=1,2...,6
(xi,yi,zi)T,i=1,2...,6以及对应的像素坐标
(
u
i
,
v
i
)
T
,
i
=
1
,
2...
,
6
(u_i,v_i)^T,i=1,2...,6
(ui,vi)T,i=1,2...,6,可以根据成像公式,有
(
p
7
x
i
+
p
8
y
i
+
p
9
z
i
+
p
12
)
(
u
i
v
i
)
=
(
p
1
x
i
+
p
2
y
i
+
p
3
z
i
+
p
10
)
p
4
x
i
+
p
5
y
i
+
p
6
z
i
+
p
11
)
,
\begin{gathered} (p_7x_i+p_8y_i+p_9z_i+p_{12})\begin{pmatrix} u_i \\ v_i\end{pmatrix}=\begin{pmatrix} p_1x_i+p_2y_i+p_3z_i+p_{10})\\ p_4x_i+p_5y_i+p_6z_i+p_{11}\end{pmatrix}\end{gathered},
(p7xi+p8yi+p9zi+p12)(uivi)=(p1xi+p2yi+p3zi+p10)p4xi+p5yi+p6zi+p11),
也就是每点可以建立两个如上方程,6点可以建立12个如上方程构成方程组。
线性齐次方程组的求解
因
p
12
=
z
0
′
p_{12}=z'_0
p12=z0′,可以根据
z
0
′
z'_0
z0′表示世界坐标系原点在小孔坐标系坐标的第三个分量,即世界坐标系原点到相机平面距离,可以恰当建立世界坐标系,使得
z
0
′
≠
0
z'_0\neq 0
z0′=0,12个如上方程构成方程组中,可以令
p
12
=
1
p_{12}=1
p12=1将齐次问题变为非齐次问题,求得一组解
P
0
P_0
P0,与真实解相差一个常系数
λ
\lambda
λ,可以利用
(
p
7
,
p
8
,
p
9
)
T
=
(
l
3
,
m
3
,
n
3
)
T
(p_7,p_8,p_9)^T=(l_3,m_3,n_3)^T
(p7,p8,p9)T=(l3,m3,n3)T为单位向量确定
λ
\lambda
λ值,从而求出
P
P
P。当然这里的6个点若全来自一个平面的话,会导致奇异性,使得非齐次线性方程组的解空间的维数
≥
1
\geq1
≥1,从而无法求得正确的
P
P
P值,所以尽量让空间点具有空间性,而不能使所有点接近于一个平面。再有更多的点可以用最小二乘方法得到的广义逆公式求出,比如令
p
12
=
1
p_{12}=1
p12=1后将齐次问题变为了非齐次问题:
M
(
p
1
′
p
2
′
.
.
.
p
11
′
)
=
b
M\begin{pmatrix}p'_1\\p'_2\\...\\p'_{11}\end{pmatrix}=b
M⎝⎜⎜⎛p1′p2′...p11′⎠⎟⎟⎞=b,则最小二乘解为
(
p
1
′
p
2
′
.
.
.
p
11
′
)
=
(
M
′
M
)
−
1
M
′
b
\begin{pmatrix}p'_1\\p'_2\\...\\p'_{11}\end{pmatrix}=(M'M)^{-1}M'b
⎝⎜⎜⎛p1′p2′...p11′⎠⎟⎟⎞=(M′M)−1M′b。因
(
p
1
′
,
p
2
′
,
.
.
.
,
p
11
′
)
T
(p'_1,p'_2,...,p'_{11})^T
(p1′,p2′,...,p11′)T与真实
(
p
1
,
p
2
,
.
.
.
,
p
11
)
T
(p_1,p_2,...,p_{11})^T
(p1,p2,...,p11)T相差一个常系数
λ
\lambda
λ,然后利用
(
p
7
,
p
8
,
p
9
)
T
=
(
l
3
,
m
3
,
n
3
)
T
(p_7,p_8,p_9)^T=(l_3,m_3,n_3)^T
(p7,p8,p9)T=(l3,m3,n3)T为单位向量确定
λ
\lambda
λ值
已知 P P P求内外参数
利用分块矩阵令
(
q
1
q
2
q
3
)
=
(
α
l
1
+
γ
l
2
+
u
0
l
3
α
m
1
+
γ
m
2
+
u
0
m
3
α
n
1
+
γ
n
2
+
u
0
n
3
β
l
2
+
v
0
l
3
β
m
2
+
v
0
m
3
β
n
2
+
v
0
n
3
l
3
m
3
n
3
)
,
\begin{pmatrix}q_1\\q_2\\q_3 \end{pmatrix}=\begin{pmatrix}\alpha l_1+\gamma l_2+u_0l_3&\alpha m_1+\gamma m_2+u_0m_3& \alpha n_1+\gamma n_2+u_0n_3\\ \beta l_2+v_0l_3& \beta m_2+v_0m_3& \beta n_2+v_0n_3\\l_3&m_3&n_3\end{pmatrix},
⎝⎛q1q2q3⎠⎞=⎝⎛αl1+γl2+u0l3βl2+v0l3l3αm1+γm2+u0m3βm2+v0m3m3αn1+γn2+u0n3βn2+v0n3n3⎠⎞,
则由于
(
l
i
,
m
i
,
n
i
)
T
(l_i,m_i,n_i)^T
(li,mi,ni)T为单位向量且相互垂直,利用内积有
u
0
=
q
1
T
q
3
,
v
0
=
q
2
T
q
3
u_0=q_1^Tq_3,v_0=q_2^Tq_3
u0=q1Tq3,v0=q2Tq3,再因为
q
2
2
=
β
2
+
v
0
2
q_2^2=\beta^2+v_0^2
q22=β2+v02,求得
β
\beta
β,而
q
1
T
q
2
=
β
γ
+
u
0
v
0
q_1^Tq_2=\beta \gamma+u_0v_0
q1Tq2=βγ+u0v0,从而求得
γ
\gamma
γ,最后由
q
1
2
=
α
2
+
γ
2
+
u
0
2
q_1^2=\alpha^2+\gamma^2+u_0^2
q12=α2+γ2+u02求得
α
\alpha
α,由此求得所有内参数。
因
(
q
1
q
2
q
3
)
=
K
R
\begin{pmatrix}q_1\\q_2\\q_3 \end{pmatrix}=KR
⎝⎛q1q2q3⎠⎞=KR,所以
R
=
K
−
1
(
q
1
q
2
q
3
)
R=K^{-1}\begin{pmatrix}q_1\\q_2\\q_3 \end{pmatrix}
R=K−1⎝⎛q1q2q3⎠⎞。而
(
p
10
p
11
p
12
)
=
K
t
\begin{pmatrix}p_{10}\\p_{11}\\p_{12} \end{pmatrix}=Kt
⎝⎛p10p11p12⎠⎞=Kt,所以
t
=
K
−
1
(
p
10
p
11
p
12
)
t=K^{-1}\begin{pmatrix}p_{10}\\p_{11}\\p_{12} \end{pmatrix}
t=K−1⎝⎛p10p11p12⎠⎞。