基于Python进行相机校准

小白学视觉

共 2471字,需浏览 5分钟

 ·

2020-09-23 09:24


点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

相机校准的目的是找到相机的内在和外在参数。

总览

为了校准相机,我们对3D对象(例如图案立方体)成像,并使用3D对象与其2d图像之间的3D-2D点对应关系来查找相机参数。

我们需要找到两组参数:内在参数和外在参数。固有参数是摄像机内部的那些参数,例如焦距,主要点等,而固有参数是规定摄像机相对于摄像机的位置t(平移矢量)和方向R(旋转矩阵)的参数。外部坐标系(通常称为世界坐标系)。在第一部分中,我们将仅计算内部参数(假设外部参数是已知的),而在第二部分中,我们将共同计算内部参数和外部参数。

内部参数计算

我们使用的校准对象是魔方。

我们对立方体进行成像,如下图所示。然后,我们获得许多3D-2D点对应关系。在这一部分中,我们已经计算了点对应关系,您要做的就是从它们中计算出固有参数。3D-2D对应关系在数据文件“ pt_corres.mat”中给出。该文件包含“ pts_2D”,2D点和“ cam_pts_3D”以及所有对应的3D点。现在,我们必须找到K矩阵

K矩阵

使3D与2D点相关的矩阵K是具有以下形状的上三角矩阵。

其中αx,αy表示以x和y像素尺寸表示的焦距,px和py是主要点,s是偏斜参数。

2D点(x,y)与相应3D点(X,Y,Z)之间的关系由下式给出

1. x =αx(X / Z)+ s(Y / Z)+ px

2. y =αy(Y / Z)+ py

内部和外部参数计算

在上一部分中,我们假设已知外部参数,然后计算了内部参数,即假设我们知道了相机坐标系中的3D点对应关系。但是这种情况很少发生。几乎总是我们仅在世界坐标系中知道3D点的对应关系,因此我们需要估算内在和外在参数。但是在此之前,我们需要获取3D-2D点对应关系。如图1所示,相对于世界坐标系描述了3D点。该图显示了世界坐标系的x,y和z轴以及一些示例3D点,它们是正方形的角。有28点。

1. 世界坐标系中的3D点在rubik_3D_pts.mat中提供,图像上相应的2D点在rubik_2D_pts.mat中提供

2. 接下来,我们要计算相机投影矩阵P = K [R t],其中K是内部/本征校准矩阵,R是旋转矩阵,用于指定相机坐标系与世界坐标系的方向,而t是转换向量,可以确定摄影机中心在世界坐标系中的位置。

3. 为了计算P,我们使用“直接线性变换(DLT)”。DLT是要理解的重要算法,下面将对其进行详细说明。

离散线性变换(DLT)

离散线性变换(DLT)是一种简单的线性算法,用于从相应的3空间和图像实体估计摄像机投影矩阵P。相机矩阵的这种计算称为切除。最简单的这种对应关系是在未知相机映射下的3D点X及其图像x之间。给定足够多的这种对应关系,可以确定相机矩阵。

算法

假设给出了3D点和2D图像点之间的许多点对应关系。相机矩阵是一个3x4矩阵,它通过xi = P.Xi将点关联起来。对于每个对应关系Xi xi xi,我们得到三个方程,其中两个线性独立,在下面进行描述
步骤
1. 从一组n个点对应关系中,我们通过为每个对应关系堆叠以上形式的方程式来获得2nx12矩阵A
2. 获得A的SVD。对应于最小奇异值的单位奇异向量是解p。具体来说,如果A = UDVT,D对角线带有对角线正项,并按对角线降序排列,则p是V的最后一列
3. 获得p并以矩阵形式写入以获得矩阵P

通过解方程组Ap = 0来计算投影矩阵P,其中p是包含矩阵P项的向量。


计算P所需的最小点对应数量

3×4矩阵P具有12个元素,但比例是任意的,因此具有11个自由度。由于每个点的对应关系都有2个方程,因此至少需要5.5个对应关系才能求解P。0.5表示从第六个点开始仅使用一个方程,即我们选择x坐标或y-第六个图像点的坐标。

在此最小数量的对应关系下,该解决方案是精确的,并且可以通过求解Ap = 0来获得,其中A在这种情况下为11x12矩阵。

如果数据不精确,则给出n≥6个点对应关系,那么将没有精确的解决方案,我们通过最小化代数或几何误差来解决。

从投影矩阵P获得参数K,R和t

通过RQ分解将P分解为K,R,t。它涉及计算分解A = RQ,其中Q为unit /正交,R为上三角。

验证计算参数的准确性

为此,我们将计算重新投影误差,该误差是对2D点与通过使用计算出的相机参数投影3D点而获得的2D点之间距离的度量。

该图以橙色显示了原始2D点,并以绿色显示了重新投影的点。可以看出,重新投影的点与实际点非常匹配。

参考文献

[1] R. Hartley and A. Zissermann, Multiview geometry, 2nd edition, Cambridge University Press.

[2] Z. Zhang. A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330–1334, 2000.

有关详细代码,请访问https://github.com/sreenithy/Camera-Calibration


交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报