2.3 传统标定方法
传统的摄像机标定需要借助已知的标定物(数据已知的2D标定板或3D标定块),即需要知道标定物的尺寸和形状(标定点的位置和分布),然后通过建立标定物上的点与拍摄所得图像上的对应点之间的对应关系来确定摄像机的内、外参数。其优点是理论清晰明了、求解简单、标定精度高,缺点是标定的过程相对复杂,对标定物的精度要求较高。
2.3.1 基本步骤和参数
标定可以沿着从3D世界坐标到计算机图像坐标的转换方向进行。如图2-7所示,从世界坐标系到计算机图像坐标系的转换共有4步,每步都有需要标定的参数。
图2-7 沿坐标转换方向进行摄像机标定
第1步:需要标定的参数是旋转矩阵R和平移矩阵T。
第2步:需要标定的参数是镜头焦距λ。
第3步:需要标定的参数是镜头径向畸变系数k、偏心畸变系数l、薄棱镜畸变系数m。
第4步:需要标定的参数是不确定性图像尺度因子μ。
2.3.2 两级标定法
两级标定法是一种典型的传统标定方法,因标定分2步而得名:第1步是计算摄像机的外参数(但先不考虑沿摄像机光轴方向的平移),第2步是计算摄像机的其他参数。由于该方法利用了径向校准约束(RAC),所以也称为RAC法。其计算过程中的大部分方程属于线性方程,所以求解参数的过程比较简单。该方法已广泛应用于工业视觉系统,3D测量的平均精度可达1/4000,深度方向上的精度可达1/8000。
标定可分为两种情况。
(1)如果μ已知,在标定时只需使用一幅含有一组共面基准点的图像。此时第1步计算R、Tx、Ty,第2步计算λ、k、Tz。这里因为k是镜头的径向畸变系数,所以对R的计算可不考虑k,同样,对Tx和Ty的计算也可不考虑k,但对Tz的计算需要考虑k(Tz变化对图像的影响与k的影响类似),所以放在第2步。
(2)如果μ未知,在标定时需要用一幅含有一组不共面基准点的图像。此时第1步计算R、Tx、Ty、μ,第2步仍计算λ、k、Tz。
具体的标定过程是先计算一组参数si(i=1,2,3,4,5)或s=[s1 s2 s3 s4 s5]T,借助这组参数可进一步算出摄像机的外参数。设给定M(M≥5)个已知世界坐标(Xi,Yi,Zi)和对应的像平面坐标(xi,yi)的点,其中i=1,2,…,M,可构建矩阵A,其中的行向量ai可表示如下:
再设si与旋转参数r1、r2、r4、r5及平移参数Tx、Ty有如下关系:
设矢量u=[x1 x2 … xM]T,则由如式(2-38)所示的线性方程组可解出s。
然后可根据下列步骤计算各旋转和平移参数。
(1)设,计算
(2)设,即取正的平方根,计算
(3)选一个世界坐标为(X,Y,Z)的点,要求其像平面坐标(x,y)离图像中心较远,计算
这相当于将算出的旋转参数应用于点(X,Y,Z)的X和Y。如果pX和x的符号一致,且pY和y的符号一致,则说明Ty已有正确的符号,否则需要将Ty取负。
(4)计算其他旋转参数。
注意,如果r1r4+r2r5的符号为正,则r6要取负,而r7和r8的符号要在计算完焦距λ后调整。
(5)建立另一组线性方程来计算焦距λ和z方向的平移参数Tz。可先构建一个矩阵B,其中的行向量bi可表示为
其中,表示向下取整。
设矢量v的行vi可表示为
则由如式(2-45)所示的线性方程组可解出t=[λ Tz]T。注意,这里得到的仅是对t的估计。
(6)如果λ<0,要使用右手坐标系,须将r3、r6、r7、r8、λ、Tz取负。
(7)利用对t的估计计算镜头径向畸变系数k,并调整对λ和Tz的取值。这里使用包含畸变的透视投影方程,可得到如下非线性方程:
用非线性回归方法解上述方程即可得到k、λ、Tz的值。
❑ 例2-2 摄像机外参数标定示例
5个基准点的世界坐标值(已知)和对应的图像坐标值如表2-2所示。
表2-2 5个基准点的世界坐标值(已知)和对应的图像坐标值
如图2-8所示,图2-8(a)为上述5个基准点在世界坐标系中的位置示意,图2-8(b)为它们在像平面坐标系中的位置示意。
根据表2-2中的数据和式(2-36),可得到矩阵A和矢量u:
图2-8 5个基准点在世界坐标系和像平面坐标系里的位置示意
由式(2-38)可得
s =[-0.17 0 0-0.20 0.87]T
其他计算步骤如下。
(1)因为,所以由式(2-39)可得
(2)取Ty=5.00,分别得到r1=s1Ty=-0.87,r2=s2Ty=0,r4=s3Ty=0,r5=s4Ty=-1.00,Tx=s5Ty=4.33。
(3)选取与图像中心距离最远的、世界坐标为(10.0,7.5,0.0)的点,其像平面坐标为(1.73,1.00),计算得到pX=r1X+r2Y+Tx=-4.33,pY=r4X+r5Y+Ty=-2.50。
由于pX和pY的符号与x和y的符号不一致,因此对Ty取负,再回到步骤(2),得到r1=s1Ty=0.87,r2=s2Ty=0,r4=s3Ty=0,r5=s4Ty=1.00,Tx=s5Ty=-4.33。
(4)继续计算其他几个参数,可依次得到,r6=,r9=(1-r3r7-r6r8)1/2=0.87。因为r1r4+r2r5=0,不为正,所以r6不需要取负。
(5)建立第2组线性方程,由式(2-43)和式(2-44)可得
解线性方程组,由式(2-45),得t=[λ Tz]T=[-1.0-7.5]T。
(6)由于λ为负,表明不是右手坐标系,为反转Z坐标轴,须将r3、r6、r7、r8、λ、TZ取负,最后得到λ=1,以及如下结果:
(7)本例没有考虑镜头径向畸变系数k,所以上述结果即最终结果。
2.3.3 精度提升
上述的两级标定法仅考虑了摄像机镜头的径向畸变,如果在此基础上进一步考虑镜头的切向畸变,则有可能进一步提高摄像机标定的精度。
根据式(2-28)和式(2-29),考虑径向畸变和切向畸变的总畸变偏差dx、dy为
对径向畸变考虑到4阶项,对切向畸变考虑到2阶项,则有
对摄像机的标定可分如下两步进行。
(1)设镜头畸变系数k1、k2、l1、l2的初始值均为0,计算R、T、λ的值。
参照式(2-4)和式(2-5),并参考对式(2-46)的推导,可以得到
由式(2-51)和式(2-52)得到
式(2-53)对所有基准点都成立,即利用每个基准点的3D世界坐标和2D图像坐标都可建立一个方程。式(2-53)中有8个未知数,所以如果有8个基准点,就可构建含8个方程的方程组,进而算出r1、r2、r3、r4、r5、r6及Tx、Ty的值。因为R是一个正交矩阵,所以根据其正交性可算出r7、r8、r9的值。将算出的值代入式(2-51)和式(2-52),再任取两个基准点的3D世界坐标和2D图像坐标,就可算得Tz和λ的值。
(2)计算镜头畸变系数k1、k2、l1、l2的值。
根据式(2-20)和式(2-21)、式(2-47)~式(2-50),可以得到
借助已经得到的R和T,可利用式(2-53)算出(X,Y,Z),再代入式(2-54)和式(2-55),就得到
其中,j=1,2,…,N,N为基准点个数。用2N个线性方程,通过最小二乘法求解,就可求得4个畸变系数k1、k2、l1、l2的值。