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