本篇文章主要介绍如何使用相机标定,实现世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系。
相机标定内参/畸变系数求解与外参求解代码: (添加:2022-0926)
原理介绍如下:
一、世界坐标系转换为相机坐标系
相机标定概念:即求解外参旋转矩阵R与平移向量t
世界坐标系概念(一般摄像机为坐标原点):
相机坐标系:
世界坐标系到相机坐标系方法,通常使用旋转和平移方法实现:
旋转方法种类:旋转矩阵,欧拉角,四元数,轴角,李群和李代数
旋转应用场景:惯性导航,机器人学(机械臂运动学,无人机姿态估计,slam等)
旋转矩阵图解推导方法:
本图说明:红点假设为物体p(物体未发生变化,只是坐标系建立方法不同而已),黑色为原坐标系,蓝色为绕X轴旋转坐标系,旋转角为seta。
求解新坐标系(Xc,Yc,Zc),其中绕X轴旋转,则新Xc=X将不发生变化。
Yc=oa+ab=ec+pd=oc*sin(seta)+cp*cos(seta)=Z*sin(seta)+Y*cos(seta)
Yc=ac-cd=oe-cd=oc*cos(seta)-cp*sin(seta)= Z*cos(seta)-Y*sin(seta)
最终表现为矩阵如下:
验证旋转是否正确(因到原点距离不变),采用欧式距离验证:
通过以上方法类推绕Y轴,Z轴旋转,得到以下矩阵,将其相乘可得到绕X/Y/Z轴旋转的坐标转换。
如下为旋转角矩阵变换:
添加(2022-0930):以上绕x轴公式的正负号偏差为角度问题,若-seta可将上面角度转为下面公式:
补充关于绕Y轴旋转的矩阵:
以下利用几何变换推导绕Y轴变换不同的2个矩阵,若读者发现不同文章不一样,可以不用慌张,仅仅思考角度不一样,可理解seta角正负的影响,
详情推导请看下面的变换。
额外注意点:
平移向量可表示为:
相机的外参R、t:
二、相机坐标系转换为图像坐标系
相机坐标系->图像坐标系这个转换过程,实际将三维转换我二维平面,其原理复符合小孔成像,可采用相似三角形求解转换公式。
小孔成像示意图:
从下图上,如果相机坐标系到图像坐标系的转化,我们可以理解为,如何将相机坐标系下的3D点
- 映射到
- 上,通过蓝色虚线部分,我们可以得到两个相似三角形
- 和
- ,其中相机坐标系的原点
- 到图像坐标系的原点
- 的距离,我们称之为焦距
- 。
利用相似三角形可得:
最终可转换如下:
说明:Zc实际为相机坐标系Z轴的值,可通过如下形式得到:(添加:2022-0926)
三、图像坐标系转换像素坐标系
图像坐标系转像素坐标系实际是比列尺(属于缩放问题)与移动问题,首先是
这个我们可以理解为,从图像坐标系中心点到像素坐标系中心点的一个偏移量。属于相机内参的一部分。另外,如果我们已知图像坐标系的一个点
,我们还应该知道,横坐标的每一个mm对应像素是多少。即有如下公式:
其中dx与dy表示x轴与y轴物理像素尺寸,即1个像素是dx毫米。
可使用以下公式表示:
最终实现世界坐标系到像素坐标系的转换:
上图可知M2为相机外参,M1为相机内参
相机标定目的: