一 、 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解

计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表

示各个坐标系下的转换,首先在图像坐标系下与相机坐标系的关系

可得出   Xcam=x/dx+x0,    Ycam=y/dy+y0  表示为矩阵形式

Xcam           1/dx   0      x0          x

Ycam      =    0     1/dy   y0    *    y

1               0     0        1           1

相机坐标系与图像坐标系的关系是

既有可以写成  

我们知道相机坐标系与世界坐标系的关系是

表达成矩阵表示为

    可以推导出

(这里面的Xc ,Yc,Zc 也就是上面的X Y Z )其中

K= 就为相机的内参     R  T  为相机的外参(好难编辑)

接下来就是说明一下使用MATLAB  Opencv ,以及ROS环境下的Opencv进行相机校准

相机的标定主要有两种方法     :摄像头标定方法和摄像头自标定方法,典型的有:(1)Tsai(传统的标定方法)  (2)张正友(介于传统与自标定方法之间)张正友标定法由于很简单

所以得到广泛 的应用,张正友标定法的步骤:

1、打印一张模板并贴在一个平面上;
           2、从不同角度拍摄若干张模板图像;
           3、检测出图像中的特征点;
           4、求出摄像机的外参数(单应性矩阵)和内参数(最大似然估计) ;
           5、求出畸变系数;

6、优化求精。

二、对于在matlab中进行相机标定是一件非常简单的事,因为在matlab官方网站,以及matlab中文论坛上都是有教程的,只需要找到标定模板就可以了,

matlab中文论坛的学习网址   http://www.ilovematlab.cn/thread-267670-1-1.html

详细相机标定过程请参考      http://www.mathworks.com/help/vi ... ator.html#btxr8c_-2

MATLAB相机标定教学视频   http://www.mathworks.com/videos/ ... h-matlab-81233.html

2.1   首先我们得准备软件matlab,安装matlab就按照网上的教程既可以安装成功了,不过安装过程可能遇到一些软件破解的一些问题,如果安装不上,

那就果断的换安装的软件版本, 其次就是准备标定魔板,我是直  接用A3的纸打印了标准的棋盘方格,自己百度一下标定棋盘网上有很多图纸可供下载,

http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf

我使用的就是check-108,其中108代表的是每个小方格的边长为108mm,使用A3的纸张打印,后来测量一下每个黑白方格的边长为35mm,

2.2  材料和软件都准备好了,我们在准备摄像头,我们有四个选择:(1)手机拍照 我们就标定手机的摄像头,(2)笔记本自带的摄像头,(3)使用带USB的的摄像头(4)网上提供的模板

2.2.1 手机摄像头标定,最好的方法是将手机固定,然后移动标定模板,改变模板的远近位置,以及翻转角度等等,如下图

这里面是我把标定模板给固定,改变手机的位置,这就导致拍出来的照骗有些事不能用的(可以试试),就会明白为什么会不能进行标定了,

这只是展示其中四张照片,当然拍下来的至少要20张不一样的照片,现在开始使用MATLAB进行标定了,

2.2.2当我们想标定笔记本的摄像头或者我自己外界一个摄像头的时候,就需要使用一个软件去获取摄像头的照骗,使用 Ecap软件就可以打开摄像头,并且捕捉照骗

可以捕获很多不同角度的关于标定模板的图片,至少需要20张,紧接着打开matlab,在命令行输入

>> cameraCalibrator    出现:

之后可以添加“add images”,然后选择我的模板的方格大小,默认是25mm   改为与实际模板一致的边长是35mm

也可以直接添加网上所提供的标定模板,

添加完选择“”calibrate“”有

右边出现一下统计图,左下角就是每个图片相对摄像头的远近和角度,点击保存calibration.mat文件,点击“Export camera parameters”出现标定的结果

到此MATLAB的相机标定就完成了

(虽然我写的很幸苦,但是我也只是想记录下我的实验过程,中间也遇到很多问题,这都是解决后的结果本来是1,2,3放在一起的

但是因为篇幅太长,只好将其分为三段,中间也丢失过好几次,然后又重新写,大神们看见就当是在看笑话,一笑了之即可,

我知道这其中没有什么创新可言,真实惭愧,谢谢)

