相机标定

一、相机标定的目的

确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。

二、通用摄像机模型

世界坐标系、摄像机坐标系和像平面坐标系都不重合。同时考虑两个因素 :

(1)摄像机镜头的畸变误差,像平面上的成像位置与线性变换公式计算的透视变换投影结果有偏差;

(2)计算机中图像坐标单位是存储器中离散像素的个数,所以像平面上的连续坐标还需取整转换。

摄像机参数

摄像机内部参数 (Intrinsic Parameters)

摄像机坐标和理想坐标系之间的关系

图像坐标系、摄像机坐标系

The list of internal parameters:

  • Focal length(焦距): The focal length in pixels is stored in the 2x1 vector fc.
  • Principal point(主点): The principal point coordinates are stored in the 2x1 vector cc.
  • Skew coefficient(偏斜系数): The skew coefficient defining the angle between the x and y pixel axes is stored in the scalar alpha_c.
  • Distortions(畸变): The image distortion coefficients (radial and tangential distortions) are stored in the 5x1 vector kc.

摄像机外部参数 (Extrinsic Parameters)

摄像机在世界坐标系里的位置和方向

摄像机坐标系、世界坐标系

主要包括:旋转矩阵 R 的9个参数和平移矩阵的3个参数。或定义为 6 个。主要包括: 旋转矩阵的3个偏转角和平移矩阵的3个参数。

简而言之:

三、摄像机原理

摄像机坐标系的原点

位于摄像机的镜头中心,像平面坐标中心

位于光轴上,由小孔成像模型,

为焦距。从客观场景到数字图像的成像变换由 以下4步组成 :

四、摄像机标定方法分类

传统摄像机标定方法

主动视觉摄像机标定方法

摄像机自标定方法

标定方法

特点

优点

不足

传统摄像机标定方法

利用已知的景物结构信息。常用到标定块。

可以使用于任意的摄像机模型,标定精度高

标定过程复杂,需要高精度的已知结构信息。

主动视觉摄像机标定方法

已知摄像机的某些运动信息

通常可以线性求解,鲁棒性比较高

不能使用于摄像机运动未知和无法控制的场合

摄像机自标定方法

仅依靠多幅图像之间的对应关系进行标定

仅需要建立图像之间的对应,灵活性强

非线性标定,鲁棒性不高

四、张正友平面标定方法

算法原理

•      在这里假定模板平面在世界坐标系

的平面上

•       其中,

为摄像机的内参数矩阵,

为模板平面上点的齐次坐标,

为模板平面上点投影到图象平面上对应点的齐次坐标,

分别是摄像机坐标系相对于世界坐标系的旋转矩阵和平移向量

根据旋转矩阵的性质,即

,每幅图象可以获得以下两个对内参数矩阵的基本约束

由于摄像机有5个未知内参数,所以当所摄取得的图象数目大于等于3时,就可以线性唯一求解出

算法描述

  1. 打印一张模板并贴在一个平面上
  2. 从不同角度拍摄若干张模板图象
  3. 检测出图象中的特征点
  4. 求出摄像机的内参数和外参数
  5. 求出畸变系数
  6. 优化求精

五.使用Matlab相机标定工具箱标定相机的基本步骤

1.安装MATLAB

本机安装的是MATLABR2014a

2.安装相机标定工具箱Camera Calibration Toolbox

虽然Matlab2014a已经自带了Camera Calibrator应用,基本上添加图片后,随便设置一下就能自动完成标定,因为很多以前老的论文做的实验都是基于单独的老版本的标定工具箱,所以这里还是使用老版本的工具箱来进行相机标定

 
将解压后的文件夹TOOLBOX_calib(文件夹可以重命名)添加到MATLAB搜索路径(可以把加压后的文件夹放在Matlab安装目录下的toolbox目录下)
工具包下载及介绍和示例教程:http://www.vision.caltech.edu/bouguetj/calib_doc/index.html

2.准备一张标定板

上述相机标定工具箱官网教程中提供了标定板图片下载地址(下载结果见pattern.pdf)
一般来说,标定板越大越好,且尽量保证表面是平的

3、实验数据采集

将标定板摆在相机可视的范围内,每拍一张照片,标定板换一个位置和朝向,将拍摄的照片文件名命名为imgnameX.jpg的格式,前面的imgname可以自己命名,X为图片索引,可以从1开始,如imgname1.jpg,图片格式也可以使用其他格式。如bmp,tif
 
 

3、相机标定步骤

相机标定参考教程:

First calibration example - Corner extraction, calibration, additional tools

3.1.启动相机标定工具箱
在Matlab命令行宽口输入calib启动相机标定工具箱
当图像量大且多时需要使用第二种方式;此处15到20张照片可以选择标准模式
 3.2 载入图片
进入图像所在目录,然后点击Image names按钮
 
输入标定图像序列的名称前缀(不包含数字序号)如上方式,然后输入图片格式

 
 
3.3.提取角点
 在标定工具箱上点击Extract grid cornder按钮
 
输入需要处理的图片数目,默认回车为刚才导入的全部图片
再选择默认的corner finder窗口大小(就是十字光标),wintx=winy=5,比较合适
角落提取引擎含有自动计算方块个数的系统。这个引擎特别适合多图像的情况。避免了在X方向和Y方向手动输入方块个数的麻烦,默认使用自动方块检测机制。

然后在对每一幅测试图进行手动设置最外围的四个角点,第一个点会作为原点,一般位于左上角,其他三个点选择顺序不重要,不过还是建议按顺时针选取(为标定方便,我们未将最外层的方格包括在内)

 

