机器视觉的相机标定

来源:互联网 发布:数控螺纹编程书 编辑:程序博客网 时间:2024/05/21 14:09

部分内容参考了知乎专栏,感谢该大神的无私分享

相机标定

一.目的

相机标定是为了获得从像素坐标系到世界坐标系的转换矩阵,该矩阵由相机的内参和外参决定,当我们求出该矩阵后我们便可以通过像素坐标直接得出世界坐标,从像素坐标到世界坐标的转换过程如下:

Created with Raphaël 2.1.0开始世界坐标系相机坐标系图像坐标系(考虑畸变)像素坐标系

二、坐标系的转换

  1. 世界坐标系–>相机坐标系
    参考机器人学导论中有关坐标系变化的章节,了解坐标系之间的变换矩阵后便可以很容易理解世界坐标系到相机坐标系之间的转换过程:
    旋转矩阵
    平移矩阵

通过以上两幅图片我们可以知道对于任意的两个坐标系,我们都可以通过旋转和平移变换来进行转换,其中旋转变换可以通过分别绕x,y,z轴的旋转来实现并得到旋转矩阵。为了便于矩阵运算,我们引入齐次坐标系,于是世界坐标系到相机坐标系的转换矩阵为:
这里写图片描述

其中变换矩阵如下,R为旋转矩阵,t为平移矩阵:
这里写图片描述

2.相机坐标系–>图像坐标系:
这时我们先不考虑畸变,得出理想情况下的关系之后再进行畸变校正
根据小孔成像的原理
这里写图片描述

我们可以绘制出相机坐标与图像坐标之间的关系:

这里写图片描述

根据三角形相似,我们可以得到相机坐标系与图像坐标系之间的转化:

这里写图片描述

为了便于运算,我们将其转化为齐次坐标的形式:
这里写图片描述

3.畸变校正
由于透镜成像的原因,我们成像得到的图像坐标会存在偏移,常见的畸变为径向畸变和切向畸变。
径向畸变校正前后的坐标关系为(使用泰勒展开式描述径向畸变):
这里写图片描述

切向畸变校正前后的坐标关系为:
这里写图片描述
综上我们需要5个参数k1、k2、k3、p1、p2来描述畸变

4.图像坐标系–>像素坐标系:
这里写图片描述

如上图所示,(u,v)为像素坐标系,其原点为O0,(x,y)为图像坐标系,其原点为O1(u0,v0),dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系:
这里写图片描述

同样为了计算方便,将其转化为齐次坐标的矩阵形式:

这里写图片描述

总结上述坐标变化的过程为:

这里写图片描述

三、相机的内外参数

通过以上坐标系变换的详解,我们知道从像素坐标系到世界坐标系的转化。其中我们将其分为相机的外部参数和内部参数。

1.外部参数
摄像机的外部参数是用来描述摄像机坐标系与世界坐标系的关系,也就是由旋转矩阵和平移矩阵所构成的齐次矩阵。

2.内部参数
内部参数只与摄像机内部结构有关,而与摄像机位置参数无关,主要包括图像主点坐标、单个像元的高宽、摄像机的有效焦距 f 和透镜的畸变失真系数 k 等。上图中从相机坐标系到像素坐标系两个变换矩阵的乘积即为相机的内部参数矩阵M(在不考虑畸变的情况下):
这里写图片描述

3.单应性矩阵
在计算机视觉中的单应性被定义为从一个平面到另一个平面的投影映射关系,前面我们已经得到了像素坐标系和世界坐标系下的坐标映射关系为:

这里写图片描述

因此,我们定义相机标定的单应性矩阵(从物体平面到成像平面)为:

这里写图片描述

那么我们最终的目的就是求解该单应性矩阵,得到相机标定的结果,其中标定方法有张正友法、九点标定法等,我们可以利用OpenCV中的cameraCalibration来进行相机标定,该方法是利用了张正友法来实现的,想了解的同学可以看看张正友法的论文,这里给出之前在网上看的英文原版和中文版

其中详细描述了如何求解单应性矩阵的方法,了解了原理之后我们无论使用OpenCV还是Halcon等进行相机标定都会事半功倍

补充更新

在前文我们了解了相机标定的基本原理,由此我们可以利用一些三方库,比如opencv,halcon的算子来进行标定,我利用了halcon的标定助手对相机标定有了更加深入的理解。在halcon软件中,我们可以利用halcon生成的特定标定板,使用halcon标定助手进行标定,我们可以预先提供相机的参数,焦距f,像元大小dx,dy,以及标定板的大小,点之间的距离和点的大小,有了这些参数之后,当halcon检测到标定板和其中的标定点时,就有了像素中的距离和实际的物理距离的对应关系,这时经过畸变校正之后得出标定后的相机内参,可能会与我们给定的参数有一些误差,确定了相机的内参之后,也就是知道了像素坐标系和相机坐标系之间的关系,但我们还需要知道世界坐标与相机坐标之间的旋转及平移矩阵,我们也可以利用halcon中的标定函数来得到对应的转换矩阵。当不考虑畸变的时候,在2D平面,相机静止的条件下可以直接使用九点标定法,给出九组像素坐标与实际坐标之间的关系后,便可以直接得到单应性矩阵,而不需要繁琐的标定转化过程。

原创粉丝点击