知乎的公式格式有点问题,请看原文链接:

实战 | 相机标定​mp.weixin.qq.com

什么是相机标定?我们为什么需要相机标定?

相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。

坐标系

相机标定涉及到了四大坐标系,分别为:

像素坐标系

图像物理坐标系

相机坐标系

世界坐标系

为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建立对应关系。世界坐标系中某个给定点投影到图像坐标系中被分为两个步骤:

机器视觉中常用的有两种不同类型的镜头:普通镜头和远心镜头。使用普通镜头时,世界坐标系到图像坐标系为透视投影;使用远心镜头时为平行投影。

相机标定方法分类

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

标定方法优点缺点常用方法传统相机标定法可使用于任意的相机模型、 精度高需要标定物、算法复杂Tsai两步法、张氏标定法主动视觉相机标定法不需要标定物、算法简单、鲁棒性高成本高、设备昂贵主动系统控制相机做特定运动相机自标定法灵活性强、可在线标定精度低、鲁棒性差分层逐步标定、基于Kruppa方程

(左右滑动查看)

  1. Tsai两步法是先线性求得相机参数,之后考虑畸变因素,得到初始的参数值,通过非线性优化得到最终的相机参数。Tsai两步法速度较快,但仅考虑径向畸变,当相机畸变严重时,该方法不适用。
  2. 张氏标定法使用二维方格组成的标定板进行标定,采集标定板不同位姿图片,提取图片中角点像素坐标,通过单应矩阵计算出相机的内外参数初始值,利用非线性最小二乘法估计畸变系数,最后使用极大似然估计法优化参数。该方法操作简单,而且精度较高,可以满足大部分场合。详细原理见《从零开始学习「张氏相机标定法」(一)成像几何模型》。
  3. 基于主动视觉的相机标定法是通过主动系统控制相机做特定运动,利用控制平台控制相机发生特定的移动拍摄多组图像,依据图像信息和已知位移变化来求解相机内外参数。这种标定方法需要配备精准的控制平台,因此成本较高。
  4. 分层逐步标定法是先对图像的序列做射影重建,在重建的基础上进行放射标定和欧式标定,通过非线性优化算法求得相机内外参数。由于初始参数是模糊值,优化算法收敛性不确定。
  5. 基于Kruppa的自标定法是通过二次曲线建立关于相机内参矩阵的约束方程,至少使用3对图像来标定相机。图像序列长度会影响标定算法的稳定性,无法保证射影空间中的无穷远平面。

MATLAB相机标定应用程序

MATLAB自带相机标定应用程序,有camera calibrator和stereo camera calibrator两类相机标定应用程序。其操作简单、直观,能够获得相机的内、外参数以及畸变参数等。

其中,camera calibrator用于单目相机标定;stereo camera calibrator用于双目相机标定。两者操作方式相同,唯一区别在于stereo camera calibrator添加图片时会弹出添加两个相机图片的操作框。

标定板准备(实验室经费有限,只能自己制作)

平面标定板具有以下几个优点:

  1. 易于操作;
  2. 尺寸可以制作的非常精确;
  3. 非常方便应用在背光照明应用中,只需要使用透明材料制作放置标志点的底盘即可。

使用MATLAB编程进行棋盘标定板的制作,将图片打印后固定在一块平板上。程序如下:

J = (checkerboard(300,3,4)>0.5);   %生成黑白棋盘图像
figure, imshow(J) %显示黑白棋盘图像
imwrite(J,'plate.jpg');%保存黑白棋盘图像

效果如图:(感觉有点寒酸呀,“但这不重要”,没条件自己创造)

Camera Calibrator应用程序

camera calibrator操作界面如下:

对于标定图像数量,位姿越多,标定结果也会越精确,建议在10到20幅之间。按照上图中的1、2、3进行相机标定操作。我们可以选择径向畸变系数以及是否计算切向畸变和倾斜,通过优化选项可以设置内参矩阵以及径向畸变参数的输出形式。

1.添加标定图像后显示界面如下图:

2.相机标定后显示界面会显示相机与标定板之间的位置关系。

3.相机参数输出camera calibrator应用程序相机标定参数输出如图所示:

高亮:MATLAB相机标定结果中的内参矩阵默认格式为

,其中,

分别为

轴和

轴的有效焦距;

轴和

轴的不垂直因子,一般令

;

是光学中心。注意事项:

  1. 制作棋盘格标定板时,黑色方格与白色方格尺寸需要相同,所有方格尺寸一致;
  2. 采集标定板图像时,应采集多幅不同位姿的标定板图像,采集图像数量不应太少,建议10~20幅为宜;
  3. 采集图像时,相机的焦距不能调节,否则会改变相机的内参数,导致标定失败;
  4. MATLAB相机标定程序能够自动计算重投影误差,重投影误差越小表示相机标定的精度越高。

相机标定参数的准确度

相机标定过程中如果标定板放置不适当的话将会导致相机参数中某个参数或某些参数不能得到唯一值。为了得到高准确度的相机参数必须避免这种情况的发生。除了这个影响外,影响相机参数准确度的主要因素就是用于进行相机标定的图像数量。下面显示了用于相机标定的图像数量对参数的影响。

从图中可以看出相机参数的准确度随使用图像数量的增加而明显增加。为什么使用相当多的标定图像可以提高相机标定精度?这主要是因为相机参数之间存在不容忽视的相关性,这些参数只能通过多次无关测量进行求解。为了得到更准确的相机参数,我们需要这样做:

  1. 标定板在图像中最好能够覆盖整个视野(覆盖图像的每个角落可以使得径向畸变系数更准确);
  2. 标定板覆盖较大的深度范围(将标定板绕它的x轴和y轴旋转或者放置在不同距离的位置上)。

