c++ opencv 通过网络连接工业相机_摄像头和机器人视觉开发中的「相机标定」,你了解多少?...

目前我们团队在做一个项目,通过采集到的人脸图像测量人脸上两个瞳孔间的实际距离。注意是实际距离,不是两个瞳孔之间隔多少个像素点。找了很久资料,好像“相机标定”可以解决我的问题,看了不少资料来理解【相机标定】张正友博士的论文我看了,百度文库我也看了。

0dbb3893f42ec34a99c06631691527f9.png

相机标定】分为【内标定】与【外标定】,【内标定】得到相机相关的内参数,【外标定】得到相机的外参数,之后还要标定多个相机之间的位置关系。

【相机标定】可以说是计算机视觉/机器视觉的基础,但是初学者不易搞清楚【相机标定】的逻辑是怎样的。下面有感兴趣的朋友可以一起来介绍一下。

80354aeec98b265ce9401e0f2574a067.png

为什么要相机标定?

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。

e0c704b7c5ec8d09dacfcffefd0a8a6e.png

在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为【相机标定或摄像机标定】。 摄像机标定过程,简单的可以简单的描述为通过标定板,经过一系列的矩阵变换得到。

658487cbbf11692d83c027946c4a6417.png

相机标定的目的和意义

我们所处的世界是三维的,而照片是二维的,这样我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。

相机标定的目标是我们找一个合适的数学模型,求出这个模型的参数,这样我们能够近似这个三维到二维的过程,使这个三维到二维的过程的函数找到反函数。

77ff1acf8ba19c3d3335392404bedbf6.png

这个逼近的过程就是【相机标定】,我们用简单的数学模型来表达复杂的成像过程,并且求出成像的反过程。标定之后的相机,可以进行三维场景的重建,即深度的感知,这是计算机视觉的一大分支。

aa05d264bcfa6e16306f9f9e438f4d98.png

相机成像过程的简化与建模

提到相机的成像,从根本上来说,就是在讨论相机的镜头。固定结构的相机镜头决定了一对固定的物像共轭关系,所谓【共轭】,意思是镜头前某个位置的物,它的像一定在镜头后的某个位置,这个关系是固定的。

举个最简单的例子,无穷远处的物必然会在镜头的焦点处成像。这里说的固定结构,指的是镜头的焦距固定,光圈固定。

fa25c3445579d68cef0fc7a58e49936e.png
7756147cc601748794cd6f14140bc6af.png

上图是佳能(Canon)某款摄像机成像原理,我们可以找一个与这个镜头具有相同的物像共轭关系的凸透镜来等效这个镜头,我们把这个凸透镜称作等效透镜,用朝外的双箭头表示。

所以准确的讲把相机的成像过程简化成【针孔相机模型】,只是借用了针孔相机中简单的数学关系来表达一些本来难以表达的数学关系。

70323e9dbfc95b2ca966594debf469f9.png

按我个人的理解,除了焦距固定之外,也应当包含光圈固定,因为改变光圈的大小,除了景深之外,是有可能改变针孔相机模型中的光心位置,但是影响并不是很大。这意味着标定好的相机如果改变光圈大小,会使得标定误差变大但应该不会大到难以接受的地步。

那么这里就引发了两个问题:

(1) 这么多像点和物点到底谁和谁是一对儿?(2) 即便我知道物点在哪里,可是我怎么样用相机坐标系来表达物点的位置 X,Y,Z ?

为了解决上述的两个问题,【标定板】应运而生。标定板的第一大作用,确定物点和像点的对应性。这里用到的原理主要是【透视不变性】,打个比方,你近看一个人和远看一个人,虽然他的鼻子大小变了,你看鼻子的视角也变了,但是拓扑结构肯定是不变的,你也不可能把鼻子看成是嘴巴。

a437339f81ae18b2f35d88a92d8f9373.png

在【标定板】中,印刷了拓扑结构,广泛应用的是【棋盘格】和【圆点格】,这两种之所以成为主流,不仅是因为它们的拓扑结构明确且均匀,更重要的是检测其拓扑结构的算法简单且有效。

93c80275c0202476828f884a3c76f0b7.png

棋盘格检测的是角点,只要对拍摄到的棋盘格图像横纵两个方向计算梯度就可获得;而圆点格的检测只需要对拍摄到的圆点格图样计算质心即可。假如你开发了一套非常完美的检测人脸全部特征的算法,你完全可以用你的照片当作标定板。圆点格的效果应该是好于棋盘格,因为圆点质心的【透视不变性】要比棋盘格的角点稳定的多。

65db7a9d3850037f2bd98f9cc22bb05a.png

如果用OpenCV或Matlab标定工具箱进行标定,需要给出棋盘格的物理尺寸,这其实就是在建立标定板坐标系,从测量的角度讲,标定板的精度是相机标定精度的基准,是误差传递链上的第一个环节。所以为了使针孔相机模型更逼近真实相机,对标定板的质量有以下要求(按重要性顺序):

  1. 标定板的平面度高,棋盘格是直角;
  2. 标定板每个格子尺寸的高一致性;
  3. 真实尺寸与标称尺寸的差异小。
