相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)
相机标定
一、相机标定的目的
确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。
二、通用摄像机模型

世界坐标系、摄像机坐标系和像平面坐标系都不重合。同时考虑两个因素 :
(1)摄像机镜头的畸变误差,像平面上的成像位置与线性变换公式计算的透视变换投影结果有偏差;
(2)计算机中图像坐标单位是存储器中离散像素的个数,所以像平面上的连续坐标还需取整转换。

摄像机参数
l 摄像机内部参数 (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.
l 摄像机外部参数 (Extrinsic Parameters)
摄像机在世界坐标系里的位置和方向
摄像机坐标系、世界坐标系
主要包括:旋转矩阵 R 的9个参数和平移矩阵的3个参数。或定义为 6 个。主要包括: 旋转矩阵的3个偏转角和平移矩阵的3个参数。
简而言之:

三、摄像机原理

摄像机坐标系的原点

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

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

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

四、摄像机标定方法分类
l 传统摄像机标定方法
l 主动视觉摄像机标定方法
l 摄像机自标定方法
|
标定方法 |
特点 |
优点 |
不足 |
|
传统摄像机标定方法 |
利用已知的景物结构信息。常用到标定块。 |
可以使用于任意的摄像机模型,标定精度高 |
标定过程复杂,需要高精度的已知结构信息。 |
|
主动视觉摄像机标定方法 |
已知摄像机的某些运动信息 |
通常可以线性求解,鲁棒性比较高 |
不能使用于摄像机运动未知和无法控制的场合 |
|
摄像机自标定方法 |
仅依靠多幅图像之间的对应关系进行标定 |
仅需要建立图像之间的对应,灵活性强 |
非线性标定,鲁棒性不高 |

四、张正友平面标定方法
算法原理


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

的平面上
• 其中,

为摄像机的内参数矩阵,

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

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

和

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


根据旋转矩阵的性质,即

和

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


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

算法描述
- 打印一张模板并贴在一个平面上
- 从不同角度拍摄若干张模板图象
- 检测出图象中的特征点
- 求出摄像机的内参数和外参数
- 求出畸变系数
- 优化求精
五.使用Matlab相机标定工具箱标定相机的基本步骤
1.安装MATLAB
2.安装相机标定工具箱Camera Calibration Toolbox


2.准备一张标定板
3、实验数据采集

3、相机标定步骤
First calibration example - Corner extraction, calibration, additional tools






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

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



说明
A. 通过Recomp. corners按钮提高标定精确度;
B. Analyse error展示角点误差分布,用鼠标左键点击后,在命令窗口可直接显示该点信息;
C.点击Reproject on images按钮用计算出来的参数投影到图像。这些投影是基于当前的内部参数和外部参数。二次投影误差同样显示如下:



附件列表
相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)的更多相关文章
- 相机标定过程(opencv) + matlab参数导入opencv + matlab标定和矫正
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解
想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...
- Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!
一.安装 Autoware & ZED 内参标定 & 外参标定准备 之前的这篇文章:Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定! 记录了我用 ...
- 利用matlab摄像机标定
(1)输入图像 "Image names"键 Matlab的图形窗口显示出20幅靶标图像 (2) 提取角点 "Extract grid corners"键. 输 ...
- Matlab 摄像机标定+畸变校正
博客转载自:http://blog.csdn.net/Loser__Wang/article/details/51811347 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行 ...
- Matlab计算机视觉/图像处理工具箱推荐
Matlab计算机视觉/图像处理工具箱推荐 转载http://cvnote.info/matlab-cv-ip-toolbox/ 计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理 ...
- matlab 小波工具箱
wavemenu --- >wavelet ---->wavelet packet1-D Matlab小波工具箱的使用1 转载▼ http://blog.sina.com.cn/s/blo ...
- matlab添加M_map工具箱(转 http://blog.sina.com.cn/s/blog_491b86bf0100srt9.html)
之前转载过matlab画世界地图的博文.最近正好用到.首先试了matlab自带的worldmap,感觉画出来的图形不尽如人意,比较杂乱.如下图. 略查阅了些资料,请教了Liangjing,一致推荐m_ ...
- Matlab小波工具箱的使用2
Matlab小波工具箱的使用2 (2011-11-11 09:32:57) 转载▼ http://blog.sina.com.cn/s/blog_6163bdeb0102dw7a.html#cmt_5 ...
随机推荐
- CMake
使用CMake编译跨平台静态库 http://www.tuicool.com/articles/3uu2Yj cmake命令 安装.用法简介 https://fukun.org/archives/04 ...
- yii2 可逆加密
加密: $data 是你要加密的内容, $secretKey 是你自己设置的salt, $encryptedData = Yii::$app->getSecurity()->encrypt ...
- [转]PhpStorm 超强语言模板的支持
最近遇到一些PhpStorm编程的问题: 在使用Zen Coding插件时,PHPStorm不像Notepad++那样随便使用.PHPStorm只有在编辑识别为HTML的文件时才可以使用Zend Co ...
- Linux软件包管理
Linux软件包管理 Linux软件包管理主要有2类:是二进制包管理.源码包管理 二进制包管理 主要有RPM和YUM两种 RPM包管理 安装 --ivh:-v ,-vv,-vvv显示的安装信息依次详细 ...
- 【bzoj4721】[Noip2016]蚯蚓
题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐 ...
- Apache 两种mpm prefork 和 worker 的区别
Apache默认的是线程安全的prefork,Prefork MPM 使用多个子进程,每个子进程有一个线程,每个进程每次只处理一个请求连接,一个请求出故障后不会影响其他请求,是线程安全的 worker ...
- C++ 与OpenCV 学习笔记
联合体:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union) 1. 联合体是一种结构: 2. 他的所有成员相对于基地址的偏移量均为0: 3. 此结构空间要大到足够容纳最&qu ...
- .Net Framework认知
在托管代码的世界里,应用程序首先被加载到应用程序域(AppDomain)中,然后将应用程序域加载到进程中,一个进程可以包含多个应用程序域,也就是说一个进程可以包含多个应用程序,毕竟应用程序域之间的切换 ...
- 什么时候用Model,什么时候用Entity?
在建立一个实体类的时候,究竟是用Model还是用Entity?比如MVC中,Model存了数据实体,但是他被称为Model,而在EF中,Entity也是存放数据实体,却被称作Entity,这两者有何区 ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...