接下来需要设定每个小方格在现实世界中的宽高,以便随后角点的自动选择;实验过程中设定为30mm×30mm;只需第一次设定

 
 程序会自动计算方块的数量和角点(X方向和Y方向),并且显示出来。接下来看Matlab命令行的提示,如果预测的角点接近真实图片上的角点,不需要通过键入径向畸变系数(radial distortion coefficient)来“帮助”软件。(这里为简化流程就不考虑畸变系数了,如果需要处理畸变系数可以参考原文)按下“回车键”,角点自动被提取出来。
 
角点被自动提取出来,并显示在figure 3上(围着角点的蓝色方块显示了角点的边界)。
 对剩下的每一幅图像都进行上述角点提取操作,(第一次标定必须很麻烦的一幅一幅的操作,若已经做过一次,可点击load选项,会自动载入Calib_Results.mat中的角点信息,这个信息在第一次标定时会生成,后面会讲到)
3.4实施标定
完成角点提取后,点击校正工具箱上的Calibration按钮来运行主要校正步骤。
初始化步骤计算校正参数的封闭解,不包括任何镜头失真(程序名称:init_calib_param.m)。非线性最优化步骤使所有参数的二次投影误差最小(9个内部自由度(DOF):焦点,投影中心,失真系数,和6X20个外部自由度,一共129个参数)

说明

A. 通过Recomp. corners按钮提高标定精确度;

B. Analyse error展示角点误差分布,用鼠标左键点击后,在命令窗口可直接显示该点信息;

C.点击Reproject on images按钮用计算出来的参数投影到图像。这些投影是基于当前的内部参数和外部参数。二次投影误差同样显示如下:

 
D:点击工具箱上的Show Extrinsic。外部参数(网格对于摄像机的相对坐标,即摄像机坐标系)将显示出来:
 
回头看一下误差图表,发现有一些二次误差很大。原因是我们没有在一些失真较大的图像上仔细提取角点(一个较好的工作是用预测失真选项)。无论如何,我们可以自动重新计算所有图像角点。方法是:点击Recomp.corners按钮,选择新的角点检测大小,wintx=winty=5,再点击Calibration按钮运行一次。
3.5保存标定结果
最优化完成后,点击Save按钮来保存校正的结果,结果保存在Calib_results.mat,得到的相机参数存储在Calib.Results.m文件中

附件列表

相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)的更多相关文章

  1. 相机标定过程(opencv) + matlab参数导入opencv + matlab标定和矫正

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...

  2. SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解

    想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...

  3. Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!

    一.安装 Autoware & ZED 内参标定 & 外参标定准备 之前的这篇文章:Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定! 记录了我用 ...

  4. 利用matlab摄像机标定

    (1)输入图像 "Image names"键 Matlab的图形窗口显示出20幅靶标图像 (2) 提取角点 "Extract grid corners"键. 输 ...

  5. Matlab 摄像机标定+畸变校正

    博客转载自:http://blog.csdn.net/Loser__Wang/article/details/51811347 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行 ...

  6. Matlab计算机视觉/图像处理工具箱推荐

    Matlab计算机视觉/图像处理工具箱推荐 转载http://cvnote.info/matlab-cv-ip-toolbox/ 计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理 ...

  7. matlab 小波工具箱

    wavemenu --- >wavelet ---->wavelet packet1-D Matlab小波工具箱的使用1 转载▼ http://blog.sina.com.cn/s/blo ...

  8. matlab添加M_map工具箱(转 http://blog.sina.com.cn/s/blog_491b86bf0100srt9.html)

    之前转载过matlab画世界地图的博文.最近正好用到.首先试了matlab自带的worldmap,感觉画出来的图形不尽如人意,比较杂乱.如下图. 略查阅了些资料,请教了Liangjing,一致推荐m_ ...

  9. Matlab小波工具箱的使用2

    Matlab小波工具箱的使用2 (2011-11-11 09:32:57) 转载▼ http://blog.sina.com.cn/s/blog_6163bdeb0102dw7a.html#cmt_5 ...

随机推荐

  1. jQuery校验

    jQuery校验 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库 <script src=&q ...

  2. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...

    http://blog.csdn.net/lidew521/article/details/24441825

  3. Spring MVC学习笔记——登录和异常处理

    1.在WEN-INF文件夹下面,添加一个login.jsp文件 <%@ page language="java" contentType="text/html; c ...

  4. 为你的pip更换一个国内的镜像源

    为你的pip更换一个国内的镜像源 是否常常为pypi官网被无故和谐掉导致pip不能下载python的各个包而痛心疾首? 是否常常在深夜里看着pip install 下载包的速度慢如乌龟而长吁短叹? 是 ...

  5. [UML]UML系列——时序图(顺序图)sequence diagram

    系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...

  6. easyUI中onLoadSuccess方法获取多个对象

    后台将一个list中的对象循环放到map中,如下: @RequestMapping("/getSaleOrderDetailList") @ResponseBody public ...

  7. spring mvc controller间跳转 重定向 传参

    http://blog.csdn.net/jackpk/article/details/19121777/

  8. touch命令

    [touch]      改变文件的时间戳 命令格式: touch [OPTION]... FILE... 命令功能: 更新每个文件的访问和修改时间到当前时间或建立一个不存在的文件 命令参数: -a  ...

  9. WAMP错误提示:HTTP Error 404.The requested resource is not found

    原因: 本地80端口被占用,需要修改WAMP的默认端口 修改设置: 找到 bin/apache/apache***/conf/httpd.conf文件 将文件中的80修改为8088 (注:修改三个位置 ...

  10. Atom安装以及activate-power-mode atom package插件安装

    1.首先安装node.js,不然没有npm命令可用. 现在很多开源程序都使用npm来管理依赖包,所以node.js必备呀. 2.去下载atom安装包和activate-power-mode-0.5.2 ...