055fd71ac3a2fd39c1e0619bf4198a1c.png

综上所述,我们知道了【相机标定】的重要意义,无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。

94363cab30338b2a7db420d17d05a56f.png

相机标定方法有哪些?

【相机标定】方法有:【传统相机标定法】、【主动视觉相机标定方法】、【相机自标定法】。

【传统相机标定法】需要使用尺寸已知的标定物,通过建立标定物上坐标已知的点与其图像点之间的对应,利用一定的算法获得相机模型的内外参数。

6fcf30c80672dd045c2f57d51f7aab4b.png

根据标定物的不同可分为三维标定物和平面型标定物。三维标定物可由单幅图像进行标定,标定精度较高,但高精密三维标定物的加工和维护较困难。平面型标定物比三维标定物制作简单,精度易保证,但标定时必须采用两幅或两幅以上的图像。传统相机标定法在标定过程中始终需要标定物,且标定物的制作精度会影响标定结果。同时有些场合不适合放置标定物也限制了传统相机标定法的应用。

【基于主动视觉的相机标定法】是指已知相机的某些运动信息对相机进行标定。该方法不需要标定物,但需要控制相机做某些特殊运动,利用这种运动的特殊性可以计算出相机内部参数。基于主动视觉的相机标定法的优点是算法简单,往往能够获得线性解,缺点是系统的成本高、实验设备昂贵、实验条件要求高,而且不适合于运动参数未知或无法控制的场合。

aede9a8c737df9af0b3af62ca666a45a.png

【相机自标定算法】主要是利用相机运动的约束。相机的运动约束条件太强,因此使得其在实际中并不实用。利用场景约束主要是利用场景中的一些平行或者正交的信息。其中空间平行线在相机图像平面上的交点被称为【消失点】,它是射影几何中一个非常重要的特征,所以很多学者研究了基于消失点的相机自标定方法。自标定方法灵活性强,可对相机进行在线定标。

0f17e3c89a48239fa93c88eb3ecbc601.png

【 常用术语】

【内参矩阵】: Intrinsic Matrix

【焦距】: Focal Length

【主点】: Principal Point

【径向畸变】: Radial Distortion

【切向畸变】: Tangential Distortion

【旋转矩阵】: Rotation Matrices

【平移向量】: Translation Vectors

【平均重投影误差】: Mean Reprojection Error

【重投影误差】: Reprojection Errors

【重投影点】: Reprojected Points

【标定板】: Calibration Target 

在机器视觉、图像测量、摄影测量、三维重建等应用中,为校正镜头畸变、确定物理尺寸和像素间的换算关系,通过相机拍摄带有固定间距图案阵列平板、经过标定算法的计算,可以得出相机的几何模型,从而得到高精度的测量和重建结果,而带有固定间距图案阵列的平板就是【标定板】。

a40a656f4648d0e6f550f85134643b90.png

【世界坐标系】:World Coordinate

也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

【相机坐标系】: Camera Coordinate

也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。

b4c07c1b7375e013eb1e6aafd984c183.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GNN】一份完全解读:是什么使神经网络变成图神经网络?

图1:来自(Bruna等人,ICLR,2014)的图,描绘了3D领域内的MNIST图像。虽然卷积网络很难对球面数据进行分类,但是图网络可以很自然地处理它。可以把它当做是一个处理工具,但在实际应用程序中会出现许多类似的任务…

数学与 AI「融通」 ,徐宗本院士进行超强“迁移学习”

来源: AI科技评论 编辑 | 唐里徐宗本院士在数学与 AI 之间进行了一次超强的“迁移学习”。9 月 21 日至 22 日,为期两天的 CCAI 2019 正在秋意浓浓的中国青岛胶州隆重举行。本次会议选址室外体育馆召开,为原本严肃的学术会议增添了几分活泼、…

mac怎么合并两个容器_Mac怎么合并文件夹?macz不容错过的苹果mac教程分享

关于合并文件夹,与Windows操作不同的是:Mac中很可能会出现文件丢失。 因为它对相同名称文件的实际操作是替换而不是另命名复制!你的Mac电脑是否有重复文件想要合并?想了解Mac电脑合并文件夹而不丢失文件?那一定不要错过…

JMX学习笔记(一)-MBean

JMX学习笔记(一)-MBean 标签: jmxstringjavainterfaceexceptionclass2010-12-07 22:20 15360人阅读 评论(5) 收藏 举报分类:JMX(11) JMX 即 Java Management Extensions Java管理扩展MBean 即 managed beans …

关于大脑未必是破解智能和意识之谜的钥匙探讨

来源:刘锋的未来课堂“人脑能创造11维结构”是瑞士的研究机构蓝脑(Blue Brain)的一个研究结论,蓝脑(Blue Brain)研究所主要目标是建立一个由超级计算机驱动的人脑模型。这篇短文主要是由《崛起的超级智能》…