相关文章

从零开始学习「张氏相机标定法」(一)成像几何模型

从零开始学习「张氏相机标定法」(二)单应矩阵

从零开始学习「张氏相机标定法」(三)推导求解

从零开始学习「张氏相机标定法」(四)优化算法前传

从零开始学习「张氏相机标定法」(五)优化算法正传

一次拍摄搞定多相机自动化标定

利用自识别标记实现复杂场景下相机标定

IMU标定 | 工业界和学术界有什么不同?

matlab 工业相机 曝光时间_实战 | 相机标定相关推荐

  1. matlab 工业相机 曝光时间_相机帧率和曝光时间的关系

    Exposure and Sensor Readout 相机上的图像采集过程包括两个截然不同的部分.第一部分是曝光.曝光完成后,进行第二部分Readout过程即从传感器的寄存器中读出数据并传送出去(R ...

  2. matlab 工业相机 曝光时间_机器视觉入门——光源相机镜头

    对于做视觉的人来说,了解相关的硬件选择是必不可少的.视觉的硬件选型主要有光源.相机和镜头,其他的一些辅助硬件就没有必要耗时间专门去学习了.下面主要谈谈光源.相机和镜头的选择 对于光源的选择,主要考虑以 ...

  3. matlab 工业相机 曝光时间_工业相机与普通相机的差别

    文章来源:https://blog.csdn.net/snwang_miss/article/details/55253577 一. 工业相机与普通相机的区别 工业相机是机器视觉系统中的一个关键组件, ...

  4. matlab 工业相机 曝光时间_工业相机的曝光、曝光时间、快门、增益

    这几个概念在网上资料比较少,讲得都比较模糊. 勇哥先上一张图,后面再介绍具体的概念. 什么是曝光? 尽管摄影自诞生以来,无数人都在探索相机这个工具究竟能发挥那些作用.但一个最基本的作用,就是把我们眼睛 ...

  5. matlab 工业相机 曝光时间_工业相机帧率和曝光时间的关系

    Exposure and Sensor Readout 相机上的图像采集过程包括两个截然不同的部分.第一部分是曝光.曝光完成后,进行第二部分Readout过程即从传感器的寄存器中读出数据并传送出去(R ...

  6. matlab 工业相机 曝光时间_工业相机基本设置解析

    1.自动增益控制(AGC ON/OFF):摄像头内有一个将来自 CCD 的信号放大到可以使用水准的视频放大器,其放大即增益,等效于有较高的灵敏度,然而在亮光照的环境下放大器将过载,使视频信号畸变.当开 ...

  7. matlab相机标定_综述 | 相机标定方法

    点击上方"计算机视觉life",选择"星标" 快速获得最新干货 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相 ...

  8. ppt 胡事民 计算机图形学_从相机标定到SLAM,极简三维视觉六小时课程视频(附PPT)...

    谭平教授是加拿大西蒙弗雷泽大学副教授.不久前他与浙江大学合作了一系列三维视觉课程,内容涵盖相机标定.多视几何等多个方面.机器之心简要介绍了该系列课程,希望能够对读者学习三维视觉技术有所帮助. 课程内容 ...

  9. java鱼眼相机标定_鱼眼相机标定方法及标定装置制造方法

    鱼眼相机标定方法及标定装置制造方法 [专利摘要]本发明公开了一种鱼眼相机标定方法及标定装置,包括:建立所述鱼眼相机的成像模型:从不同视角采集多幅标定板图像,在所述标定板图像上获取特征点的坐标,参考所述 ...

最新文章

  1. knowladge_网站开发_jQuery插件_Clock Demo
  2. python相似图片识别_Python+Opencv识别两张相似图片
  3. 使用CocoaPods给微信集成SDK打印收发消息
  4. ESP3 + ESP-IDF | 串口1 - 简单的串口回环测试
  5. 数据结构(动态树):[国家集训队2012]tree(伍一鸣)
  6. linux操作系统源码分析,linux操作系统源代码详细分析.doc
  7. LeetCode-27 移除元素
  8. 对于最小割的进一步理解
  9. 检测UDP端口是否开放的命令
  10. 人人商城小程序总是弹出“百度未授权使用地图API”的解决方法
  11. Java四大元注解介绍
  12. contextcapture多区块点云_Smart 3D (ContextCapture) 4.4.6版本最新功能
  13. 野芭蕉V1.1.1-15.0429.1338
  14. 如何使用 Windows 10 自带的磁盘清理程序?
  15. 计算机硬盘中病毒吗,硬盘中病毒能格式化吗
  16. 分散性与变异性的度量——全距、四分位距、标准差、标准分
  17. 如何在iPhone,iPad和Mac上自动切换AirPods
  18. 请教ip routing指令与no switchport区别?
  19. Idea Eclips快捷键
  20. import绝对路径问题

热门文章

  1. 以太坊地址算法php,以太坊ETH源码分析(1):地址生成过程
  2. java调用方法返回数组_JAVA使用下面的方法头编写方法,返回两个数组列表的并集...
  3. 如何更改微信标签名字_微信透明昵称代码复制
  4. mate 10android o主题,Mate10不仅硬件强,还有安卓8.0
  5. Python基础教程:一个单列split转换为多行的练习题
  6. 在Python 中 a=a+b 与 a+=b 区别,你真的知道嘛?
  7. Python 实用冷门知识整理
  8. mqtt消息推送 java_MQTT+ActiveMQ实现消息推送(服务器端java实现)
  9. loglevel python 不输出_Python 通过 Celery 框架实现分布式任务队列!
  10. js碎片知识的学习与补充(parseint与ChildNodes属性)