棋盘格标定法实操详细讲解(附操作流程和关键代码)

目录

1 相机内参数标定

1.1 配置相机参数

1.2 计算相机内参

2 相机位姿估计

 2.1 拍摄标定图片

2.2 配置标定板参数

2.3 查找标定板角点

2.4 求解旋转向量和平移向量

2.5 相机姿态角求解

2.6 相机世界坐标求解


1 相机内参数标定

1.1 配置相机参数

相机内参标定前需要先配置参数:焦距、水平视场角(全角)、垂直视场角(全角)

1.2 计算相机内参

数学解释:

内参数包括摄像机的焦距、相机光轴在图像上成像像素点坐标。根据以上配置的相机三参数求解出相机的内参矩阵。内参矩阵形式如下:

  • 其中,fx,fy为焦距,一般情况下,二者相等,x0、y0为主点坐标(相对于成像平面),s为坐标轴倾斜参数,理想情况下为0。

代码实现:

2 相机位姿估计

 2.1 拍摄标定图片

首先需要准备一个布满精确点阵的标定版, 将标定图片打印出来,表面平铺在硬纸板或者塑料版上,拍摄标定图片时,需要将标定版覆盖整个相机范围,示意图如下:

2.2 配置标定板参数

标定相机高度和姿态前需要先配置标定配置文件,且配置参数需要和放置标定版对应。

2.3 查找标定板角点

读取拍摄的标定版图片,使用角点查找函数查找标定版角点,存储角点位置坐标。代码如下:

找到的角点如下图所示:

2.4 求解旋转向量和平移向量

PNP问题就是在已知n个三维空间点坐标及其二维投影位置的情况下,如何估计相机的位姿问题且当n>=4时,PNP有唯一的正解。 将标定版放置在地面上,设地面上的点世界坐标Z值为0,则可以通过PNP函数根据已知坐标的特征点,求解出相机相对于地面的旋转向量和平移向量

如下是PNP函数根据识别到的角点和对应的二维像素坐标求解得到的相机相对于地面的旋转向量和平移向量。

2.5 相机姿态角求解

在上一步求解得到相机相对于地面的旋转向量和平移向量后,需要通过旋转矩阵求出各轴旋转角(相机姿态角)。

代码如下:

2.6 相机世界坐标求解

世界坐标系:描述目标在真实世界中的位置引入的参考坐标系。

相机坐标系:联系世界坐标系与图像坐标系的桥梁,一般取摄像机的光学轴为z轴。

平移向量和旋转矩阵可以用来表示相机坐标系与世界坐标系的关系,求解出相机在世界坐标系下的坐标。

相机坐标系需要旋转3次,使得它与世界坐标系完全平行(即Xc平行于Xw,Yc平行于Yw,Zc平行于Zw,且他们的方向都是相同的)。设原始相机坐标系为C0,根据平移向量和相机姿态角求解相机坐标在世界坐标系上的坐标点(特别注意:旋转顺序为z y x,切记不能调换):

  • C0绕其z轴旋转θz,得到新的坐标系C1;

  • C1绕其y轴旋转θy,得到新的坐标系C2(注意旋转轴为C1的y轴,而非C0的y轴);

  • C2绕其x轴旋转θx,得到新的坐标系C3。此时C3与世界坐标系W完全平行。

代码如下:

后续的测距见下一篇博客噢!

整个过程参考文章,供大家一起学习,加深理解:

相机标定-张正友棋盘格标定法:

https://blog.csdn.net/qq_41275123/article/details/124864530

相机内参数和外参数详解(干货):http://www.360doc.com/content/22/0911/20/78357527_1047514923.shtml

根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角:

https://www.cnblogs.com/singlex/p/RotateMatrix2Euler.html

根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现:

https://blog.csdn.net/weixin_41010198/article/details/115960331

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值