对于网友都关心投影标定系统和标定重投影误差的话题,你都想知道有那些呢?接下来让小编带你了解一下。

投影标定系统

笔者Kaustubh Sadekar Satya Mallick

翻译陈之炎

校正王可汗

这个文章约3200字,提议阅览5分钟

这个文章为我们系统地推荐了运用OpenCV完成摄像头标定啦。

摄像头是1种视线传感器,他早已经变成了机器人技能.监控.空间摸索.交往传媒.产业自动化,以至业等几个领域不可分割的组成部分呢。

在摄像头的几种运用中,理解摄像头的参数关于视线传感器的有用运用很重要啦。

在这个文章中,将论述摄像头标定所触及的方法及其含意了。

另外,文中还同享了棋盘格形式示例图象的C++和Python编码啦。

什麽是摄像头标定呢?

对摄像头参数进行预计的经过称之为摄像头标定了。

经过摄像头标定,可以掌控摄像头的全部短信(参数或系数),然而可以肯定实际世界中的三维点与摄像头捕捉图象的二维投影(像素)之中的准确干系呢。

平时,摄像头标定暗示着复原以下两类参数

1. 摄像头 /镜头体系的原有参数呢。如镜头的焦距.光心和径向失真系数等参数了。

2. 外面参数这是指摄像头相比于某-个世界坐标系的方位(旋绕矩阵R和平移向量t)呢。

在下图中,选用了几何标定来预计透镜的参数,然而祛除图象的失真了。

对失真图象选用几何标定以后的结果

运用OpenCV完成摄像头标定

为了更加好地了解全个标定经过,一开始的时候要理解成像的几何特点了。单击下面的链接来察看仔细的解说了。

成像的几何特点

正如前文所述,为了找到一个三维点在图象平面上的投影,一开始的时候要运用外面参数(旋绕矩阵R和平移向量t)将该点从世界坐标系转化到摄像头坐标系啦。

下面,利用摄像头的原有参数,将该点投影到图象平面上啦。

将世界坐标中的三维点(Xw, YW,Zw)投影到图象坐标 (u.v)的关连方程如以下所示

此中,P是1个由两部分构成的3×4投影矩阵——包括原有参数的原有矩阵(K).由3×3旋绕矩阵R和3×1平移向量t组合而成的外面矩阵([R|t])啦。

如前文所述,原有矩阵是上三角矩阵

此中

fx,fy是x和y的焦距(平时两者是一样的)啦。

cx,cy是图象平面上光心的x. y坐标,这一坐标平时用图象的中心来相似啦。

γ是各轴之中的倾斜度,平时为0呢。

摄像头标定的目标

摄像头标定的目标是利用一组已知的3D点坐标(Xw, YW,Zw)及其对应的图象坐标(u.v)来找到3×3矩阵K.3×3旋绕矩阵R和3×1平移向量t啦。当得出原有参数和外面参数的值以后,便完成了摄像头标定呢。

总之,摄像头标定算法应具有以下输出和输入

1. 输出已知二维图象坐标和三维世界坐标点的图象集合呢。

2. 输入3×3摄像头原有矩阵,每幅图象的旋绕矩阵和平移向量了。

注在OpenCV中,摄像头原有矩阵没有歪斜参数,因此该矩阵的形态为

多种类型的摄像头标定办法

有以下多种摄像头标定办法

1. 形式标定当能全部掌控成像经过时,实行标定的最好办法是从不一样的角位捕获1个物品或已知维度形式的多幅图象了。这个文章中触及到的根据棋盘格的办法属于这一种标定了。也可以运用已知尺寸的圆形形式来替换棋盘格形式啦。

2. 几何线索有的时候情景中有如直线和消失点等其它的几何线索,可以利用于这一些几何线索来进行标定了。

3. 根据深度研习的标定当对成像设定的掌控很少时(比方当唯有1个情景的单纯图象),可运用根据深度研习的办法获取摄像头的标定短信了。

摄像头标定的方法

标定经过的方法可用下图中的流程图来解说了。

下面,来看看这一些方法是怎么样完成的

第1步用棋盘格模式定义真实世界的坐标

世界坐标系世界坐标系由附在房室里一面墙壁的棋盘格图形来固定,三维点是棋盘格中长方形的拐角了。上述棋盘格中的一切一个角都可以定为世界坐标系的原点呢。XW轴和YW轴沿墙移-动,ZW轴垂直于墙移-动呢。因而,棋盘格上的全部点都在XY平面上(即ZW=0)了。

在标定经过中,经过一组已知的三维点(Xw, YW,Zw)及其在图象中对应的像素方位(u,v)来计算出摄像头的参数了。

关于3D点,可以在很多不一样的方位上拍摄1个已知尺寸的棋盘格图形呢。将世界坐标映照到棋盘格上,因为全部的角点都在1个平面上,可以随意选择ZW为0啦。因为各点在棋盘格中是等相隔的,可以将此中一个点设为参考点(0,0),那样,便很简单定义出每一个三维点的坐标(XW,YW)啦。

为何棋盘格图形在摄像头标定中运用这样之广呢?

棋盘格图形的奇特之处是在图象检验经过中,他很简单检验到啦。不仅如此,棋盘格上的长方形是定位的梦想挑选,由于他们在2个方位的梯度对比尖利啦。另外,这一些方格与他们在棋盘线的交叉点有关系呢。全部这一些特色,都有益于便利地定位出长方形的拐角呢。

绘制出检验到的棋盘板拐角坐标后的结局图

第2步从几个不一样的角位捕获几个棋盘格图象

上述图象用在标定摄像头呢。

下面,保证棋盘格为静态,并经过移-动摄像头拍摄出多幅棋盘图象呢。

或许,也可以维持摄像头不动,拍摄不一样方位的棋盘格图形,从数学的角位来看,这2种情形很相似啦。

第3步找到棋盘格板的二维坐标

有了多幅棋盘格图象以后,世界坐标系上棋盘格上点的三维方位也已知,最终,要找到的是图象在棋盘格上二维像素的方位呢。

3.1找到棋盘格的角

OpenCV供应了1个名为findChessboardCorners的内置函数,利用这一个函数可以找到棋盘格中个个角的坐标了。下面,来看看这一编码的使用方法

C++

Python

此中

依据是不是检验到1个棋盘格形式,输入为真或假了。

3.2调理棋盘格的角

优良的标定应全部满意精度的请求啦。为了获取优良的结局,应付个个角的方位进行调理,以获取亚像素级的精度了。

OpenCV有1个 cornerSubPix函数,利用这一个函数获得原始图象和棋盘格角的方位,并在原始方位的小范畴内找到最好的方位角位呢。该算法的实质是1个迭代经过,因此要指定停止要求(如,迭代次数和/或精度)

C++

Python

此中

第4步标定摄像头

摄像头标定的最终一步是将世界坐标中的三维点及其在全部图象的二维方位传达给OpenCV的calibrateCamera 办法啦。这个是根据张正友的一篇论文(thesis) 呢。数学上有点繁杂,要线性代数的背景文化了。

来看看calibrateCamera办法的语法

C++

Python

此中

摄像头标定源代码

摄像头标定的Python和C++编码如以下啦。利用下面的链接,下载全部的图象和编码则更为简易呢。

摄像头标定的Python编码

请仔细阅读编码的解释,他们对每一步都在作什麽做了仔细解说了。

C++ 源代码

请通读每1条解释,以理解每一步都完成了什麽了。

本文主要讲解关于投影标定系统和标定重投影误差的相关热议内容,希望能帮助到各位。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。