前言
今天介绍一个比较复杂的话题——照相机标定
为社么会复杂呢?因为解释起来比较麻烦,会涉及到很多数学公式。
本文将运用张正友相机标定的数学原理,并给出标定流程。OpenCV中已经封装好了一系列函数,我们使用这些函数可以实现张正友相机标定。那么首先说明一下什么是相机标定?
一个摄像机可以大致分为三个部分:镜头 、感光元件(CCD和CMOS)、处理电路。当光线透过镜头,会在感光元件上形成一个物体的“像”。(小孔成像原理)然后经过一系列处理就变成了电子版的图片。当然这种变换过程中会产生一定的误差(就好像透过猫眼看人会是一个曲面)。所以为了消除或者矫正这些误差,就出现了标定技术(就是将图片还原成正常人眼看到的图像)。
相机标定步骤
- 准备一张打印好的棋盘格,对棋盘格进行不同角度的拍摄,10-20张图片为宜;
- 对每张图片提取角点信息;
- 在图片中画出提取出的角点;
- 相机标定;
- 对标定结果评价,计算误差;
- 使用标定结果对原图片进行矫正;
一 、摄像机标定成像原理
1.四个坐标系
世界坐标系、相机坐标系、像素坐标系、成像平面坐标系。
我们可以把现实生活遇到的任何事物用坐标系表示出来,也可以用坐标系表示整个世界,于是便建立起了世界坐标系。想象一下,摄像机拍摄的是一张二维图片,因此整个摄像机可以用一个坐标系去标识它获取到的某个物体的位置,这是相机坐标系。像素坐标系就是相片的坐标系。成像平面坐标系类似于像素坐标系。
原本我们期望的拍摄效果:是每个坐标系中的像素都相互对应,类似于一种一元一次方程,但由于镜头或者其他关系,现在这条“直线”弯了,得到的图像也会出现“弯曲”,因此我们需要把它矫正。
2.相机参数
相机都有不同的内部参数、外部参数;
内部参数:有一个参数矩阵(fx,fy,cx,cy)和一个畸变系数(三个径向k1,k2,k3;两个切向p1,p2);内部参数是唯一的,就是一部相机只有一组内部参数。
相机将场景中的三维点变换为图像中的二维点,也就是各个坐标系变换的组合,可将变换过程整理为矩阵相乘的形式:
其中,α,β表示图像上单位距离上像素的个数,则fx=αf,fy=βf