非常详细的相机标定原理(三)(张正友相机标定法初见和单应性矩阵)

目录

一、回顾上两篇文章的内容

二、标定方法分类

 三、张氏标定法

 1.棋盘

 2.用棋盘

 (1).单应性变换

 (2).单应性在计算机视觉中的应用

 (3).如何估计单应矩阵?

四、总结


(2条消息) 非常详细的相机标定原理、步骤(一)_An efforter的博客-CSDN博客

(2条消息) 非常详细的相机标定原理、步骤(二)_An efforter的博客-CSDN博客

(2条消息) 非常详细的相机标定原理(四)(张正友相机标定法数学推导求解)_An efforter的博客-CSDN博客

非常详细的相机标定(五)(相机标定代码讲解)_An efforter的博客-CSDN博客

一、回顾上两篇文章的内容

摄像机标定的目的:

  • 给定物体的参考点坐标(x,y,z)和它的像素坐标(u,v)
  • 确定相机内部的几何和光学特性(内部参数)
  • 摄像机在三维世界坐标关系(外部参数)
  • 总流程图,矩阵的转换关系

以上内容不理解,看一下前两节内容。

二、标定方法分类

  1. 传统的摄像机标定方法
  • 在一定摄像机模型下、基于特定的实验条件如形状、尺寸已知参照物,进行图像处理,数学变换、技术方法,求取内外参数。
  • 经常调整摄像机的需求、设置已知参照物不现实
  • 包括利用最优化算法的标定方法,利用摄像机变换矩阵的标定方法、进—步考虑畸变补偿的两步法、张正友标定法。

       2.自标定法不依赖参照物

  • 利用摄像机本身参数之间的约束关系来标定
  • 利用周围图像与图像之间的对应关系
  • 与场景和摄像机运动无关
  • 基于Krupa方程、分层逐步标定法、基于二次曲面自标定

 三、张氏标定法

「张氏标定法」是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration ByViewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。该方法介于摄影标定法和自标定法之间,既克服了摄影标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程仅需使用一个打印出来的棋盘格,并从不同方向拍摄几组图片即可,任何人都可以自己制作标定图案,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。

 1.棋盘

          棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。

            如下图所示,是相机在不同方位下拍摄的同一个棋盘图像。

 2.用棋盘

先用世界坐标系转化像素坐标系的公式来铺垫:

拆下来: 是世界坐标,假设标定棋盘位于世界坐标系中Zw=0的平面。

 (1).单应性变换

     来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。

我们根据标定棋盘图纸及其对应的照片已经可以得到单应矩阵H了。

如下所示︰            单应性矩阵定义为︰ M代表内部参数,r,t是外部参数。下一节会讲解。

 (2).单应性在计算机视觉中的应用

  • 图像校正、图像拼接、相机位姿估计、视觉SLAM等领域有非常重要的作用。

图像矫正

 视角变换:

 图像拼接:

       既然单应矩阵可以进行视角转换,那我们把不同角度拍摄的图像都转换到同样的视角下,就可以实现图像拼接了。如下图所示,通过单应矩阵H可以将image1和image2都变换到同一个平面。

增强现实(AR):

         平面二维标记图案(marker)经常用来做AR展示。根据marker不同视角下的图像可以方便的得到虚拟物体的位置姿态并进行显示,如下图所示。

 (3).如何估计单应矩阵?

 首先,我们假设两张图像中的对应点对齐次坐标为(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个方程。

                                                 

 不能白白的设置为1,设置一个约束条件,

 还有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中就有现成的函数可以调用。

猜你喜欢

转载自blog.csdn.net/qq_40694323/article/details/125251362