计算摄像机矩阵P
1.基本方程
( 0 T − w i X i T y i X i T w i X i T 0 T − x i X i T ) ( P 1 P 2 P 3 ) = 0 \begin{pmatrix} 0^T & -w_iX_i^T &y_iX_i^T \\ w_iX_i^T & 0^T & -x_iX_i^T \end{pmatrix}\begin{pmatrix} P^1\\ P^2\\ P^3 \end{pmatrix}=0 (0TwiXiT−wiXiT0TyiXiT−xiXiT)⎝⎛P1P2P3⎠⎞=0
最小配置解
矩阵 P P P有12 个元素和(忽略缩放因子)11个自由度,所以解 P P P需要11个方程。给定这个最小数目的对应时,解是精确的,即空间的点准确地投影到它们被测量的图像上。
超定解
如果由于点坐标的噪声导致数据不精确并且给定 n ≥ 6 n\geq 6 n≥6组点对应, 那么 A p = 0 Ap=0 Ap=0将不存在精确解。 P P P的解可以通过最小化一个代数或几何误差来获得。求 ∥ A p ∥ \left \| Ap \right \| ∥Ap∥的最小值,可能的约束是:
- ∥ p ∥ = 1 \left \| p \right \|=1 ∥p∥=1
- ∥ p ^ 3 ∥ = 1 \left \| \hat{p}^3 \right \|=1 ∥∥p^3∥∥=1,其中 p ^ 3 \hat{p}^3 p^3是由 P P P最后一行的前三个元素组成的矢量 ( p 31 , p 32 , p 33 ) T (p_{31},p_{32},p_{33})^T (p31,p32,p33)T
退化配置
- 摄像机中心和点都在一条三次绕线上。
- 这些点都在一张平面和包含摄像机中心的一条直线的并集上。
数据归一化
当点到摄像机的深度变化相对比较小时,采用同样类型的归一化。 因此, 把点的形心平移到原点,并对它们的坐标进行缩放使它们到原点的RMS(均方根)距离等于 3 \sqrt{3} 3。适用于点紧致分布的情形。
直线对应
3D 中的直线可以用它通过的两点
X
0
X_0
X0和
X
1
X_1
X1来表示。由图像直线
l
l
l反向投影得到的平面为
P
T
l
P^Tl
PTl。那么点
X
j
X_j
Xj在该平面上的条件是:
l
T
P
X
j
=
0
,
其
中
0
,
1
l^TPX_j=0,其中0,1
lTPXj=0,其中0,1
2.几何误差
图像中的几何误差是:
∑
i
d
(
x
i
,
x
^
i
)
2
\sum _id(x_i,\hat{x}_i)^2
i∑d(xi,x^i)2
其中
x
i
x_i
xi是被测量的点,
x
^
i
\hat{x}_i
x^i是点
P
X
i
PX_i
PXi,即
X
i
X_i
Xi在$P $作用下的精确的图像点.如果测盘误差满足高斯分布,那么
min
P
∑
i
d
(
x
i
,
P
X
i
)
2
\min _P\sum _id(x_i,PX_i)^2
Pmini∑d(xi,PXi)2
解是 P P P的最大似然估计。
世界点有误差
3
D
3D
3D几何误差定义为:
∑
i
d
(
X
i
,
X
^
i
)
2
\sum _id(X_i,\hat{X}_i)^2
i∑d(Xi,X^i)2
如果世界和图像点的误差都考虑:
∑
i
=
1
d
M
a
h
(
x
i
,
P
X
^
i
)
2
+
d
M
a
h
(
X
i
,
X
^
i
)
2
\sum _{i=1}d_{Mah}(x_i,P\hat{X}_i)^2+d_{Mah}(X_i,\hat{X}_i)^2
i=1∑dMah(xi,PX^i)2+dMah(Xi,X^i)2
d
M
a
h
d_{Mah}
dMah表示误差协方差矩阵的Mahalanobis 距离。
代数误差的几何解释
假定所有的点
X
i
X_i
Xi在
D
L
T
DLT
DLT算法中已经归一化,
D
L
T
DLT
DLT算法要最小化的量是:
∑
i
(
w
^
i
d
(
x
i
,
x
^
i
)
)
2
{\sum }_{i}(\hat{w}_id(x_i,\hat{x}_i))^2
∑i(w^id(xi,x^i))2
其中 w ^ i ( x ^ i , y ^ i , 1 ) T = P X i \hat{w}_i(\hat{x}_i,\hat{y}_i,1)^T=PX_i w^i(x^i,y^i,1)T=PXi, w ^ i \hat{w}_i w^i可以解将成点 X i X_i Xi沿主轴方向到摄像机的深度,要最小化的代数误差等于 f ∑ i d ( X i , X i ′ ) 2 f{\sum }_{i}d(X_i,X'_i)^2 f∑id(Xi,Xi′)2
变换不变性
在约束
∥
p
^
3
∥
=
1
\left \| \hat{p} ^3\right \|=1
∥∥p^3∥∥=1,下最小化
∥
A
p
∥
\left \| Ap\right \|
∥Ap∥可以解释成最小化
3
D
3D
3D几何距离。这样既不受
3
D
3D
3D空间也不受图像空间的相似变换的影响。
仿射摄像机的估计
上面有关射影摄像机推导的方法可以直接用于仿射摄像机。仿射摄像机定义为射影矩阵的最后一行是 ( 0 , 0 , 0 , 1 ) (0 , 0 , 0 ,1) (0,0,0,1)的摄像机。.仿射摄像机的 D L T DLT DLT估计是在 P P P的最后一行满足上述条件下最小化 ∥ A p ∥ \left \| Ap\right \| ∥Ap∥。
3.受限摄像机估计
在关于摄像机参数的限制条件下寻求一个最适配的摄像机矩阵 P P P 。 通常的限制是:
- 扭曲 s s s为零
- 像素是正方形: α x = α y \alpha _x=\alpha _y αx=αy
- 主点 ( x 0 , y 0 ) 2 (x_0,y_0)^2 (x0,y0)2已知
- 整个摄像机标定矩阵 K K K已知
最小化几何误差
假定我们强调约束 s = 0 s =0 s=0和 α x = α y \alpha _x=\alpha _y αx=αy,用余下的9 个参数来参数化摄像机矩阵。几何误差可以用迭代最小化方法相对于这组参数来最小化。
最小化代数误差
考虑把参数集 q q q映射到摄像机矩阵 P P P的参数化映射 g g g,最小化所有点匹配的代数误差等价于最小化 ∥ A g ( q ) ∥ \left \| Ag(q) \right \| ∥Ag(q)∥
简化的测量矩阵
一般,
2
n
×
12
2n \times 12
2n×12的矩阵
A
A
A可能有很多行。但可用一个
12
×
12
1 2 \times 12
12×12的矩阵
A
^
\hat{A}
A^代替A,使得对任何矢量
p
p
p有
∥
A
p
∥
=
p
T
A
T
A
p
=
∥
A
^
p
∥
\left \| Ap\right \|=p^TA^TAp=\left \| \hat{A}p\right \|
∥Ap∥=pTATAp=∥∥∥A^p∥∥∥。
初始化
求摄像机初始参数的一种途径是:
- 用诸如 D L T DLT DLT的线性算法求出一个初始的摄像机矩阵
- 把固定参数强制到所希望的取值范围
- 把摄像机矩阵分解所获得的初始值赋给参数变量
外部校准
为了计算外部校准,需对世界坐标位置准确已知的一个配置进行影像。之后求摄像机的姿态。在机器人系统的手眼标定中求摄像机位置就是这样的情形;还有在采用配准技术的基于模型的识别中,需要知到物体相对摄像机的位置。
协方差估计
假定所有的误差仅发生在图像测量中, ML 残差期望值等于:
ε
r
e
s
=
δ
(
1
−
d
/
2
n
)
1
/
2
\varepsilon _{res}=\delta (1-d/2n)^{1/2}
εres=δ(1−d/2n)1/2
其中 d d d主要拟合的摄像机参数数目(对完整的针孔摄像机模型是11) 。给定一个残差, 该公式也可以用来估计点测量的准确性。
4.径向失真
用
(
x
~
,
y
~
)
T
(\tilde{x},\tilde{y})^T
(x~,y~)T标记在理想(非失真)针孔投影下点以焦距为测量单位的坐标。对一点
X
X
X有:
(
x
~
,
y
~
,
1
)
T
=
[
I
∣
0
]
X
c
a
m
(\tilde{x},\tilde{y},1)^T=[I|0]X_{cam}^{}
(x~,y~,1)T=[I∣0]Xcam
其中
X
c
a
m
X_{cam}
Xcam是摄像机坐标下的
3
D
3D
3D点,实际的投影点通过一个径向位移与理想点关联。因此,径向(透镜)失真的模型是:
(
x
d
y
d
)
=
L
(
r
~
)
(
x
~
y
~
)
\begin{pmatrix} x_d\\ y_d \end{pmatrix}=L(\tilde{r})\begin{pmatrix} \tilde{x}\\ \tilde{y} \end{pmatrix}
(xdyd)=L(r~)(x~y~)
其中:
- ( x ~ , y ~ ) T (\tilde{x},\tilde{y})^T (x~,y~)T是理想图像位置(遵循线性投影)
- ( x d , y d ) (x_d,y_d) (xd,yd)经径向失真后的实际图像的位置
- r ~ \tilde{r} r~为到径向失真中心的径向距离 x ~ 2 + y ~ 2 \sqrt{\tilde{x}^2+\tilde{y}^2} x~2+y~2
- L ( r ~ ) L(\tilde{r}) L(r~)是一个失真因子,它仅仅是半径 r ~ \tilde{r} r~的函数
失真矫正
在像素坐标中,失真矫正记为:
x
^
=
x
c
+
L
(
r
)
(
x
−
x
c
)
,
y
^
=
y
c
+
L
(
r
)
(
y
−
y
c
)
\hat{x}=x_c+L(r)(x-x_c),\hat{y}=y_c+L(r)(y-y_c)
x^=xc+L(r)(x−xc),y^=yc+L(r)(y−yc)
- ( x , y ) T (x,y)^T (x,y)T是测量的坐标
- ( x ^ , y ^ ) T (\hat{x},\hat{y})^T (x^,y^)T是矫正后的坐标
- ( x c , y c ) T (x_c,y_c)^T (xc,yc)T是径向失真的中心且 r 2 = ( x − x c ) 2 + ( y − y c ) 2 r^2=(x-x_c)^2+(y-y_c)^2 r2=(x−xc)2+(y−yc)2注意如果长宽比不是1 ,那么在计算$r $时必须对它进行矫正。
失真函数和中心的选择
函数
L
(
r
)
L( r)
L(r)仅当
r
r
r为正值时有定义并且
L
(
0
)
=
1
L(0) = 1
L(0)=1。一个任意函数
L
(
r
)
L( r)
L(r)的逼近可以由泰勒展开式
L
(
r
)
=
1
+
κ
1
r
+
κ
2
r
2
+
κ
3
r
3
+
.
.
.
L(r)=1+\kappa _1r+\kappa _2r^2+\kappa _3r^3+...
L(r)=1+κ1r+κ2r2+κ3r3+...。
{
κ
1
,
κ
2
,
κ
3
,
.
.
,
x
c
,
y
c
}
\left \{ \kappa _1,\kappa _2,\kappa _3,..,x_c,y_c\right \}
{κ1,κ2,κ3,..,xc,yc}是径向矫正的系数。主点经常被用作径向失真的中心,虽然它们未必完全重合。
计算失真函数
函数 L ( r ) L( r) L(r)可以通过最小化一个基于映射的线性偏差的代价函数来计算。失真函数可以作为影像过程的一部分, 把参数 κ i \kappa _i κi与 P P P 一起在几何误差的最小化迭代中计算。