一、相机标定原理简介
1.1 相机成像系统
相机成像系统中,包含四个坐标系,分别是世界坐标系、相机坐标系、图像坐标系、像素坐标系。
世界坐标系:代表物体在真实世界里的三维坐标。
相机坐标系:代表以相机光学中心为原点的坐标系,光轴与轴重合。
图像坐标系:代表相机拍摄图像的坐标系,原点为相机光轴与成像平面的交点,是图像的中心点。
像素坐标系:由于图像的基本单位是像素,所以该坐标系是图像上点在图像储存矩阵中的像素位置,坐标原点在左上角。
前三个坐标系的单位是毫米,而最后一个坐标系的单位是像素。
这四个坐标系之间的转换关系如下:
用矩阵表示就是:
其中,为世界坐标系下的一点的物理坐标,为该点对应于像素坐标系下的像素坐标,为尺度因子。
我们将矩阵:
称为相机的内参矩阵,内参矩阵由相机内部的参数决定。其中,为焦距,、分别表示、方向上的一个像素在相机感光板上的物理长度(即一个像素在感光板上是多少毫米),、分别表示相机感光板中心在像素坐标系下的坐标,表示感光板的横边和纵边之间的角度(表示无误差)。
我们将矩阵:称为相机的外参矩阵,外参矩阵取决于相机坐标系和世界坐标系的相对位置,表示旋转矩阵,表示平移矢量。
即单点无畸变的相机成像模型如下:
相机标定的第一个目的就是获得相机的内参矩阵和外参矩阵。
1.2 相机畸变
由于相机制造工艺的原因,其成像过程中难免存在畸变。畸变主要分为两类,分别是径向畸变和切向畸变。
径向畸变公式(3阶)如下:
切向畸变公式如下:
将径向畸变和切向畸变合并,只需要将两个畸变矫正直接加起来即可,公式如下:
合并考虑畸变的原因也很简单,两种畸变同时发生在成像过程中,发生的原因也是相互独立的。
其中,,分别为理想的无畸变的归一化图像坐标、畸变后的归一化图像坐标,为图像像素点到图像中心点的距离,即。
相机标定的第二个目的就是获得相机的畸变参数,进而对拍摄的图片进行去畸变处理。
二、利用OpenCV实现张正友标定法
2.1 张正友标定法简介
张正友标定法利用黑白棋盘格标定板,在得到一张标定板的图像后,用Harris角点检测算法得到每一个角点的像素坐标。
张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,我们可以计算得到每一个角点在世界坐标系下的物理坐标。
我们将利用这些信息:每个角点的像素坐标,每个角点在世界坐标系下的物理坐标,来进行相机的标定,获得相机的内外参矩阵、畸变参数。
2.2 利用OpenCV进行张正友标定法
OpenCV内置了张正友相机标定法,通过calibrateCamera可以直接调用,输入已知量得到未知量。
函数模型:
ret, mtx, dist, revecs, tvecs = cv2.calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs)
输入参数:
objectPoints:np.ndarray世界坐标系下的角点坐标,维度img_num * corner_num * 3
imagePoints:np.ndarray角点在图像中的坐标,维度img_num * corner_num * 1 * 2
imageSize:tuple图像尺寸,格式(图像宽度,图像高度)
cameraMatrix:np.ndarray相机内参初始值,如果没有初始值,则设置为None
distCoeffs:np.ndarray相机畸变系数初始值,如果没有初始值,则设置为None
输出参数:
retval:bool相机标定是否正确
cameraMatrix:np.ndarray相机内参矩阵
distCoeffs:np.ndarray相机畸变系数
rvecs:np.ndarray相机外参-旋转向量,可以通过罗德里格斯公式转换为旋转矩阵
tvecs:np.ndarray相机外参-平移向量