相机标定 matlab opencv ROS三种方法标定步骤(1)的更多相关文章

  1. 相机标定 matlab opencv ROS三种方法标定步骤(2)

    二  ubuntu下Opencv的相机标定 一般直接用Opencv的源码就可以进行相机的标定,但是可能只是会实现结果,却不懂实现的过程,我也是模模糊糊的看了<计算机视觉中的多视图几何>以及 ...

  2. 相机标定 matlab opencv ROS三种方法标定步骤(3)

    三 ,  ROS 环境下 如何进行相机标定 刚开始做到的时候遇到一些问题没有记录下来,现在回头写的时候都是没有错误的结果了,首先使用ROS标定相机, 要知道如何查看节点之间的流程图  rosrun r ...

  3. matlab多行注释的三种方法

    转自:http://icictech.blog.163.com/blog/static/2797425420084595725499/ 1)方法一 选中你要加注释的内容,然后选择工具菜单"t ...

  4. 用matlab脚本语言写M文件函数时用三种方法简单实现实现DFT(离散傅里叶变换)

    %用二重循环实现DFT: function xk=dt_0(xn); %define a function N=length(xn); %caculate the length of the vari ...

  5. Matlab中数组元素引用——三种方法

    Matlab中数组元素引用——三种方法   1.Matlab中数组元素引用有三种方法 1 2 3 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 注意:在使 ...

  6. MATLAB中多行注释的三种方法

    MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...

  7. opencv 3.1.0 访问像素值的三种方法(C++)

    三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...

  8. opencv图像阈值设置的三种方法

    1.简单阈值设置   像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...

  9. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

随机推荐

  1. (JavaScript插件——下拉菜单)

    前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html 本文主要来学习一下JavaScrip ...

  2. 关于C#中readonly

    关于C#中readonly的一点小研究 关于C#中readonly的一点小研究   可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑 ...

  3. node.js系列笔记之fs模块《二》

    一:感触 最近工作比较忙,感觉也比较多,因为工作上的不顺利,再加上加班比较多,所以最近心情不是很好,再加上英语能力差到不行,所以最近半个月学习进度也比较慢, 但还是告诉自己每天都坚持学一点,即使今天心 ...

  4. 仿腾讯微博的一个弹出框 v0.1 beta

    仿腾讯微博的一个弹出框 v0.1 beta   代码写的不太好,新手请大家海涵,只为博君一笑,勿放在心上. 写在这里留作纪念,也许以后用的到. 效果 CSS .prompt{ position: ab ...

  5. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较

    对web请求(HTTP/HTML)进行性能测试,确认请求响应时间.分别使用Loadrunner和JMeter进行测试,比较测试结果. 1.LoadRunner测试web请求响应时间 1.1  编制(录 ...

  6. MSSQL 清空日志 删除日志文件

    MSSQL 清空日志 删除日志文件 最近的项目主要做数据的归档,把数据从一个数据库拉到另一个数据库,照成新数据库的日志文件非常大:于是想把日志文件删除.最简单就是先分离数据库->删除日志文件-& ...

  7. MFC控件(8):command button与syslink control

    在VS 2008里MFC多了4种控件,分别是 split buttons ,command button , syslink controls和 network address controls. s ...

  8. Eclipse代码自动提示设置

    以前百度过如何设置Eclipse代码自动提示,但是本人记性不好,所以把这个方法写成一篇日志,这样以后就不用百度了,直接看自己的博客就是了,而且还增加了自己博客的点击量.以下是从各个地方看到总结的方法: ...

  9. 异常分析:关于jsp页面使用jstl

    1.在jsp页面中使用如下代码加入jstl的支持 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/c ...

  10. JS 脚本应该放在页面哪个位置 head body foot

    我们平时在页面上写JS 是放在头部<head>中呢 还是放到body 最下面 能更优化? 查了一番资料,推荐 放在页面底部如: <html> <head> < ...