相机标定的理解及采用opencv和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
![](/assets/blank.gif)
![](/assets/blank.gif)
2.准备一张标定板
Doing your own calibration
3、实验数据采集
![](/assets/blank.gif)
3、相机标定步骤
First calibration example - Corner extraction, calibration, additional tools
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
然后在对每一幅测试图进行手动设置最外围的四个角点,第一个点会作为原点,一般位于左上角,其他三个点选择顺序不重要,不过还是建议按顺时针选取(为标定方便,我们未将最外层的方格包括在内)
![](/assets/blank.gif)
接下来需要设定每个小方格在现实世界中的宽高,以便随后角点的自动选择;实验过程中设定为30mm×30mm;只需第一次设定
![](/assets/blank.gif)
![](/assets/blank.gif)
说明
A. 通过Recomp. corners按钮提高标定精确度;
B. Analyse error展示角点误差分布,用鼠标左键点击后,在命令窗口可直接显示该点信息;
C.点击Reproject on images按钮用计算出来的参数投影到图像。这些投影是基于当前的内部参数和外部参数。二次投影误差同样显示如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
1.OpenCV Camera Calibration
OpenCV提供具体的标定策略和说明文档,可以直接使用,说明文档的位置"D:\opencv\sources\doc\tutorials\calib3d\camera_calibration";
例程的位置“D:\opencv\sources\samples\cpp\camera_calibration.cpp”
如何使用例程呢?首先修改配置文档xml
![](https://code.csdn.net/assets/CODE_ico.png)
- <?xml version="1.0"?>
- <opencv_storage>
- <Settings>
- <!-- 标定板的宽高各有多少角点Number of inner corners per a item row and column. (square, circle) -->
- <BoardSize_Width>7</BoardSize_Width>
- <BoardSize_Height>7</BoardSize_Height>
- <!--标定板上的方块边长,以毫米为单位 The size of a square in some user defined metric system (pixel, millimeter)-->
- <Square_Size>50</Square_Size>
- <!-- 选择标定模式The type of input used for camera calibration. One of: CHESSBOARD CIRCLES_GRID ASYMMETRIC_CIRCLES_GRID -->
- <Calibrate_Pattern>"CHESSBOARD"</Calibrate_Pattern>
- <!-- The input to use for calibration. 所采集的标定图像存储的路径及名称xml档
- To use an input camera -> give the ID of the camera, like "1"
- To use an input video -> give the path of the input video, like "/tmp/x.avi"
- To use an image list -> give the path to the XML or YAML file containing the list of the images, like "/tmp/circles_list.xml"
- -->
- <Input>"./vtDirTest.xml"</Input>
- <!-- If true (non-zero) we flip the input images around the horizontal axis.-->
- <Input_FlipAroundHorizontalAxis>0</Input_FlipAroundHorizontalAxis>
- <!-- Time delay between frames in case of camera. -->
- <Input_Delay>100</Input_Delay>
- <!-- How many frames to use, for calibration. -->
- <Calibrate_NrOfFrameToUse>25</Calibrate_NrOfFrameToUse>
- <!-- Consider only fy as a free parameter, the ratio fx/fy stays the same as in the input cameraMatrix.
- Use or not setting. 0 - False Non-Zero - True-->
- <Calibrate_FixAspectRatio> 1 </Calibrate_FixAspectRatio>
- <!-- If true (non-zero) tangential distortion coefficients are set to zeros and stay zero.-->
- <Calibrate_AssumeZeroTangentialDistortion>1</Calibrate_AssumeZeroTangentialDistortion>
- <!-- If true (non-zero) the principal point is not changed during the global optimization.-->
- <Calibrate_FixPrincipalPointAtTheCenter> 1 </Calibrate_FixPrincipalPointAtTheCenter>
- <!-- 输出标定后的内参/外参以及其他参数的文档名称路径The name of the output log file. -->
- <Write_outputFileName>"out_camera_vt.xml"</Write_outputFileName>
- <!-- If true (non-zero) we write to the output file the feature points.-->
- <Write_DetectedFeaturePoints>1</Write_DetectedFeaturePoints>
- <!-- If true (non-zero) we write to the output file the extrinsic camera parameters.-->
- <Write_extrinsicParameters>1</Write_extrinsicParameters>
- <!-- If true (non-zero) we show after calibration the undistorted images.-->
- <Show_UndistortedImage>1</Show_UndistortedImage>
- </Settings>
- </opencv_storage>
大概修改上述标注的几个位置,然后运行camera_calibration.cpp即可;
工程下载地址
参考【1】 【2】
转自:http://blog.csdn.net/felix86/article/details/38401447
相机标定的理解及采用opencv和matlab工具箱的标定方法相关推荐
- matlab相机标定工具箱进行相机标定,相机标定的理解及采用opencv和matlab工具箱的标定方法...
一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标系和像平面 ...
- 相机标定+鸟瞰图生成(VS2017+OpenCV)
一.要求: 1.用自己的手机采集棋盘板定标数据: 2.实现或调用 角点检测.局部特征提取.局部特征匹配算法,标定自己手机的内参: 3.改变外参,生成不同视角的新图像. 二.实验过程: 1.实验前准备: ...
- 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangdashi888/article/details/51356385 1. 相机参数是三种不同的 ...
- 经典手眼标定算法之Navy的OpenCV实现
经典手眼标定算法之Navy的OpenCV实现 在我的上一篇博客中已经介绍了Tsai的手眼标定算法,下面主要介绍Frank C. Park and Bryan J. Martin在文献Robot sen ...
- 鱼眼摄像头标定与畸变校正(OPENCV版)
转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://github.com/WordZzzz/fisheye_calibration 软件版本 ...
- 双目立体视觉源代码 双目立体视觉匹配程序 双目视觉3d成像(三维重构图像处理) 基于双目视觉的深度计算和三维重建 opencv写的双目视觉摄像机标定和三维重建代码
双目视觉/双目标定源码/图片集标定匹配三维重建坐标计算OpenCV 1.双目立体视觉源代码(包括标定,匹配,三维重建) 2.双目视觉实验图片集(双目立体视觉中使用的标准实验图,适合初学者进 行实验使用 ...
- opencv读取MATLAB双目标定的结果进行双目校正
概述: opencv内部也有双目标定的函数,但是结果有时候会飘,所以想先用MATLAB标定工具箱试试看.使用MATLAB先队两个相机进行单目标定,然后进行双目标定,将结果保存在xml文件中.xml文件 ...
- 采用OpenCV和深度学习的钢印识别
采用OpenCV和深度学习的钢印识别 [这个帖子标题党了很久,大概9月初立贴,本来以为比较好做,后来有事情耽搁了,直到现在才有了一些拿得出手的东西.肯定不会太监的.好,转入正题:] 原始需求: 系统将 ...
- 自动驾驶之车位线检测之二单路鱼眼相机矫正裁剪(python ,C++,opencv)
前篇博文https://blog.csdn.net/xiao__run/article/details/89190112涉及到了使用四路鱼眼图像拼接并识别车位线,这个过程涉及到鱼眼图像的标定,矫正以及 ...
最新文章
- 完成端口模式下的高性能网络服务器【转】
- 学科实践活动感悟50字_课改实践提素养 示范引领促教研 ——复兴镇小学语文课堂教学改革“五环四让”教学模式 研讨成果展示活动...
- 云考古 | Azure 自建 RDS 让 iPad 跑 Office 97
- Insider Dev Tour 2019 全球巡演 苏州站
- 数据可视化图表,你选对了吗?
- Windows环境配置Apache+Mysql+PHP
- Mr.J--JavaScript-恶搞小代码
- 【英语学习】【WOTD】 putsch 释义/词源/示例
- moto txt阅读器java版,moto txt阅读器手机版下载
- scala函数进阶篇
- 国内外sns源码搜集
- 当前的安全设置不允许从该位置下载文件--解决方法
- 弱口令总结(什么是弱口令)
- 禁止网页 切屏 切换标签
- 程序 多核优化 linux,linux 多核CPU性能调优
- hive表分区上传数据出现的一个问题及解决思路
- clone别人远程仓库的代码,运行npm install报错npm ERR! Maximum call stack size exceeded
- 从比尔盖茨嫁女看商战真经
- 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.7 删除项的方法
- 无限度修正的随机块模型(2014)
热门文章
- C#(Winform)+H5(Html)微信/支付宝对接接口及前端支付页面
- 夜光带你走进通信网络(九) 新的领域
- shrio 多次掉登陆没有cookies_速度直线上升!育碧游戏下载没有速度怎么办?这2种方法帮你完美解决!...
- 单词APP的工作历程复盘
- vbs关不掉的计算机窗口,vbs怎么关闭_vbs整人代码-关不掉的窗口
- python educoder 第3关:列表基本操作
- 蓝牙定位--多点质心定位
- 用python做一张带背景的二维码
- Java实现图片转换PDF文件
- matlab等于本身是什么命令,matlab中的m=size是什么意思