MATLAB标定工具箱的使用

2023-05-16

MATLAB标定工具箱的使用

    用VS2012+OpenCV2.4.6写的双目标定的程序(其实就是跑的Samples),实验结果一直很不理想,查看很多Blog,说可以先用MATLAB标定工具箱(http://download.csdn.net/detail/hyacinthkiss/8180789)获得extrinsics和intrinsics矩阵,然后作为输入参数再读到OpenCV的stereoRectify函数,进而就可以Match了。这里,分享一下我做MATLAB标定的过程:

p.s.详细的用法可以见:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html

一、环境配置

    1.解压MATLAB标定工具箱至某个文件夹,默认为:TOOLBOX_calib,将之存放在MATLAB\R2010b\toolbox下(个人喜欢,也可以放其他位置)。

    2.运行Matlab并添加文件夹TOOLBOX_calib的位置到matlab路径path中,具体操作为:File->Set Path->Add Folder To Path,然后找到刚刚存放的文件夹TOOLBOX_calib,save一下就OK了。

二、文件配置

    将所有要标定的棋盘图放到文件夹TOOLBOX_calib里.m文件所在的目录下(个人喜欢将左右相机的图片命名为left01.jpg和right01.jpg等的形式,看着舒服,也和后面要讲的标定结果保存对应起来),OK,万事俱备,准备开动了。

三、单目标定

    1.在Matlab命令行窗口中输入calib_gui,出现以下窗口。

    2.选择Standard之后便出现以下窗口。

 

    3.点击Image names,命令行窗口会提示你输入图片的basename以及图片的格式(比如你图片文件名是right01, right02, …, right12,basename就是right,图片格式如:jpg),然后Matlab会自动帮你读入这些图片,如下图所示,可以看到,读入了12幅右摄像头的棋盘图。

    4.然后再回到主控制界面,点击Extract grid corners,提取每幅图的角点。点击完后,命令行会出现如下提示,主要是让你输入棋盘角点搜索窗口的大小。如果窗口定大一点的话提取角点会比较方便点,即便点得偏离了也能找到,但也要注意不能大过一个方格的大小。这些选项,都只要敲回车选用默认设置就可以了。

    5.继上步Enter敲完后,跳出第一幅棋盘格图,按顺时针或是逆时针方向分别点选棋盘格的最外面的四个内格点,程序会自动检测出其余的角点。

    6.在选完四个角点后,程序会在命令行窗口提示你输入标定板棋盘的size,输入你棋盘格的实际大小就行,比如我的棋盘格是24mm,就输入24。这步事实上相当关键,它定义了空间的尺度,如果要对物体进行测量的话,这步是必须的。Ender后同时得到角点检测结果图。

    7.继续命令行窗口按Ender选择默认项,跳出新的标定板图像,同样的方法,如此反复,检测角点完12幅左视图。

    8.检测完所有的图像后,点击Calibration,开始摄像头标定。

    9.标定完成后,可以进行各种结果的可视化观察。由Show Extrinsic得的结果图可见相机与标定板的距离约为1000mm左右,且其中各种颜色标定板对应Analyse Error的结果图的各种误差结果,其中,红色的(对应第2幅标定板图像)的误差较大,部分角点提取有问题(这是当时选角点时我故意选得偏离了一些,验证一下)。

图1.Show Extrinsic的结果图

图2.Analyse Error的结果图

    10.验证标定结果无误之后,就点击面板上的Save按钮,程序会把标定结果放在一个叫Calib_Result.mat中,默认存储路径为:文件夹TOOLBOX_calib里.m文件所在的目录下。为了方便后续立体标定,把这个文件名改为Calib_Result_right.mat。

    11.左摄像头标定的方法与右摄像头相同,生成的Calib_Result.mat之后,将其改名为Calib_Result_left.mat就可以了。

四、双目标定

    1.左右摄像头都标定完成之后,就可以开始立体标定了。Matlab命令行中键入stereo_gui启动立体标定面板,如下图所示。

    2.点击Load left and right calibration files,在命令行窗口中会提示你分别填写左右自标定的结果,如果你按上面的文件名保存方式的话,直接Ender选择默认的文件名(Calib_Result_left.mat和Calib_Result_right.mat),或是填写你自己保存的文件名。

    3.Load成功后,就可以开始Run stereo calibration了,run之后的结果如下图所示,左右摄像头的参数都做了修正,并且也求出了两个摄像头之间的旋转和平移关系向量(om和T)。从结果可以看出左右相机的Focal Length相差还是蛮大的,不知这对后续的视差图等计算影响如何(怎么调整两个摄像机的焦距相同也是个问题)

    4.run成功后,就可以看标定的结果了。同样可以直观的看出相机的相对位置相差很大。

图3.Show Extrinsic of stereo rig的结果图

图4.图3的俯视图

    5.还可以通过Rectify the calibration images按钮,得到纠正后的所有棋盘格图片,可以直接读入OpenCV中进行Match了。当然,你需要对其他物体或是想实时得到视差图,还得将互标定结果写到OpenCV函数调用时支持的格式。

五、问题探讨

    1.相机的焦距是否应该保持一致?

    答:答案是应该肯定的。因为在后续的视差图转换为三维图时的Q矩阵只有一个f值。所以必须要求至少焦距相近。而且立体成像的三角测量(Learning OpenCV书中提到)的前提假设就是fl=fr。不知道理解的对不对。

    2.怎么调整两个摄像机的焦距相同?

    答:a.离两个相机相同远处放置标定板(可以将两个相机放置在一起以打到这个效果),分别调节两个相机的焦距,使得两个画面的清晰度相似。(这是我咨询大恒图像的技术支持的结果)

    b.我觉得这样肯定还是不行,可以再微调,就是标定一次得一个焦距,再微调一下,再测,这样就会很麻烦。

    不知有没有更好的方法。看了很多Blog,没看到涉及这块的,不知道大家都是怎么解决的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB标定工具箱的使用 的相关文章

  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p

随机推荐

  • Json String to Java Bean

    34 version 34 1 34 consentId 34 34 b618924f 8a6c 42bc 8553 99e3a8a0fec4 34 34 domain 34 34 cd site15294072534021 com 34
  • 实战PyQt5: 097-键盘事件

    在一个GUI桌面应用中 xff0c 用户和程序之间的交互一般通过键盘和鼠标来完成 xff0c 处理有关键盘和鼠标的事件是一个GUI程序几乎不可或缺的部分 xff0c 下面介绍在Qt中处理输入焦点和键盘事件的相关知识 设置控件的输入焦点 在一
  • 线性代数之——特征值和特征向量

    线性方程 A x 61 b Ax 61 b A x 61 b 是稳定状态的问题 xff0c 特征值在动态问题中有着巨大的重要性
  • Px4源码框架结构图

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • aruco marker 的使用

    安装aruco 教程 xff1a make make install
  • PX4自定义Mavlink消息(一)px4发送

    用于项目需求 xff0c 需要在PX4和QGC新增自定义消息用于通信控制 xff0c 看了很多有关文章 xff0c 我就不明白 xff0c 为啥代码都是复制来复制去的 xff0c 大部分的文章连变量名的起的一样 一点帮助都没有 xff0c
  • QGC接收PX4自定义Mavlink消息(二)qgc接收

    这里补充一些 xff0c 我的px4版本是1 11 0dev xff0c 在ubuntu18 04上开发 xff0c qgc为目前官网最新的版本 xff0c 在windows上上开发 xff0c 大家的源码会因为版本差异而有少许区别 xff
  • OpenWRT无线配置

    默认开启无线网络 修改 xff08 package kernel mac80211 files lib wifi mac80211 sh xff09 vi span class hljs built in package span kern
  • cmake自动添加所有源文件和头文件

    cmake自动添加源文件和头文件 一 背景 项目中需要不断新建源文件和头文件 xff0c 每添加一个文件CMakeLists txt中需要手动加入源文件和指定头文件路径 xff0c 不胜其烦 突发奇想cmake能不能像IDE一样 xff0c
  • github在线修改文章

    github在线添加文件夹 输入文件名字后 xff0c 再输入英文模式下的 即可 修改fork后自己的 xff0c 直接提交 Github 网页上 更新 Fork别人的 Repository https blog csdn net huut
  • GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析

    每个时区跨15 经度 以0 经线为界向东向西各划出7 5 经度 xff0c 作为0时区 即0时区的经度范围是7 5 W 7 5 E 从7 5 E与7 5 W分别向东 向西每15 经度划分为一个时区 xff0c 直到东11区和西11区 东11
  • selenium借助AutoIt识别上传文件Java篇

    https www cnblogs com testlc p 6069460 html 官方网站 xff1a https www autoitscript com site 从网站上下载AutoIt并安装 xff0c 安装完成在菜单中会看到
  • 【学习记录】贝叶斯滤波详解

    贝叶斯滤波详解 贝叶斯滤波的用途 xff08 Bayesian Filtering xff09 xff1a 贝叶斯滤波理论的应用可谓十分广泛 我们知道 xff0c 在机器人运动过程中 xff0c 有两个方面的信息来源 xff0c 一个是通过
  • c++好用的网站

    目录 洛谷www luogu com cn 有道小图灵https oj youdao com csp 维基https oi wiki org 信奥赛一本通http ybt ssoier cn 8088 index php 1 xff0c 洛
  • PX4uORB介绍[1]-常见IPC机制

  • ubuntu修改.bashrc文件

    使用如下命令修改 bashrc文件 xff1a gedit bashrc
  • PX4中文维基——光流部分

    觉得需要用到的内容复制在下面 光流 官网英文原文地址 xff1a http dev px4 io optical flow outdoors html Optical Flow uses a downward facing camera a
  • px4flow源码分析

    Flow c 计算光流用的是 SAD块匹配算法 第一部分是生成直方图 xff0c 第二部分是根据直方图来进行位移向量的计算 外部的 j i的for循环是采样点的循环 xff0c 内部的jj ii的循环是对于一个小邻域的采样 采样点是从 im
  • sudo apt-get update 与upgrade的用法

    在windows下安装软件 xff0c 我们只需要有EXE文件 xff0c 然后双击 xff0c 下一步直接OK就可以了 但在LINUX下 xff0c 不是这样的 每个LINUX的发行版 xff0c 比如UBUNTU xff0c 都会维护一
  • MATLAB标定工具箱的使用

    MATLAB标定工具箱的使用 用VS2012 43 OpenCV2 4 6写的双目标定的程序 xff08 其实就是跑的Samples xff09 xff0c 实验结果一直很不理想 xff0c 查看很多Blog xff0c 说可以先用MATL