基于Python进行相机校准

重磅干货,第一时间送达

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

总览

为了校准相机,我们对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。

交流群

(0)

相关推荐

  • 基于消失点的相机自标定(1)

    标题:Camera calibration using two or three vanishing points 作者:Radu Orghidan∗, Joaquim Salvi†, Mihaela ...

  • 自动化设计基础讲解-机械手,相机(CCD)9点标定

    在机器视觉应用中,相机标定技术需要准确的相机内参数和外参数作为重构算法的输入和先决条件,通过标定算法,可以计算相机的投影矩阵.本文讲解机械手-相机9点标定原理 1.目的 建立相机坐标系与机械手坐标系的 ...

  • 立体视觉入门指南-坐标系与相机参数

    干货第一时间送达 亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能 ...

  • 【技术】航测相机如何检校?

    【技术】航测相机如何检校?

  • 基础矩阵,本质矩阵,单应性矩阵讲解

    最近公众号组织了ORB-SLAM2理论与代码的学习会,正常进行中,有兴趣的可以积极参与第三期:一起来学SLAM 其中ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下 ...

  • 相机模型与张氏标定

    视觉测量使用的日益广泛和频繁,对于基础知识的学习是掌握机器视觉的学习的关键:本文针对成像模型,坐标系转换和相机标定等知识进行简介,虽然网上相关资料很多,但是本人在学习过程中同样为某些概念所困扰,写下学 ...

  • 原创 | 《相机标定》深入理解原理与实战(一)

    第 一 章 引言 1.1 为什么要相机标定 首先来看相机标定的意义,我们都知道,我们拍摄的图片是二维的,但是真实世界是三维的.一个场景是如何从三维变成二维的呢?相机起到的就是这个作用.我们可以把相机看 ...

  • 基于Python获取股票分析,数据分析实战

    基于Python获取股票分析,数据分析实战

  • 基于 Python 的 11 种经典数据降维算法

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  • Keras: 基于Python的深度学习库

    Keras 是一个用 Python 编写的高级神经网络 API,它能够以TensorFlow, CNTK或者 Theano作为后端运行.Keras 的开发重点是支持快速的实验.能够以最小的时延把你的想 ...

  • 【奥星课件】制药行业基于风险的仪表校准与管理

    【奥星课件】制药行业基于风险的仪表校准与管理

  • 构建基于Python的持续交付-附书单推荐

    在互联网行业高速发展的今天,掌握CI/CD已经成了加薪必不可少的技能了.要真正做到CI/CD,对于我们测试的要求是相当的高了,芒果在昨天一天的时间里就听了数次的吐槽说这些知识点太难掌握了,要求太多了, ...

  • 基于Python的自动化测试平台开发你要理解的:uWSGI

    在我们使用Django开发自动化测试平台时,最必不可少的步骤是在服务器上部署它.在开发阶段中,对于Django项目我们使用的web服务器一般都是自带的runserver, 但是runserver从内存 ...

  • 相机校准三原色

    讲相机校准三原色之前我们先说一下色相饱和度的关系,才能更好的理解相机校准三原色. 饱和度: 饱和度的概念是以灰色为载体,某种颜色的饱和度是指灰色中载有这种颜色的多少. 明 度: 颜色的明度是载有颜色的 ...

  • 基于消失点的相机自标定(2)

    标题:Camera calibration using two or three vanishing points 作者:Radu Orghidan∗, Joaquim Salvi†, Mihaela ...