相机标定
- 空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型
- 这些几何模型参数就是相机参数
- 这个求解参数的过程就称之为相机标定(或摄像机标定)
坐标系转换
- 世界坐标系
- 由于摄像机与被摄物体可以放置在环境中任意位置,这样就需要在环境中建立一个坐标系,来表示摄像机和被摄物体的位置,这个坐标系就成为世界坐标系
- 相机坐标系
- 也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。
- 世界坐标系到相机坐标系
- 旋转
- 旋转的表示有很多种
- 旋转矩阵,欧拉角,四元数,轴角,李群与李代数
- 旋转的应用场景
- 惯性导航,机器人学(机械臂运动学,无人机姿势估计,SLAM等)
- 为啥要把世界坐标系变到相机坐标系?因为我们相机坐标系可以将图像的世界点联系起来
- 啥是世界点?一般情况下我们是需要测量物体到机器人的距离和位置关系,因此世界坐标系一般定在机器人上,或者是机器人工作的场景中。
- 世界坐标系与相机坐标系的关系就是相机的外参
- 像素坐标系、图像坐标系
- 像素坐标系uov是一个二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况
- 原点o位于图像的左上角,u轴,v轴分别于像面的两边平行。
- 像素坐标系中坐标轴的单位是像素(整数)
- 图像坐标系
- 像素坐标系不利于坐标变换,因此需要建立图像坐标系XOY
- 其坐标轴的单位通常为毫米,原点是相机光轴与相面的交点(称为主点),即图像的中心点
- X轴,Y轴分别与u轴,v轴平行,故两个坐标系实际是平移关系,即可以通过平移就可以得到
- 图像坐标系转换为像素坐标系
- 畸变参数
- 在几何光学和阴极射线管(CRT)显示中,畸变是对直线投影的一种偏移
- 简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线
- 那畸变简单来说就是一条直线投影到图片上不能保持为一条直线,这是一种光学畸变
- 畸变一般可以分为两大类,包括径向畸变和切向畸变。主要的一般径向畸变有时也会有轻微的切向畸变。
- 畸变一般可以分为:径向畸变,切向畸变
- 径向畸变
- 实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响
- 光线在远离透镜中心的地方比较靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重
- 对于径向畸变,成像仪(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。
- 有三种
- 桶形畸变
- 枕形畸变
- 胡子畸变
- 切向畸变
- 切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的
- 切向畸变可分为:薄透镜畸变,离心畸变
- 切向畸变图示:
- 当透镜不完全平行于图像平面时候产生切向畸变
- 径向畸变来自于透镜形状
- 切向畸变来自于整个摄像机的组装过程
- 畸变还有其他类型的畸变,但是没有径向畸变和切向畸变显著
- 畸变矫正
- 摄像机标定目的
- 给定物体的参考点坐标(x,y,z)和它的像素坐标(u,v)
- 确定相机内部的几何和光学特性(内部参数)
- 摄像机在三维世界坐标关系(外部参数)
- 标定方法分类
- 传统的摄像机标定方法
- 在一定摄像机模型下,基于特定的实验条件如形状、尺寸已知参照物,进行图像处理,数学变换,技术方法,求取内外参数
- 经常调整摄像机的需求,设置已知参照物不现实
- 包括利用最优算法的标定方法,利用摄像机变换矩阵的标定方法,进一步考虑畸变补偿的两步法,张正友标定法
- 自标定法
- 不依赖参照物
- 利用摄像机本身参数之间的约束关系来标定
- 利用周围图像与图像之间的对应关系
- 基于Krupa方程,分层逐步标定法,基于二次曲面自标定
- 张氏标定法
- 利用平面棋盘格进行相机标定的实用方法,该方法介于摄影标定法和自标定法之间,既克服了摄影标定需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程仅需要使用一个打印出来的棋盘格,并从不同方向拍摄几组图片即可,任何人都可以自己制作标定图案,不仅实用灵活方便,而且精度很高,鲁棒性好,因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程
- 单应性变换
- 来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。在上述式子中,单应性矩阵定义为
- 单应性在计算机视觉中的应用
- 图像校正,图像拼接,相机位姿估计,视觉SLAM等领域有非常重要的作用。
- 图像校正
- 图像拼接
- 既然单应矩阵可以进行视角转换,那我们把不同角度拍摄的图像都转换到同样的视角下,就可以实现图像拼接了,如下图所示,通过单应矩阵H可以将image1和image2都变换到同一平面
- 增强现实(AR)
- 平面二维标记图案(marker)经常用来做AR展示,根据marker不同视角下的图像可以方便的得到虚拟物体的位置姿态并进行显示
- 如何估计单应矩阵
- 首先,我们假设两张图像中的对应点对齐次坐标为(x’,y’,1)和(x,y,1)单应矩阵H定为:
这里使用的是齐次坐标系,也就是可以进行任意尺度的缩放。比如我们把Hij乘以任意一个非零常数k并不改变等式结果
总结
1.打印一张棋盘格标定图纸,将其贴在平面物体的表面
2.拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现也可以移动标定图片来实现。
3.对于拍摄的期盼图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品共色的圆圈内就是一个角点)。我们定义打印的棋盘图纸位于世界坐标系Zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于图片左上角。
因为棋盘标定图纸中所有角点的空间坐标都是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点(越多计算记过越鲁棒),就可以根据LM等优化方法得到其单应矩阵H。当然计算单应矩阵一般不需要自己写函数实现,opencv中就有现成的函数可以调用。