用matlab对相机进行标定获取相机内参

常见的相机标定方式是张正友的棋盘格标定法,即用相机拍摄打印好的棋盘格图图像,将图像传入函数计算出相机的内参数据。

本文讲解的是将相机直接连接电脑,用matlab的相机标定工具箱通过相机实时采集一定数量的棋盘格图像,然后计算获取相机内参。

 

实现:

Win10,64系统

matlab R2016a

 

后续用途:

(一)solvepnp 单目三维位姿估计--------理论

(二)solvepnp 单目三维位姿估计--------利用二维码求解相机世界坐标


Step1 打开相机标定工具箱

 用matlab对相机进行标定获取相机内参_第1张图片

 在《图像处理和计算机视觉》栏 找到相机标定工具:

用matlab对相机进行标定获取相机内参_第2张图片

在弹出的上图中点击红色下拉三角,选择 “From camera” 即工具箱会读取外接相机然后实时画面获取图像。

 

如果此期间弹出错误,提示未安装web camera的相应的包,那么需要你额外安装下对应的包;

安装方式为:

用matlab对相机进行标定获取相机内参_第3张图片

在主页中选择 “附加功能” 选择 “Get Hardware support packages”  

用matlab对相机进行标定获取相机内参_第4张图片

在网络条件好的情况选择网络安装,下一步;

 用matlab对相机进行标定获取相机内参_第5张图片

 查看支持安装的所有包,找到USB Webcams 这个USB相机包 文件,点击Next安装。

用matlab对相机进行标定获取相机内参_第6张图片

 用matlab对相机进行标定获取相机内参_第7张图片

如此,安装了能够读取外部USB相机的包后,用matlab打开相机就不再出错了。

 


Step 2 读取相机开始采集图像做标定

在上一步中 From camera后,正确连接相机的情况下,会出现下图:

用matlab对相机进行标定获取相机内参_第8张图片

 选择待会用相机采集图像后保存图像的路径;选择每次采集图像的间隔时间(默认5秒),选择共采集多少张图(默认20张);

选择完毕后点击Capture 进行采集;

使用方式是你可以将棋盘格打印出来后贴在墙上,拿着摄像头从各个角度拍摄采集棋盘格图像;或者你固定相机不动,将棋盘格固定在平坦物上,让棋盘格动;我选择前者。

 

选择Capture后会弹出下图,让你填写棋盘格网格实际物理尺寸(默认25mm),实际常用的网格图大小也差不多,我的是26mm

用matlab对相机进行标定获取相机内参_第9张图片

开始采集图像:

 用matlab对相机进行标定获取相机内参_第10张图片

实际采集20张图像后即停止采集,我 在选项中选择了 3阶径向畸变系数,计算切向畸变系数。

只要你的重投影整体平均误差小于0.5像素即可:

用matlab对相机进行标定获取相机内参_第11张图片

 下图是标定过程中以相机为中心视角的外参情况:

用matlab对相机进行标定获取相机内参_第12张图片

下图是以棋盘格为中心视角的外参 情况:

用matlab对相机进行标定获取相机内参_第13张图片


Step 3 导出标定数据

 用matlab对相机进行标定获取相机内参_第14张图片

我们可以导出得到相机的内参信息:

 用matlab对相机进行标定获取相机内参_第15张图片

上图划红线解释依次为:

径向畸变系数(3阶),切向畸变系数(2阶),世界坐标单位是mm,内参矩阵,焦距(分fx,fy),成像平面原点(理想情况是图像宽高中心位置),成像平面原点坐标(单位是像素);

获取如上信息后则可以对相机做矫正,做PnP相机位姿估计啦~ 

你可能感兴趣的:(计算机视觉)