结构化分析和面向对象分析的区别 例子_管理游戏测评例子

在测评中心技术中,有一个非常有趣的场景的模拟测评,打造敏捷高绩效团队,提高执行力(包括人才测评),旨在帮助学生培养自主性,了解自己,以独立的意见做出决策,采取果断的行动;培养赋权…

qtablewidget 选中不改变背景_C4D制作不一样的核壳结构

在科研绘图中,三维模型图相对于二维平面图片可以展示更多的信息,尤其是在做纳米结构设计和制备时,三维模型图可以直观地表现出材料的设计思路和合成路径。比如在这篇发表于Joule杂志的高水平、高颜值、将纳米美学展现的淋漓尽致的paper中(Ref…

城科会刘朝晖:从互联网大脑模型看城市大脑

刘朝晖中国城市科学研究会城市大数据专业委员会副主任委员中国生态城市研究院首席科学家按照凯文凯利的观点,技术体和生命体都是一种进化现象。刘锋博士的《崛起中的超级智能》显然秉承了类似的视角,基于哲学高度和宇宙现象对我们这个时代正在爆发的人工…

java tostring方法_Java虚拟机如执行方法调用的(二)?

虚方法调用Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用.在大多数情况下, Java虚拟机需要根据调用者的动态类型, 来确定虚方法调用的目标方法.这个过程被称为动态绑定. 那么相对…

[笔记]cin、cout与scanf、printf的效率差异对比分析

之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms、20ms,于是打开一个20ms的代码查看人家强在哪里。但结果研究了半天感觉差不多,于是想着应该不是算法的问题。然后又想到&#x…

“智联网与未来”——第14届中国信息技术年会院士精彩观点辑录

来源:科技导报编者按 以智慧互联为目标的智联网系统是未来信息网络的发展方向,将引发人类社会向智慧社会的重大变革。在中国电子学会、工业和信息化部电子科学技术委员会等主办的第14届中国信息技术年会上,学者热议“智联网与未来”&#xf…

什么是java的元数据_学习大数据,为什么要先学习Java?

是新朋友吗?记得先点蓝字关注我哦~今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网来源:小职(z_zhizuobiao)找我:✅ 解锁高薪工作 ✅ 免费获取干货教程未完待续很多人初学的第一门语言…

记忆的天空:“崩塌型”记忆活动原理

作者:钟振余宁波大学副教授,工科背景,专注于脑科学神经信息活动机制研究。记忆是大脑活动原理的重要研究内容。相对于现代科学的高速发展,人类对于大脑活动原理的了解仍处在初级阶段。差不多半个多世纪之前,意识灵魂论…

飞天智能:阿里云的 AI 落地野心

来源:大叔爱吐槽CSDN当下,AI 业界不会否认的一个事实是,AI实力的比拼不再是单点的算法技术能力,而是从底层算法到应用平台的全面AI能力。单纯的算法,只是实验室里的乐趣,唯有结合商业的数据处理能力和技术变…

oracle把时间段转换成每一天_在家办公难适应?来看看专职外汇交易员的一天

万万没想到,曾经幻想的躺在床上把钱赚,居然成真了!这不,受疫情的影响,不少人在家开工了!今天是主流人群在家办公的第三天,然而,很多人表示:自己依然没有适应在家办公的节…

UVALive 7455 Linear Ecosystem (高斯消元)

Linear Ecosystem题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/B Description http://7xjob4.com1.z0.glb.clouddn.com/99b0fe905e5bd89a24c882832c93cc09 Input The first line of the input file contains an integer, n, which is the numbe…

华为诺亚方舟实验室—推荐系统中的前沿技术研究与落地报告

来源:专知【导读】9月6-7日,2019中国AI开发者大会(AI ProCon 2019) 在北京拉开帷幕。本次大会由新一代人工智能产业技术创新战略联盟(AITISA)指导,鹏城实验室、北京智源人工智能研究院支持&…

u盘锁电脑_程序员用U盘偷公司源码被抓;Rust 语言发布 5 周年

(给技术最前线加星标,每天看技术热点)综合整理:技术最前线(ID:TopITNews)参考:程序员的那些事、开源中国、solidot、cnBeta、腾讯科技等0、程序员用U盘偷公司源码被判刑2018年5月18日18时20分许,温某某在广州三七互娱科…

20幅漫画告诉你未来世界是怎样的

导读:在你心目中的(不太遥远的)未来是什么样的?名为Futurism Cartoons的作者绘制了一系列以“未来”为主题的漫画,其中多幅跟人工智能及你大数据有关,你们来感受一下……来源:大叔爱吐槽0102030…

c++ qt获取电脑的内存_Qt官方示例-TCP客户端/服务器示例

该示例演示了在本地主机上的TCP客户端和服务器是如何通讯的。客户端 绑定信号槽。connect(&tcpClient, &QAbstractSocket::connected, this, &Dialog::startTransfer); /* 连接到服务器时回送消息给服务器 */ connect(&tcpClient, &QIODevice::bytesWritte…