通过标定我们可以获得相机内参、相机外参和畸变系数矩阵。
标定的基本实现流程如下:
1.确定标定板的size大小
2.给出标定板中角点的世界坐标(默认处于z=0的平面)
3.调用cv::findChessboardCorners()获取角点的像素坐标(二维)
4.调用cv::cornerSubPix()进行角点的亚像素精确
5.调用cv::calibrateCamera()进行标定获取相机的内参和外参以及畸变系数矩阵
6.利用相机内参和畸变系数得到映射关系mapx,mapx
7.应用cv::remap()去畸变,映射到正确的像素点坐标上
相机内参:
fx:焦距/(x轴上一个像素点的单位长度)
fy:焦距/(x轴上一个像素点的单位长度)
(cx,cy)为主点坐标,一般近似为图像的中心坐标点
相机外参(每幅图像对应着一个外参):
相机外参数是世界坐标系中的参数,比如相机的位置,旋转平移的方向
旋转矩阵rvecs:描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向
平移矩阵tvecs:描述了在摄像机坐标系下,空间原点的位置
利用rvecs和tvecs可以进行反向投影,将世界坐标投影得到新的角点坐标,与之前的进行误差比较,。
畸变系数:
ki是颈向畸变系数;pi是切向畸变系数
颈向畸变:
产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲径向畸变主要包含桶形畸变和枕形畸变两种。
切向畸变:
产生的原因透镜不完全平行于图像平面,这种现象发生于成像仪被粘贴在摄像机的时候。
标定的关键:
1.应当选取不同姿态下标定板的图片,这样获得的相机内参和畸变系数矩阵会更加正确。
2.利用cv::calibrateCamera()进行标定时,其中参数flag决定了标定时使用的算法,应当进行参数调配。
3.标定前应当保证角点位置的准确度。