最近在项目中遇到了摄像头标定问题,结合网上的资料与团队的智慧,终于将摄像头标定问题解决啦,遂将心得记录成文,以便为全人类的科技进步做点小小贡献。
按照本人一贯的良好工作习惯,做任何工作之前必先来个灵魂三问:目的、原理和方法,所以本文也将按照这三个部分展开。
相机成像的原理就是我们初中物理所学的小孔成像,也就是针孔模型是相机成像的基础模型,后续所有公式都是基于此原理进行推导的。下图是一个比较常用的针孔模型示意图,相机原点看做是成像的小孔,图像平面距离小孔的距离为焦距f,图像平面在焦距处是清晰成像的条件。光轴是垂直通过图像平面和相机原点的轴线,它与图像平面的焦点被称为主点(principal point)。相机成像的本质可以看做是三维空间坐标到二维图像坐标的变换。
图-针孔模型
一、摄像机内外参概述
摄像机通常由内参、外参、畸变系数等3类参数,那么什么是内参呢?基于上图,焦距f、歪斜系数gamma(x轴与y轴,通常情况下为零)、主点属于内参范围。内参也可以理解为摄像机自身属性的定义。畸变系数包括径向畸变、切向畸变。我对外参的理解是摄像头自身在物理世界中的位置的准确描述,包括三轴旋转角度Pitch、Yaw、Roll,以及三轴平移参数Tx,Ty,Tz。
那么我们为什么要标定摄像机参数呢?
前面说过,相机成像的本质就是三维空间坐标到二维图像坐标的变换,所以相机标定的目的就是确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。说白了,就是下面的公式:将3D世界坐标[xw,yw,zw,1]通过矩阵运算,得出2D像素点位置[u,v,1]。
其中,K矩阵是内参,R和T表示外参(为3*3矩阵)
以项目中车载摄像头为例进行推导,ADAS(高级驾驶辅助系统)中存在4个坐标系,
像素坐标系(u, v)
图像坐标系(x, y)
摄像头坐标系(Xc, Yc)
世界坐标系/车辆坐标系(Xw, Yw)
先来看看其中两个的坐标转换:摄像头-> 车辆
先考虑三轴旋转,再考虑平移(x,y,z方向平移)
假如两个坐标轴之间的变换关系为,坐标系1 先绕 Oz 轴旋转, 再绕 Oy 轴旋转, 最后绕 Ox 轴旋转,最终得到了坐标系2,则旋转矩阵R为这三个基元旋转矩阵依次左乘。坐标系2为摄像头坐标系,坐标系1为车辆坐标系
假设坐标系间还存在平移 --- 如果两个坐标系之间不共 原点 ,就是说明这两个坐标系之间除了旋转向量,还存在平移向量,那么上述右侧需加一矩阵(为了减少公式数,有兴趣私信吧)
其余坐标系见的转换关系如下:
图像->像素
每个像素沿 x 轴的实际物理尺寸大小是 dx,沿 y 轴的实际物理尺寸大小是dy ,单位:毫米
摄像机->图像
世界->摄像机
参数标定常用的方法是张正友标定法(鉴于介绍张正友标定法的文章已经如牛身上的毛毛一样多了,本文不赘述),2D的标定板、基于最少2张图片、推荐至少20张图片。放一张大神的照片压场子,笑容无比亲切呢~~~据说张教授现在腾讯,加入腾讯的原因是想创建机器人实验室,希望有清楚该情况的圈友多多交流撒~~~