先介绍一下背景:欲打算使用Intel Realsense L515深度相机用于机器人视觉,实现对某些东西的自主检测并进行相应的处理,采用的是树莓派4b,ubuntu18.04,基于ros1实现。因为没有视觉处理的相关经验,从0开始,写博客一是希望大家少走弯路,给大家一个借鉴;给自己留一份记录;其次就是有不对的地方,欢迎各位大佬进行批评指正。
单目相机的标定:
1.为什么要进行相机的标定,是否每个相机都需要标定?
讲的复杂点的话:相机标定是为了确定空间物体表面某一个点的三维几何位置与这个点在所成图像中对应的二维点之间的相互关系,必须要建立相机成像的这个几何模型。
通俗而言:视觉的目的除了可以实时观看,更重要的是定位,定位必不可缺的就是坐标,而我们可以获得的坐标只是在图像中看到的,具体在世界坐标系中在哪里,我们是不得而知的。因此建立世界坐标系和图像坐标系是必不可少的。
再者而言,我们刚开始接触到的成像方面的知识应该是与小孔成像有关的,但是这种方式只有小孔部分能透过光线,这样就会导致物体成像的亮度很低,因此就发明了透镜,这样亮度问题解决了,但是与此同时因为透镜的制造工艺,会使成像产生多种形式的畸变,为了去除这种畸变,人们会利用畸变系数来矫正这种误差。
2.下面进行详细的展开阐述一番
引自:深度科普:一文搞懂相机标定 - 知乎 (zhihu.com)
a是指实物;d是凸透镜的中心也是光心;u是实物到凸透镜中心的距离即物距;a1是成像;v是凸透镜中心到成像的距离,即像距;f是凸透镜中心到焦点(光线平行于主光轴,通过凸透镜,交会在主光轴上的点)的距离,即焦距。
相机成像其实就是一个光学成像过程:我们可以将相机的镜头看作是一个凸透镜,光线通过凸透镜在相机的感光元件上成像,感光元件将光信号转为数字信号,再经过数字处理(DSP)成数字图像,存储到存储介质中。当上面提到的f≈v,相机成像模型就成了我们所熟悉的小孔成像。
在光学成像原理中,一共会涉及到四个坐标系
世界坐标系:字面意思,由我们自己定义的,其目的就是为了描述物体和相机在真实世界中的位置,原点可以自己确定。
相机坐标系:一般而言都是以光心为坐标原点,x轴和y轴平行于图像坐标系的x轴和y轴(简单而言就是x轴y轴在凸透镜所在的那个平面内,z轴是与主光轴重合的。
图像坐标系:与成像平面重合,以成像平面的中心(光轴与成像平面的交点)为坐标原点,x 轴和 y轴分别平行于成像平面的两条边。
像素坐标系:与成像平面重合,以成像平面的左上角顶点为原点,x 轴和 y 轴分别平行于图像坐标系的x轴和y轴。
首先:世界坐标系到相机坐标系的转换属于刚体变换,通过旋转和平移即可获得,其中旋转矩阵为 R,平移矩阵为 T
其次相机坐标系→图像坐标系
从相机坐标系到图像坐标系满足透视投影关系:
最后,图像坐标系→像素坐标系
像素坐标系的单位为pixel,其中 u0,v0 为成像平面中心点在像素坐标系下的坐标, dx和 dy 分别表示在像素坐标系下, x轴和 y 轴方向每个像素的物理尺寸。
综上所述,我们就可以得到世界坐标系到像素坐标系的转换关系式:
内参矩阵取决于相机内部的参数:分辨率,焦距,传感器尺寸;外参矩阵取决于相机坐标系和世界坐标系的位置。相机标定就是求解出内参矩阵和外参矩阵。