本篇文章会通过代码来进一步解释如何进行双目视觉标定,需要配合上一篇理论一起食用,还没有看过理论篇的宝子,链接在这里:双目视觉标定-1视觉成像理论知识-优快云博客
目录
c. 用findChessboardCorners寻找在不同照片中3D坐标对应的2d图像坐标
1. 什么是相机标定 Camera Calibration
估计相机参数的过程称为相机标定。
看过上一篇的小伙伴应该对于从3d世界坐标转换到2d图像坐标用到的相机参数有些印象,但可能不多,毕竟刚开始掌握知识。我们的目标就是用一系列已知的3d现实世界坐标以及对应的图像坐标,寻找内参矩阵K,旋转矩阵R,平移向量t
相机参数一共有两种:
1. 内参 Internal Parameters
a.光学中心optical center
b焦距focal length
c还没提到的镜头的转盘畸变系数radial distortion coefficient
2. 外参 External Parameters
a.旋转矩阵
b.平移向量
下面就是经过参数标定的畸变图像结果:
2. 用Opencv进行相机标定
上一篇我们是分布进行每个步骤的表示,现在我们直接把从现实世界的3d坐标(Xw,Yw,Zw,1)转换为图像世界的2d pixel坐标(u, v)一步表示为下方的方程:
P Projection Matrix 3×4的矩阵包含两个大矩阵的乘法,3×3内参矩阵 Intrinsic Matrix K和3×4 Extrinsic Matrix(由3×3旋转矩阵和3×1平移向量组成)
3. 相机标定的三种方法
1. 校准图案:从不同的角度捕获已知尺寸的物体或图案的多个图像。我们将在这篇文章中学习的基于棋盘chess board的方法就属于这一类。我们还可以使用已知尺寸的圆形图案来代替棋盘图案。(重点掌握)
2. 几何线索:利用场景中其他几何线索,例如直线和消失点,可用于校准。
3. 基于深度学习:当我们对成像设置的控制很少时(例如,我们只有场景的单个图像),仍然可以使用基于深度学习的方法获得相机的校准信息。
4. 相机标定具体步骤及实现
a. 用已知大小棋盘格进行真实世界3D坐标的定义
棋盘格图案在图像中清晰且易于检测。还有棋盘上正方形的角非常适合定位它们,在两个方向上都有急剧变化的梯度。此外,这些角还由于它们位于棋盘线的交叉点而相互连接。所有这些事实都用于可靠地定位棋盘图案中正方形的角点。
真实世界的坐标被固定在这个贴在墙上的棋盘格,我们选择的3d点是角点,任意交点都可以被选择为原点,Xw,Yw沿着墙,Zw轴垂直于墙。为了简单起见,我们可以说棋盘在 XY 平面上保持静止(因此 Z=0 ),并且相机相应地移动。这种考虑有助于我们仅找到 X,Y 值。
现在,对于 X,Y 值,我们可以简单地将点写为 (0,0)、(1,0)、(2,0)...,这表示点的位置。在这种情况下,我们得到的结果将以棋盘正方形的大小为单位。但如果我们知道正方形的尺寸(例如 30 毫米),我们可以将值传递为 (0,0)、(30,0)、(60,0)、...。因此,我们得到的结果以毫米为单位。