前言
张正友标定法太闻名了,历久不衰,20年后仍然以它作为机器视觉的标定基础,在机器视觉这门课的学习过程中,有个别问题,在此予以记录。
靶标精确度问题
问题描述:在标定前,如果靶标的方格子长度事先不已知,能否标定出相机的内外参数?
符号定义
现有靶标上的点使用齐次坐标Mi=(xi,yi,1)T表示,相机平面上对应的点使用mi=(ui,vi,1)表示,以上两组点列值的坐标均已知。相机内参的形式固定且已知,参数待定,形式为:
A=αx00γαy0u0v01
相机的外参形式不明确,表示为:
D=r11r21r31r12r22r32t1t2t3
注意到由于外参前两列r1,r2是相机图像坐标系从在相机坐标系得到的旋转矩阵前两列,也即图像坐标系两坐标轴在相机坐标系下的单位矢量方向,第三列t是相机图像坐标系从相机坐标系经平移变换得到的平移矢量,即图像坐标系原点在相机坐标系下的矢量位置。因此外参矩阵D不是正交矩阵,仅前两列满足正交性和规范性,第三列不满足,这个性质在后续分解内外参时会用到。为了方便分析讨论,记H=λAD为相机的转换矩阵,其中λ是某一常数因子,因靶标的齐次坐标表示而产生。
问题为:在靶标点和图像点二范数意义下最佳逼近,求解转换矩阵H和内外参数矩阵。
求解转换矩阵
方法一:广义逆矩阵法
某一给定的矩阵方程:F=PXQ,其中X是未知数矩阵,只要两个转换矩阵P,Q的广义逆满秩,该方程就一定能有最佳小二解,即最小二乘解:
X~=P+FQ+=(PHP)−1PHFQH(QQH)−1
因此在这里,如果将各靶标点写成以下形式:
m=u1v11u2v21⋯⋯⋯unvn1
图像点写成以下形式:
M=x1y11x2y21⋯⋯⋯xnyn1
则观测值和理想值的原始方程smi=HMi可以扩展写为:
m=HM
这里为了简化问题,将左式的齐次坐标常数和H矩阵内部的齐次化因子λ合并,得到以上简化方程形式,该方程的最佳小二解是:H∗=mMH(MMH)−1。到此,转换矩阵得以求解,这里需要说明的是,转换矩阵的值与靶标测度有关,不同的靶标比例尺将得到不同的转换矩阵H,它们彼此之间相差一个比例系数。
求解内外参矩阵
外参矩阵前两列的正交性提供两组约束条件:
{r1Hr2r1Hr1=0=r2Hr2
因此,对于单个固定靶标,将得到9+2=11个方程。但是有1+5+9=15个未知数,这便是标定过程中需要更改靶标位置重新拍摄图像的原因。在更改靶标过程中,相机位置保持不变(实际上变不变都无所谓),因此相机的内参认为是保持不变的,给定一个拍摄位置,将会产生一个转换矩阵和外参矩阵,即新产生11个方程和9个未知数(内参不变),因此,只需要三个位置的靶标拍摄图像,未知数个数就不再多于方程个数:
靶标个数 |
未知数个数 |
方程个数 |
可解情况 |
1 |
15 |
11 |
秩亏 |
2 |
24 |
22 |
秩亏* |
3 |
33 |
33 |
刚好满秩 |
4 |
42 |
44 |
最优小二解存在 |
说明:特殊情况下如忽略图像坐标系的不垂直因子γ时可以认为两个靶标可解。==?(有问题?)==
求解内参矩阵
根据内参矩阵的上三角形式,可以算出其逆矩阵形式,如下式:
A−1=αxαy1αx00−γαx0γv0−αyu0−αxv0αxαy
为了使用D前两列正交的性质,需要对方程H=AD变形得到(内参矩阵一定是满秩的):A−1H=D,设矩阵
H=h11h21h31h12h22h32h13h23h33
由此可知有以下两个约束条件:
⎩⎨⎧[h11,h21,h31]A−TAh12h22h32=0[h11−h12,h21−h22,h31−h32]A−HAh11−h12h21−h22h31−h32=0
由此式可以计算得到参考资料[1]所示的B矩阵,此处略去,该矩阵是一个对称阵,不妨记为:
B=b11b21b31b12b22b32b13b23b33
可以将上述矩阵约束条件改写为:
bvij[v12Hv11H−v22H]b=[b11,b12,b22,b13,b23,b33]H=[h1ih1j,h1ih2j+h1jh2i,h2ih2j,h1ih3j+h1jh3i,h2ih3j+h3jh2i,h3ih3j]H=0
不同位置处得到的转换矩阵将对应不同的vij矢量,可见约束条件中仅仅用到了矩阵H的==前两列==,第三列则完全==没有参与运算==。将这些矢量按行排列得到矩阵V,则b的最佳小二解就是VHV最小特征值对应的特征向量,此时解得的b带有一个比例系数,可对最后一个元素b33作归一化操作即可将之消去。
注意到矢量vij是hij的齐二次式,而根据最佳小二解H∗=mMH(MMH)−1可知,hij是靶标坐标(x,y,1)H的齐负一次式。记精确测量结果带有波浪线上标,当靶标因为测度不准引起的倍缩因子为k时,即Mi=[xi,yi,1]H=[kx~i,ky~i,1]H,测不准相当于在靶标坐标上乘以一个对角阵,即有:
M=xiyi1=k000k0001x~iy~i1=Kx~iy~i1=KM~
矩阵K可逆,逆矩阵也是对角阵,因此可改写转换矩阵:
H=mMH(MMH)−1=mMHKH(KM~M~HKH)−1=mMHKHK−1(M~M~H)−1K−H=mMH(M~M~H)−1K−1=H~K−1
代入后式可知:H~前两列相比H多乘了一个常数因子k1,而第三列保持与H相同。在求解内参矩阵时,只用到了H~的前两列的正交性和规范性约束条件,多乘的常数因子会使矢量vij的各个元素均变成已知精确棋盘长度结果对应矢量v~ij的k21,即vij=k21v~ij,得到的V矩阵也相应变化,这部分变化体现在B矩阵的比例系数上,而该因子将随元素b33归一化过程消去。因此不精确的棋盘格也可准确标定相机内部参数。然后,对解得的矩阵B作Cholesky矩阵分解,即将一个对称阵分解为两个相同的上三角阵乘积,即可解得内参矩阵。
求解外参矩阵
解得内参数矩阵后,对方程H=AD⟹D=A−1H即可解得外参数矩阵。这里,外参数矩阵使用到了H矩阵的所有元素,因此其值受靶标精度决定,不精确的靶标也会得到不精确的外参数矩阵,这说明使用张正友标定法不能较为精确地标定外参矩阵(虽然这也没有什么必要)。
写在后面
这个推导过程重点在求解内参矩阵上,关键是理解引入的倍缩矩阵K比例倍缩改变了前两列,而解内参矩阵时只用到了前两列,正好形成了齐次关系,所以不精确测量产生的倍缩可以被消除。
如果棋盘不是均匀的,或者镜头产生了畸变,则前两列的齐次关系将被破坏,使用张正友标定法也得不到准确的内参矩阵了。
参考资料
[1] 张广军,机器视觉,科学出版社