相机标定

一、相机标定的目的

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

二、通用摄像机模型

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

(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. confirm对话框取消后阻止ajax操作、ajax做批量删除

    在做批量删除的时候,需要用confirm弹出一个提示框让用户确认是否删除,点击确定,执行操作,点击取消,取消操作.但是如果使用ajax把选中项的主键值传到处理页面处理时,如果使用下面的方法将confi ...

  2. .gitignore过滤个人配置

    git还是一个很好使用的版本工具.所以用eclipse做自己的小玩意儿,在多台电脑之间同步的时候我经常会使用它.. 但是有个问题..不同电脑的eclipse的个人配置稍微有那么一点点的不同..比如有几 ...

  3. javascript闭包

    关于闭包的介绍,推荐两篇文章: 廖雪峰javascript教程-闭包: http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a ...

  4. Error configuring application listener of class。。。NoClassDefFoundError。。某Listener 之启动tomcat报错

    当你启动tomcat的时候如果报类似下面的错误: WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to ' ...

  5. js自动轮播图片的两种循环方法(原创)

    用5个div,布局从左到右5张图片,从左到右5个div分别指定ID为img1,img2,img3,img4,img5.(背景是relative,5个div是相对于背景absolute定位) 显示如下: ...

  6. Java多线程--线程安全问题的相关研究

    在刚刚学线程的时候我们经常会碰到这么一个问题:模拟火车站售票窗口售票.代码如下: package cn.blogs.com.isole; /* 模拟火车站售票窗口售票,假设有50张余票 */ publ ...

  7. ACM之鸡血篇

    一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...

  8. mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom

    import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator ...

  9. 理解Attribute

    注:本文转载自http://kb.cnblogs.com/page/87531/ Attribute与Property 的翻译区别 Attribute 一般译作“特性”,Property 仍然译为“属 ...

  10. 面localStorage用作数据缓存的简易封装

    面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...