目录
1 小孔成像
针孔相机是一个描述真实世界中3D坐标点和图像平面上对应2D坐标点关系的纯几何模型。如下图所示:
图中,我们假设世界坐标系和相机坐标系重合。这里还有几个专有名词:
- 光心(Optical center)
- 像平面(Image plane)
- 焦距(Focal length)
- 光轴(Optical axis)
- 主点(Principal point)
接下来,我们就要建立描述真实世界3D坐标点 [ u , v , w ] T [u,v,w]^T [u,v,w]T和它在像平面上投影点 [ x , y ] T [x,y]^T [x,y]T数学关系的模型。建模的原理很简单,只需要用到初中学的相似三角形。
1.1 The normalized camera
在标准相机(The normalized camera)模型里,有三个限制条件:
- 焦距为1;
- 相机坐标系和世界坐标系重合;
- 2D图像坐标系的原点和主点重合;
直接上公式:
x = u w y = v w (1) x=\frac {u}{w}\\ y=\frac {v}{w} \tag{1} x=wuy=wv(1)
1.2 Focal length parameters
标准相机模型的限制条件太多,实际意义不大。在真实的相机中,首先,焦距没有必要一定要设为1;其次,2D图像坐标系中是以像素为单位进行测量的,具有离散化的特点。所以引入了
x
x
x和
y
y
y轴方向上的焦长参数
ϕ
x
\phi_x
ϕx和
ϕ
y
\phi_y
ϕy,注意,这两个参数分别考虑了对应坐标轴方向上感光元件的间距和焦距。待入模型得:
x
=
ϕ
x
u
w
y
=
ϕ
y
v
w
(2)
x=\frac {\phi_xu}{w}\\ y=\frac {\phi_yv}{w} \tag{2}
x=wϕxuy=wϕyv(2)
1.3 Offset and skew parameters
进一步减少限制条件,在真实世界中,图像坐标系的原点一般位于像平面的左上角,因此引入
x
x
x和
y
y
y轴方向的偏置参数
δ
x
\delta_x
δx和
δ
y
\delta_y
δy,代入模型得:
x
=
ϕ
x
u
w
+
δ
x
y
=
ϕ
y
v
w
+
δ
y
(3)
x=\frac {\phi_xu}{w}+\delta_x\\ y=\frac {\phi_yv}{w}+\delta_y \tag{3}
x=wϕxu+δxy=wϕyv+δy(3)
根据实际经验,我们还需要引入一个参数
γ
\gamma
γ,这个参数没有实际的物理意义,却可以使得模型更加精确。代入模型得:
x
=
ϕ
x
u
+
γ
v
w
+
δ
x
y
=
ϕ
y
v
w
+
δ
y
(4)
x=\frac {\phi_xu+\gamma v}{w}+\delta_x\\ y=\frac {\phi_yv}{w}+\delta_y \tag{4}
x=wϕxu+γv+δxy=wϕyv+δy(4)
1.4 Position and orientation of camera
最后,为了定义任意的世界坐标系,需要引入场景中3D坐标点在世界坐标系和相机坐标系的转换:
[
u
′
v
′
w
′
]
=
[
ω
11
ω
12
ω
13
ω
21
ω
22
ω
23
ω
31
ω
32
ω
33
]
[
u
v
w
]
+
[
τ
x
τ
y
τ
z
]
(5)
\left[ \begin{matrix} u'\\v'\\w' \end{matrix} \right]= \left[ \begin{matrix} \omega_{11}&\omega_{12}&\omega_{13}\\\omega_{21}&\omega_{22}&\omega_{23}\\\omega_{31}&\omega_{32}&\omega_{33} \end{matrix} \right] \left[ \begin{matrix} u\\v\\w \end{matrix} \right]+ \left[ \begin{matrix} \tau_x\\\tau_y\\\tau_z \end{matrix} \right] \tag{5}
⎣⎡u′v′w′⎦⎤=⎣⎡ω11ω21ω31ω12ω22ω32ω13ω23ω33⎦⎤⎣⎡uvw⎦⎤+⎣⎡τxτyτz⎦⎤(5)
简写为:
w
′
=
Ω
w
+
τ
(6)
w'=\Omega w+\tau \tag{6}
w′=Ωw+τ(6)
1.5 Full pinhole camera model
结合式(4)和(5)可得完整的3D世界坐标点
[
u
,
v
,
w
]
T
[u,v,w]^T
[u,v,w]T到2D图像坐标点
[
x
,
y
]
T
[x,y]^T
[x,y]T的数学关系为:
x
=
ϕ
x
(
ω
11
u
+
ω
12
v
+
ω
13
w
+
τ
x
)
+
γ
(
ω
21
u
+
ω
22
v
+
ω
23
w
+
τ
y
)
ω
31
u
+
ω
32
v
+
ω
33
w
+
τ
z
+
δ
x
y
=
ϕ
y
(
ω
21
u
+
ω
22
v
+
ω
23
w
+
τ
y
)
ω
31
u
+
ω
32
v
+
ω
33
w
+
τ
z
+
δ
y
(7)
x=\frac {\phi_x(\omega_{11}u+\omega_{12}v+\omega_{13}w+\tau_x)+\gamma(\omega_{21}u+\omega_{22}v+\omega_{23}w+\tau_y)}{\omega_{31}u+\omega_{32}v+\omega_{33}w+\tau_z}+\delta_x\\ y=\frac {\phi_y(\omega_{21}u+\omega_{22}v+\omega_{23}w+\tau_y)}{\omega_{31}u+\omega_{32}v+\omega_{33}w+\tau_z}+\delta_y \tag{7}
x=ω31u+ω32v+ω33w+τzϕx(ω11u+ω12v+ω13w+τx)+γ(ω21u+ω22v+ω23w+τy)+δxy=ω31u+ω32v+ω33w+τzϕy(ω21u+ω22v+ω23w+τy)+δy(7)
内部参数(intrinsic parameters):
{
ϕ
x
,
ϕ
y
,
γ
,
δ
x
,
δ
y
}
\{\phi_x,\phi_y,\gamma,\delta_x,\delta_y\}
{ϕx,ϕy,γ,δx,δy},也用矩阵形式表达为:
Λ
=
[
ϕ
x
γ
δ
x
0
ϕ
y
δ
y
0
0
1
]
(8)
\Lambda= \left[ \begin{matrix} \phi_x&\gamma&\delta_x\\0&\phi_y&\delta_y\\0&0&1 \end{matrix} \right]\tag{8}
Λ=⎣⎡ϕx00γϕy0δxδy1⎦⎤(8)
外部参数(extrinsic parameters):
{
Ω
,
τ
}
\{\Omega,\tau\}
{Ω,τ}
最终的相机模型可简化为:
x
=
p
i
n
h
o
l
e
[
w
,
Λ
,
Ω
,
τ
]
(9)
x=pinhole[w,\Lambda,\Omega,\tau]\tag{9}
x=pinhole[w,Λ,Ω,τ](9)
概率形式为:
P
r
[
x
∣
w
,
Λ
,
Ω
,
τ
]
=
N
o
r
m
x
[
p
i
n
h
o
l
e
[
w
,
Λ
,
Ω
,
τ
]
,
δ
2
I
]
(10)
Pr[x|w,\Lambda,\Omega,\tau]=Norm_x[pinhole[w,\Lambda,\Omega,\tau],\delta^2I]\tag{10}
Pr[x∣w,Λ,Ω,τ]=Normx[pinhole[w,Λ,Ω,τ],δ2I](10)
2 齐次坐标系
引入齐次坐标系的目的是将式(7)的非线性关系式转化为线性关系式。
2D坐标点齐次坐标:
x
~
=
λ
[
x
y
1
]
(11)
\widetilde{x}=\lambda \left[ \begin{matrix} x\\y\\1 \end{matrix} \right]\tag{11}
x
=λ⎣⎡xy1⎦⎤(11)
2D坐标点的笛卡尔坐标到齐次坐标的转换只需要在向量后增加一个元素1,齐次坐标到笛卡尔坐标的转换只需要前两个元素除以最后一个元素。
3D坐标点齐次坐标:
w
~
=
λ
[
u
v
w
1
]
(12)
\widetilde{w}=\lambda \left[ \begin{matrix} u\\v\\w\\1 \end{matrix} \right]\tag{12}
w
=λ⎣⎢⎢⎡uvw1⎦⎥⎥⎤(12)
3D坐标点的笛卡尔坐标到齐次坐标的转换只需要在向量后增加一个元素1,齐次坐标到笛卡尔坐标的转换只需要前两个元素除以最后一个元素。
2.1 齐次坐标下的相机模型
λ
[
x
y
1
]
=
[
ϕ
x
γ
δ
x
0
ϕ
y
δ
y
0
0
1
]
[
ω
11
ω
12
ω
13
τ
x
ω
21
ω
22
ω
23
τ
y
ω
31
ω
32
ω
33
τ
z
]
[
u
v
w
1
]
(13)
\lambda \left[ \begin{matrix} x\\y\\1 \end{matrix} \right]= \left[ \begin{matrix} \phi_x&\gamma&\delta_x\\0&\phi_y&\delta_y\\0&0&1 \end{matrix} \right] \left[ \begin{matrix} \omega_{11}&\omega_{12}&\omega_{13}&\tau_x\\\omega_{21}&\omega_{22}&\omega_{23}&\tau_y\\\omega_{31}&\omega_{32}&\omega_{33}&\tau_z \end{matrix} \right]\left[ \begin{matrix} u\\v\\w\\1 \end{matrix} \right]\tag{13}
λ⎣⎡xy1⎦⎤=⎣⎡ϕx00γϕy0δxδy1⎦⎤⎣⎡ω11ω21ω31ω12ω22ω32ω13ω23ω33τxτyτz⎦⎤⎣⎢⎢⎡uvw1⎦⎥⎥⎤(13)
或者简记为:
λ
x
~
=
Λ
[
Ω
τ
]
w
~
(14)
\lambda \widetilde{x}=\Lambda[\Omega\,\,\,\tau]\widetilde{w}\tag{14}
λx
=Λ[Ωτ]w
(14)
3 学习外部参数
Perspective-n-point(PnP)
3.1 问题描述
已知场景中
I
I
I个不同的三D坐标点
{
w
i
}
i
=
1
I
\{w_i\}_{i=1}^I
{wi}i=1I,与之对应的图像平面2D投影点
{
x
i
}
i
=
1
I
\{x_i\}_{i=1}^I
{xi}i=1I和内部参数
Λ
\Lambda
Λ,求解外部参数
{
Ω
,
τ
}
\{\Omega,\tau\}
{Ω,τ}:
Ω
^
,
τ
^
=
argmax
Ω
,
τ
[
∑
i
=
1
I
log
[
P
r
(
x
i
∣
w
i
,
Λ
,
Ω
,
τ
)
]
]
(15)
\widehat{\Omega},\,\widehat{\tau}={\underset {\Omega,\,\tau}{\operatorname {argmax} }}\,\Bigg[\sum_{i=1}^I\log[Pr(x_i|w_i,\Lambda,\Omega,\tau)]\Bigg]\tag{15}
Ω
,τ
=Ω,τargmax[i=1∑Ilog[Pr(xi∣wi,Λ,Ω,τ)]](15)
3.2 求解过程
该优化问题是非凸问题,我们不能得到目标函数的封闭解,所以只能用非线性优化求解。而非线性优化求解需要一个初始值,而这个初始值的挑选非常关键,它必须保证迭代过程最后收敛到全局最优解。所以我们用齐次坐标重新表示目标函数以求得一个满足要求的封闭形式的初始解。
第
I
I
I个齐次3D坐标点和对应的2D图像投影点的关系为:
λ
i
[
x
i
y
i
1
]
=
[
ϕ
x
γ
δ
x
0
ϕ
y
δ
y
0
0
1
]
[
ω
11
ω
12
ω
13
τ
x
ω
21
ω
22
ω
23
τ
y
ω
31
ω
32
ω
33
τ
z
]
[
u
i
v
i
w
i
1
]
(16)
\lambda_i \left[ \begin{matrix} x_i\\y_i\\1 \end{matrix} \right]= \left[ \begin{matrix} \phi_x&\gamma&\delta_x\\0&\phi_y&\delta_y\\0&0&1 \end{matrix} \right] \left[ \begin{matrix} \omega_{11}&\omega_{12}&\omega_{13}&\tau_x\\\omega_{21}&\omega_{22}&\omega_{23}&\tau_y\\\omega_{31}&\omega_{32}&\omega_{33}&\tau_z \end{matrix} \right]\left[ \begin{matrix} u_i\\v_i\\w_i\\1 \end{matrix} \right]\tag{16}
λi⎣⎡xiyi1⎦⎤=⎣⎡ϕx00γϕy0δxδy1⎦⎤⎣⎡ω11ω21ω31ω12ω22ω32ω13ω23ω33τxτyτz⎦⎤⎣⎢⎢⎡uiviwi1⎦⎥⎥⎤(16)
式(16)等号两边同时左乘
Λ
−
1
\Lambda^{-1}
Λ−1得:
λ
i
[
x
i
′
y
i
′
1
]
=
[
ω
11
ω
12
ω
13
τ
x
ω
21
ω
22
ω
23
τ
y
ω
31
ω
32
ω
33
τ
z
]
[
u
i
v
i
w
i
1
]
(17)
\lambda_i \left[ \begin{matrix} x_i'\\y_i'\\1 \end{matrix} \right]= \left[ \begin{matrix} \omega_{11}&\omega_{12}&\omega_{13}&\tau_x\\\omega_{21}&\omega_{22}&\omega_{23}&\tau_y\\\omega_{31}&\omega_{32}&\omega_{33}&\tau_z \end{matrix} \right]\left[ \begin{matrix} u_i\\v_i\\w_i\\1 \end{matrix} \right]\tag{17}
λi⎣⎡xi′yi′1⎦⎤=⎣⎡ω11ω21ω31ω12ω22ω32ω13ω23ω33τxτyτz⎦⎤⎣⎢⎢⎡uiviwi1⎦⎥⎥⎤(17)
消去
λ
i
\lambda_i
λi得:
[
(
ω
31
u
i
+
ω
32
v
i
+
ω
33
w
i
+
τ
z
)
x
i
′
(
ω
31
u
i
+
ω
32
v
i
+
ω
33
w
i
+
τ
z
)
y
i
′
]
=
[
ω
11
ω
12
ω
13
τ
x
ω
21
ω
22
ω
23
τ
y
]
[
u
i
v
i
w
i
1
]
(18)
\left[ \begin{matrix} (\omega_{31}u_i+\omega_{32}v_i+\omega_{33}w_i+\tau_z)x_i'\\ (\omega_{31}u_i+\omega_{32}v_i+\omega_{33}w_i+\tau_z)y_i' \end{matrix} \right]= \left[ \begin{matrix} \omega_{11}&\omega_{12}&\omega_{13}&\tau_x\\\omega_{21}&\omega_{22}&\omega_{23}&\tau_y \end{matrix} \right]\left[ \begin{matrix} u_i\\v_i\\w_i\\1 \end{matrix} \right]\tag{18}
[(ω31ui+ω32vi+ω33wi+τz)xi′(ω31ui+ω32vi+ω33wi+τz)yi′]=[ω11ω21ω12ω22ω13ω23τxτy]⎣⎢⎢⎡uiviwi1⎦⎥⎥⎤(18)
将
I
I
I个点对应的等式全部整合为下式:
[
u
1
v
1
w
1
1
0
0
0
0
−
u
1
x
1
′
−
v
1
x
1
′
−
w
1
x
1
′
−
x
1
′
0
0
0
0
u
1
v
1
w
1
1
−
u
1
y
1
′
−
v
1
y
1
′
−
w
1
y
1
′
−
y
1
′
u
2
v
2
w
2
1
0
0
0
0
−
u
2
x
2
′
−
v
2
x
2
′
−
w
2
x
2
′
−
x
2
′
0
0
0
0
u
2
v
2
w
2
1
−
u
2
y
2
′
−
v
2
y
2
′
−
w
2
y
2
′
−
y
2
′
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
u
I
v
I
w
I
1
0
0
0
0
−
u
I
x
I
′
−
v
I
x
I
′
−
w
I
x
I
′
−
x
I
′
0
0
0
0
u
I
v
I
w
I
1
−
u
I
y
I
′
−
v
I
y
I
′
−
w
I
y
I
′
−
y
I
′
]
[
ω
11
ω
12
ω
13
τ
x
ω
21
ω
22
ω
23
τ
y
ω
31
ω
32
ω
33
τ
z
]
=
0
(19)
\left[ \begin{matrix} u_1&v_1&w_1&1&0&0&0&0&-u_1x_1'&-v_1x_1'&-w_1x_1'&-x_1'\\ 0&0&0&0&u_1&v_1&w_1&1&-u_1y_1'&-v_1y_1'&-w_1y_1'&-y_1'\\ u_2&v_2&w_2&1&0&0&0&0&-u_2x_2'&-v_2x_2'&-w_2x_2'&-x_2'\\ 0&0&0&0&u_2&v_2&w_2&1&-u_2y_2'&-v_2y_2'&-w_2y_2'&-y_2'\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ u_I&v_I&w_I&1&0&0&0&0&-u_Ix_I'&-v_Ix_I'&-w_Ix_I'&-x_I'\\ 0&0&0&0&u_I&v_I&w_I&1&-u_Iy_I'&-v_Iy_I'&-w_Iy_I'&-y_I'\\ \end{matrix} \right]\left[\begin{matrix} \omega_{11}\\\omega_{12}\\\omega_{13}\\\tau_x\\\omega_{21}\\\omega_{22}\\\omega_{23}\\\tau_y\\\omega_{31}\\\omega_{32}\\\omega_{33}\\\tau_z \end{matrix} \right]=0\tag{19}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u10u20⋮uI0v10v20⋮vI0w10w20⋮wI01010⋮100u10u2⋮0uI0v10v2⋮0vI0w10w2⋮0wI0101⋮01−u1x1′−u1y1′−u2x2′−u2y2′⋮−uIxI′−uIyI′−v1x1′−v1y1′−v2x2′−v2y2′⋮−vIxI′−vIyI′−w1x1′−w1y1′−w2x2′−w2y2′⋮−wIxI′−wIyI′−x1′−y1′−x2′−y2′⋮−xI′−yI′⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡ω11ω12ω13τxω21ω22ω23τyω31ω32ω33τz⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0(19)
此时,问题就变为形如
A
b
=
0
Ab=0
Ab=0的minimum direction problem (请阅读参考资料),即求解奇异值分解
A
=
U
L
V
T
A=ULV^T
A=ULVT并且设
b
^
\hat{b}
b^为
V
V
V的最后一列。但是从
b
^
\hat{b}
b^提取得到的旋转矩阵
Ω
\Omega
Ω和平移向量
τ
\tau
τ与真实值有个未知标量的差别,所以还需要进一步求解:
首先求出最接近的旋转矩阵,问题形如
Ω
^
=
argmin
Ω
′
[
Ω
′
−
Ω
]
\hat \Omega={\underset {\Omega'}{\operatorname {argmin} }}\,[\Omega'-\Omega]
Ω^=Ω′argmin[Ω′−Ω],此时就可以参照Orthogonal Procrustes problem求解(请阅读参考资料),具体为求奇异值分解
Ω
=
U
L
V
T
\Omega=ULV^T
Ω=ULVT并且设
Ω
^
\widehat{\Omega}
Ω
为
U
V
T
UV^T
UVT。
最后再按照下式求解
τ
^
\widehat{\tau}
τ
:
τ
^
=
∑
m
=
1
3
∑
n
=
1
3
Ω
^
m
n
Ω
m
n
τ
(20)
\widehat{\tau}=\sum_{m=1}^3\sum_{n=1}^3 \frac{\widehat{\Omega}_{mn}}{\Omega_{mn}}\tau\tag{20}
τ
=m=1∑3n=1∑3ΩmnΩ
mnτ(20)
4 学习内部参数
Camera Calibration
4.1 问题描述
已知场景中
I
I
I个不同的三D坐标点
{
w
i
}
i
=
1
I
\{w_i\}_{i=1}^I
{wi}i=1I和与之对应的图像平面2D投影点
{
x
i
}
i
=
1
I
\{x_i\}_{i=1}^I
{xi}i=1I,利用最大似然方法求解内部参数
{
Ω
,
τ
}
\{\Omega,\tau\}
{Ω,τ}:
Λ
^
=
argmax
Λ
[
max
Ω
,
τ
[
∑
i
=
1
I
log
[
P
r
[
x
i
∣
w
i
,
Λ
,
Ω
,
τ
]
]
]
(21)
\widehat{\Lambda}={\underset{\Lambda}{\operatorname{argmax}}}\Bigg[{\underset {\Omega,\,\tau}{\operatorname {max} }}\,\Bigg[\sum_{i=1}^I\log[Pr[x_i|w_i,\Lambda,\Omega,\tau]\Bigg]\Bigg]\tag{21}
Λ
=Λargmax[Ω,τmax[i=1∑Ilog[Pr[xi∣wi,Λ,Ω,τ]]](21)
4.2 求解过程
由于内部参数和外部参数都为未知,所以一个简单(但效率很差)的方法是coordinate ascent method。该方法交替迭代下述两个过程:
- 更新内部参数(已知),求解外部参数:
Ω ^ , τ ^ = argmax Ω , τ [ ∑ i = 1 I log [ P r ( x i ∣ w i , Λ , Ω , τ ) ] ] (22) \widehat{\Omega},\,\widehat{\tau}={\underset {\Omega,\,\tau}{\operatorname {argmax} }}\,\Bigg[\sum_{i=1}^I\log[Pr(x_i|w_i,\Lambda,\Omega,\tau)]\Bigg]\tag{22} Ω ,τ =Ω,τargmax[i=1∑Ilog[Pr(xi∣wi,Λ,Ω,τ)]](22) - 更新外部参数(已知),求解内部参数:
Λ ^ = argmax Λ [ ∑ i = 1 I log [ P r ( x i ∣ w i , Λ , Ω , τ ) ] ] (23) \widehat{\Lambda}={\underset{\Lambda}{\operatorname{argmax}}}\Bigg[\sum_{i=1}^I\log[Pr(x_i|w_i,\Lambda,\Omega,\tau)]\Bigg]\tag{23} Λ =Λargmax[i=1∑Ilog[Pr(xi∣wi,Λ,Ω,τ)]](23)
由于第一步在第三节已经介绍过,所以接下来介绍第二步的解法。幸运的是,第二个问题有封闭解(不需要齐次表示)。重新描述问题为:
已知场景中 I I I个不同的三D坐标点 { w i } i = 1 I \{w_i\}_{i=1}^I {wi}i=1I,与之对应的图像平面2D投影点 { x i } i = 1 I \{x_i\}_{i=1}^I {xi}i=1I和外部参数 { Ω , τ } \{\Omega,\tau\} {Ω,τ},求解内部参数 Λ \Lambda Λ:
Λ ^ = argmax Λ [ ∑ i = 1 I log [ N o r m x i [ p i n h o l e [ w i , Λ , Ω , τ ] , σ 2 I ] ] ] = argmin Λ [ ∑ i = 1 I ( x i − p i n h o l e [ w i , Λ , Ω , τ ] ) T ( x i − p i n h o l e [ w i , Λ , Ω , τ ] ) ] (24) \widehat{\Lambda}={\underset{\Lambda}{\operatorname{argmax}}}\Bigg[\sum_{i=1}^I \log\big[Norm_{x_i}[pinhole[w_i,\Lambda,\Omega,\tau],\sigma^2I]\big]\Bigg]\\ ={\underset{\Lambda}{\operatorname{argmin}}}\Bigg[\sum_{i=1}^I (x_i-pinhole[w_i,\Lambda,\Omega,\tau])^T(x_i-pinhole[w_i,\Lambda,\Omega,\tau])\Bigg]\tag{24} Λ =Λargmax[i=1∑Ilog[Normxi[pinhole[wi,Λ,Ω,τ],σ2I]]]=Λargmin[i=1∑I(xi−pinhole[wi,Λ,Ω,τ])T(xi−pinhole[wi,Λ,Ω,τ])](24)
很明显,此时问题转化为一个Least squares problem(请阅读参考资料):
A i = [ ω 11 u i + ω 12 v i + ω 13 w i + τ z ω 31 u i + ω 32 v i + ω 33 w i + τ z ω 21 u i + ω 22 v i + ω 23 w i + τ y ω 31 u i + ω 32 v i + ω 33 w i + τ z 1 0 0 0 0 0 ω 21 u i + ω 22 v i + ω 23 w i + τ y ω 31 u i + ω 32 v i + ω 33 w i + τ z 1 ] h = [ ϕ x , γ , δ x , ϕ y , δ y ] T A_i= \left[ \begin{matrix} \frac{\omega_{11}u_i+\omega_{12}v_i+\omega_{13}w_i+\tau_z}{\omega_{31}u_i+\omega_{32}v_i+\omega_{33}w_i+\tau_z} &\frac{\omega_{21}u_i+\omega_{22}v_i+\omega_{23}w_i+\tau_y}{\omega_{31}u_i+\omega_{32}v_i+\omega_{33}w_i+\tau_z} & 1 & 0 & 0\\ 0&0&0&\frac{\omega_{21}u_i+\omega_{22}v_i+\omega_{23}w_i+\tau_y}{\omega_{31}u_i+\omega_{32}v_i+\omega_{33}w_i+\tau_z}&1 \end{matrix} \right]\\ h=[\phi_x,\gamma,\delta_x,\phi_y,\delta_y]^T Ai=[ω31ui+ω32vi+ω33wi+τzω11ui+ω12vi+ω13wi+τz0ω31ui+ω32vi+ω33wi+τzω21ui+ω22vi+ω23wi+τy0100ω31ui+ω32vi+ω33wi+τzω21ui+ω22vi+ω23wi+τy01]h=[ϕx,γ,δx,ϕy,δy]T
最后需要注意的是,这个求解方法实际中应用很少,因为它收敛速度非常慢。实际中一般采用该方法迭代几次,然后直接采用非线性优化方法同时优化内部参数和外部参数。
5 推理三维坐标点
Calibrated stereo reconstruction (Two calibrated cameras)
Multi-view reconstruction (Three or more calibrated cameras)
5.1 问题描述
已知
J
J
J个标定好并且已知位姿的相机(也即已知
Λ
j
,
Ω
j
,
τ
j
\Lambda_j, \Omega_j, \tau_j
Λj,Ωj,τj)和场景中某个未知的三维坐标点
w
w
w在每个相机上的2D投影点坐标
{
x
j
}
j
=
1
J
\{x_j\}_{j=1}^J
{xj}j=1J,求该3D坐标点的位置:
w
^
=
argmax
w
[
∑
j
=
1
J
log
[
P
r
(
x
j
∣
w
j
,
Λ
j
,
Ω
j
,
τ
j
)
]
]
(26)
\widehat{w}={\underset{w}{\operatorname{argmax}}}\Bigg[\sum_{j=1}^J\log[Pr(x_j|w_j,\Lambda_j,\Omega_j,\tau_j)]\Bigg]\tag{26}
w
=wargmax[j=1∑Jlog[Pr(xj∣wj,Λj,Ωj,τj)]](26)
5.2 求解过程
本问题同样没有封闭解,所以我们需要借助齐次坐标重新表示以求得一个合适的初始解。
3D齐次坐标点和第
j
j
j个相机中的2D齐次坐标的关系为:
λ
j
[
x
j
y
j
1
]
=
[
ϕ
x
j
γ
j
δ
x
j
0
ϕ
y
j
δ
y
j
0
0
1
]
[
ω
11
j
ω
12
j
ω
13
j
τ
x
j
ω
21
j
ω
22
j
ω
23
j
τ
y
j
ω
31
j
ω
32
j
ω
33
j
τ
z
j
]
[
u
v
w
1
]
(27)
\lambda_j \left[ \begin{matrix} x_j\\y_j\\1 \end{matrix} \right]= \left[ \begin{matrix} \phi_{xj}&\gamma_j&\delta_{xj}\\0&\phi_{yj}&\delta_{yj}\\0&0&1 \end{matrix} \right] \left[ \begin{matrix} \omega_{11j}&\omega_{12j}&\omega_{13j}&\tau_{xj}\\\omega_{21j}&\omega_{22j}&\omega_{23j}&\tau_{yj}\\\omega_{31j}&\omega_{32j}&\omega_{33j}&\tau_{zj} \end{matrix} \right]\left[ \begin{matrix} u\\v\\w\\1 \end{matrix} \right]\tag{27}
λj⎣⎡xjyj1⎦⎤=⎣⎡ϕxj00γjϕyj0δxjδyj1⎦⎤⎣⎡ω11jω21jω31jω12jω22jω32jω13jω23jω33jτxjτyjτzj⎦⎤⎣⎢⎢⎡uvw1⎦⎥⎥⎤(27)
式(27)等号两边同时左乘
Λ
j
−
1
\Lambda_j^{-1}
Λj−1得:
λ
j
[
x
j
′
y
j
′
1
]
=
[
ω
11
j
ω
12
j
ω
13
j
τ
x
j
ω
21
j
ω
22
j
ω
23
j
τ
y
j
ω
31
j
ω
32
j
ω
33
j
τ
z
j
]
[
u
v
w
1
]
(28)
\lambda_j \left[ \begin{matrix} x_j'\\y_j'\\1 \end{matrix} \right]= \left[ \begin{matrix} \omega_{11j}&\omega_{12j}&\omega_{13j}&\tau_{xj}\\\omega_{21j}&\omega_{22j}&\omega_{23j}&\tau_{yj}\\\omega_{31j}&\omega_{32j}&\omega_{33j}&\tau_{zj} \end{matrix} \right]\left[ \begin{matrix} u\\v\\w\\1 \end{matrix} \right]\tag{28}
λj⎣⎡xj′yj′1⎦⎤=⎣⎡ω11jω21jω31jω12jω22jω32jω13jω23jω33jτxjτyjτzj⎦⎤⎣⎢⎢⎡uvw1⎦⎥⎥⎤(28)
消去
λ
j
\lambda_j
λj得:
[
(
ω
31
u
+
ω
32
v
+
ω
33
w
+
τ
z
)
x
j
′
(
ω
31
u
+
ω
32
v
+
ω
33
w
+
τ
z
)
y
j
′
]
=
[
ω
11
j
ω
12
j
ω
13
j
τ
x
j
ω
21
j
ω
22
j
ω
23
j
τ
y
j
]
[
u
v
w
1
]
(29)
\left[ \begin{matrix} (\omega_{31}u+\omega_{32}v+\omega_{33}w+\tau_z)x_j'\\ (\omega_{31}u+\omega_{32}v+\omega_{33}w+\tau_z)y_j' \end{matrix} \right]= \left[ \begin{matrix} \omega_{11j}&\omega_{12j}&\omega_{13j}&\tau_{xj}\\\omega_{21j}&\omega_{22j}&\omega_{23j}&\tau_{yj} \end{matrix} \right]\left[ \begin{matrix} u\\v\\w\\1 \end{matrix} \right]\tag{29}
[(ω31u+ω32v+ω33w+τz)xj′(ω31u+ω32v+ω33w+τz)yj′]=[ω11jω21jω12jω22jω13jω23jτxjτyj]⎣⎢⎢⎡uvw1⎦⎥⎥⎤(29)
进一步整合得到:
[
ω
31
j
x
j
′
−
ω
11
j
ω
32
j
x
j
′
−
ω
12
j
ω
33
j
x
j
′
−
ω
13
j
ω
31
j
y
j
′
−
ω
21
j
ω
32
j
y
j
′
−
ω
22
j
ω
33
j
y
j
′
−
ω
23
j
]
[
u
v
w
]
=
[
τ
x
j
−
τ
z
j
x
j
′
τ
y
j
−
τ
z
j
y
j
′
]
(30)
\left[\begin{matrix} \omega_{31j}x_j'-\omega_{11j}&\omega_{32j}x_j'-\omega_{12j}&\omega_{33j}x_j'-\omega_{13j}\\ \omega_{31j}y_j'-\omega_{21j}&\omega_{32j}y_j'-\omega_{22j}&\omega_{33j}y_j'-\omega_{23j} \end{matrix}\right] \left[\begin{matrix} u\\v\\w \end{matrix}\right]= \left[\begin{matrix} \tau_{xj}-\tau_{zj}x_j'\\ \tau_{yj}-\tau_{zj}y_j' \end{matrix}\right]\tag{30}
[ω31jxj′−ω11jω31jyj′−ω21jω32jxj′−ω12jω32jyj′−ω22jω33jxj′−ω13jω33jyj′−ω23j]⎣⎡uvw⎦⎤=[τxj−τzjxj′τyj−τzjyj′](30)
将
J
J
J个形如式(30)等式整合成一个大的线性方程组,然后按照Least squares problem求解可得到一个合理的初始解,最后进行非线性迭代求解。
5.3 总结
该算法是三维重建算法的基础,它有以下特征:
- 该方法要求我们已知与场景中代求3D坐标点对应的 J J J个2D投影点坐标;
- 该方法要求我们已知所有 J J J个相机的内部参数和外部参数。