一、相机标定原理
1.1原理介绍
摄像机标定(Camera calibration)简单来说是从世界坐标系转换为相机坐标系,再由相机坐标系转换为图像坐标系的过程,也就是求最终的投影矩阵P的过程。
基本坐标系:
- 世界坐标系(world coordinate system):用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入。
- 相机坐标系(camera coordinate system):在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为沟通世界坐标系和图像/像素坐标系的中间一环。
- 图像坐标系(image coordinate system):为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。
一般来说,标定的过程分为两个部分:
第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参,确定了相机在某个三维空间中的位置和朝向)等参数;
第二部是从相机坐标系转为成像平面坐标系(像素坐标系),这一步是三维点到二维点的转换,包括K(相机内参,是对相机物理特性的近似)等参数;
投影矩阵 : P=K [ R | t ] 是一个3×4矩阵,混合了内参和外参而成。
从世界坐标系到相机坐标系:
相机坐标系转换为图像坐标系:
根据上述的关系图可以推导出下面的变换公式:
像主点的偏移:
可以推出:
内参矩阵K:
外参矩阵[R丨t]:
表示三个方向的偏转:
总结公式如下:
1.2 相机标定步骤
1、打印一张模板并贴在一个平面上;
2、从不同角度拍摄若干张模板图像;
3、检测出图像中的特征点;
4、求出摄像机的外参数(单应性矩阵)和内参数(最大似然估计)
5、求出畸变系数;
6、优化求精。
二、代码
import cv2
import numpy as np
import glob
# 设置寻找亚像素角点的参数,采用的停止准则是最大循环次数30和最大误差容限0.001
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30,