目录
一、回顾上两篇文章的内容
二、标定方法分类
三、张氏标定法
1.棋盘
2.用棋盘
(1).单应性变换
(2).单应性在计算机视觉中的应用
(3).如何估计单应矩阵?
四、总结
(2条消息) 非常详细的相机标定原理、步骤(一)_An efforter的博客-CSDN博客
(2条消息) 非常详细的相机标定原理、步骤(二)_An efforter的博客-CSDN博客
(2条消息) 非常详细的相机标定原理(四)(张正友相机标定法数学推导求解)_An efforter的博客-CSDN博客
非常详细的相机标定(五)(相机标定代码讲解)_An efforter的博客-CSDN博客
摄像机标定的目的:
以上内容不理解,看一下前两节内容。
2.自标定法不依赖参照物
「张氏标定法」是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration ByViewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。该方法介于摄影标定法和自标定法之间,既克服了摄影标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程仅需使用一个打印出来的棋盘格,并从不同方向拍摄几组图片即可,任何人都可以自己制作标定图案,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。
棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。
如下图所示,是相机在不同方位下拍摄的同一个棋盘图像。
先用世界坐标系转化像素坐标系的公式来铺垫:
拆下来: 是世界坐标,假设标定棋盘位于世界坐标系中Zw=0的平面。
来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。
我们根据标定棋盘图纸及其对应的照片已经可以得到单应矩阵H了。
如下所示︰ 单应性矩阵定义为︰ M代表内部参数,r,t是外部参数。下一节会讲解。
图像拼接:
既然单应矩阵可以进行视角转换,那我们把不同角度拍摄的图像都转换到同样的视角下,就可以实现图像拼接了。如下图所示,通过单应矩阵H可以将image1和image2都变换到同一个平面。
增强现实(AR):
平面二维标记图案(marker)经常用来做AR展示。根据marker不同视角下的图像可以方便的得到虚拟物体的位置姿态并进行显示,如下图所示。
首先,我们假设两张图像中的对应点对齐次坐标为(x',y',1)和(x,y,1),单应矩阵H定义为:
在上面是公式的转化:特别注意一点是第三个等式,1=hx+hy+h (简写),分母替换下来。
一个令人懵逼的问题:单应矩阵H有几个自由度? (自由度是指的H有几个变量参数,不懂不用管,继续看)
肯定回答9个啊, H矩阵不是9个参数吗?
这里使用的是齐次坐标系,也就是说可以进行任意尺度的缩放。比如我们把hij乘以任意一个非零常数k并不改变等式结果: (就是乘以K系数,不会改变大小)
想要完美的解决,H矩阵要求出来,参数一个不能少。
9个参数,有一种方法是h33点设为1,这样说的话就还有8个参数,那就有8个方程。
还有8个自由度计算,那怎么去做呢?
把上面的式子移项化简:
假如我们得到了两幅图片中对应的N个点对(特征点匹配对),那么可以得到如下线性方程组:
学过线性代数的一看就明白了,就是建立系数矩阵,原点与目标点矩阵。
我的回答:这里有两个方程,就需要4对原点坐标,带入方程建立矩阵,就能够得到目标点四个坐标,也就是等号右边的矩阵。
官方的回答:由于单应矩阵H包含了||H|=1约束,因此根据上图的线性方程组,8自由度的H我们至少需要4对对应的点才能计算出单应矩阵。这也回答了前面图像校正中提到的为何至少需要4个点对的根本原因。
但是,以上只是理论推导,在真实的应用场景中,我们计算的点对中都会包含噪声。比如点的位置偏差几个像素,甚至出现特征点对误匹配的现象,如果只使用4个点对来计算单应矩阵,那会出现很大的误差。因此,为了使得计算更精确,一般都会使用远大于4个点对来计算单应矩阵。另外上述方程组采用直接线性解法通常很难得到最优解,所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat (LM)算法下节介绍)等进行求解。
1、打印一张棋盘格标定图纸,将其贴在平面物体的表面。
2、拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现.也可以移动标定图片来实现。
3、对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品红色的圆圈内就是一个角点)。我们定义打印的棋盘图纸位于世界坐标系Zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于图片左上角。
因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到其单应矩阵H。当然计算单应矩阵一般不需要自己写函数实现,OpenCV中就有现成的函数可以调用。