看了许多标定的博文,为了以后的使用将标定步骤整理下来,整体分为先分别标定左右相机在立体标定:

这里使用的标定图片是网上找的,双目标定时待标定图片是双目相机同时拍摄得到的,拍摄程序如下:

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;    char* name_l = (char*)malloc(sizeof(char)*200);
char* name_r = (char*)malloc(sizeof(char)*200);
int main()
{    int i=0;  IplImage *img0 , *img1;    cvNamedWindow("camera_left");    cvNamedWindow("camera_right");    CvCapture* cap_left= cvCreateCameraCapture(2);     //这里我的摄像头ID是2,1,也有可能是1,0CvCapture* cap_right= cvCreateCameraCapture(1);    while(1)    {    img0 = cvQueryFrame(cap_left);img1 = cvQueryFrame(cap_right);  if( !img0 || !img1)  {    cout << "camera0 error" << endl;    break;    }    cvShowImage("camera_left", img0);    cvShowImage("camera_right", img1);    char c = cvWaitKey(33);    if(c == 27)     break;    if(c == 32)  {  i++;  sprintf(name_l, "leftPic%d.jpg", i);  sprintf(name_r, "rightPic%d.jpg", i);  cvSaveImage(name_l, img0);  cvSaveImage(name_r, img1);  }  }   cvReleaseCapture(&cap_left);    cvReleaseCapture(&cap_right);    cvDestroyWindow("camera_left");    cvDestroyWindow("camera_right");    return 0;
} 

将下载好的标定工具箱插件放到MATLAB目录下,这里本人是放置toolboox这个文件夹下,然后打开MATLAB点击File->Set Path->Add Floder添加插件目录,在save一下

将当前文件夹设置成待标定图片的文件夹,我这里是在桌面新建一个文件夹放置图片,所以Current Folder设置如下

MATLAB命令行窗口输入calib_gui,弹出工具框

选择第一个Standard,弹出如下界面Camera Calibration Toolbox(以下简称标定界面)

现在开始左摄像头标定,选择第一个Images names后,MATLAB命令行窗口会提示你输入图片的basename以及各格式,这里图片保存的文件名如第二张图左侧所示为left01,left02,所以提示的basename行写left,按Enter键提示输入图片格式,这里为jpg,在按回车键读入做摄像头的棋盘图这里读入的图片就不显示了。

然后点击标定界面上的Extract grid corners,MATLAB命令界面显示然后一路回车键下去最后如下

最后会跳出第一幅图棋盘图,然后按顺时针或逆时针旋转棋盘格最外面的四个角点
选好角点后命令界面会提示要你输入棋盘方格的实际边长,这里网上图片的是30X30,单位mm
回车键后会显示角点检测结果图
继续命令行窗口回车键下去,弹出第二张棋盘图(同时也会弹出Figure3图片有着蓝色边框包围的角点图,这里不作显示),选择四个外围角点,如此反复下去检测完13张棋盘图。
PS:这里插一段,这一段只是为了演示步骤不是必须的
在上述进行角点检测时有时会出现检测的角点与棋盘纸角点不是很接近,这里我选择了将其中一张图最大化窗口便于看到角点的偏差,事实上最小化窗口时这种偏差看不出来,而且偏差也是可以容忍的,以下是偏差图
如上图所示(如最外围角点),其实个人觉得这样已经可以了毕竟我是放大看的,好了不废话继续。其实在之前检测完前一张图片,准备敲回车键进行下一张检测时,如果对上一张不满意正如上图所示,我们可以在命令行窗口看到这样一句话“Need of an initial guess for distortion? ([]=no, other=yes)”这里输入1,会提示你输入一个校正系数kc
如上所示,这里填的是-0.3,注意,kc的范围是-1~1。输入数值之后回车显示校正后的角点检测
如果觉得行了,在命令行窗口语句“Satisfied with distortion? ([]=no, other=yes)”后面输入1再回车进行下一张图角点检测,如果觉得不行那么在语句后面直接回车重新输入一个kc值。
检测完成后点击标定界面Calibration进行摄像头标定,命令行窗口结果如下
标定结束后可以通过标定界面按钮进行可视化的观察,这里主要说下误差图的查看,点击Analyse error
发现绿色的点误差不理想,此时可以鼠标点击其中绿色点,命令行窗口会显示如下信息
由上可知是第三幅图,如果想看第三幅的整体误差,可以点击标定界面的Reproject on images,在命令行输入3即可。
PS:这里也再插一段
接着上面所述绿色点误差较大,X和Y方向的标注差为0.52529和0.22933,此时我们可以重新计算角点,方法是点击Recomp.corners,命令行窗口会提示你输入窗口的大小语句“wintx ([] = 5) = ”还记得之前角点检测一路回车下去的步骤吗?其实那么也有这个语句不过我们回车选了默认值5,这里我们可以输入一个更大或更小的值,比如我输入9
输入两次数字9后,一直回车,然后在点击Calibration重新进行摄像头标定,结果如下
与前面相比error小了,误差也小了结果图了如下所示
PS:Recomp.corners重新计算这一步之前在一篇博文看说这一步骤并不推荐,具体原因忘了,所以在选择角点时尽量靠近,省的误差较大,这一步能不用就不用吧。
左摄像头标定结果出来后,点击Save,这时结果文件默认保存在之前放置标定图片的新建文件夹下面,默认文件名为Calib_Results.m,将其改为Calib_Results_left.mat(双目标定用到)。至此左摄像头标定结束,右摄像头标定过程与左一样,只是将Basename改为right,格式仍为jpg,然后回车回车,最后保存为Calib_Results_right.mat。
下面开始双目立体标定。
命令行输入stereo_gui,弹出立体标定界面,选择第一个Load
如果之前左右摄像头结果你是按照之前的文件名保存的,那么直接在命令行以下两行后面两次回车,否则就在后面输入你保存的文件名,注意下这里加载文件时如果出错了,那么直接重新点击Load就行了。
此时已经出现一个双目标定结果,不管在点击立体标定界面的Run,最后标定结果如下,?为正负号
至此双目标定结束,下面就是讲结果写成xml文件供Opencv调用了。xml文件生成方法:先建一个txt文档,将下面语句复制进去
Intrinsics_Camera_Left.xml:
<?xml version="1.0"?>
<opencv_storage>
<Intrinsics_Camera_Left type_id="opencv-matrix">  <rows>3</rows>  <cols>3</cols>  <dt>d</dt>  <data>  534.02373   0.         341.01149   0.          533.86709   233.26555   0.          0.         1.
</data>
</Intrinsics_Camera_Left>
</opencv_storage>

Distortion_Camera_Left.xml:

<?xml version="1.0"?>
<opencv_storage>
<Distortion type_id="opencv-matrix">  <rows>5</rows>  <cols>1</cols>  <dt>d</dt>  <data>  -0.28668   0.10398   0.00171   -0.00063  0.00000
</data>
</Distortion>
</opencv_storage>   

Intrinsics_Camera_Right.xml:

<?xml version="1.0"?>
<opencv_storage>
<Intrinsics_Camera_Right type_id="opencv-matrix">  <rows>3</rows>  <cols>3</cols>  <dt>d</dt>  <data>  537.82796   0.          321.73805   0.          537.87268   249.47070   0.          0.          1.  </data>
</Intrinsics_Camera_Right>
</opencv_storage> 

Distortion_Camera_Right.xml:

<?xml version="1.0"?>
<opencv_storage>
<Distortion type_id="opencv-matrix">  <rows>5</rows>  <cols>1</cols>  <dt>d</dt>  <data>  -0.29416   0.13839   -0.00009   0.00061  0.00000
</data>
</Distortion>
</opencv_storage>   

RotRodrigues.xml:

<?xml version="1.0"?>
<opencv_storage>
<RotRodrigues type_id="opencv-matrix">  <rows>3</rows>  <cols>1</cols>  <dt>d</dt>  <data>  0.00918   0.01162  -0.00369
</data>
</RotRodrigues>
</opencv_storage> 

Translation.xml:

<?xml version="1.0"?>
<opencv_storage>
<Translation type_id="opencv-matrix">  <rows>3</rows>  <cols>1</cols>  <dt>d</dt>  <data>  -83.09797   0.95964  1.09394
</data>
</Translation>
</opencv_storage> 

将上述语句复制到txt中,然后直接修改后缀为xml即可,以上数值都是MATLAB立体标定结果内容,自己复制后只需将数字对应改成自己的标定结果就行。

MATLAB双目标定步骤相关推荐

  1. opencv读取MATLAB双目标定的结果进行双目校正

    概述: opencv内部也有双目标定的函数,但是结果有时候会飘,所以想先用MATLAB标定工具箱试试看.使用MATLAB先队两个相机进行单目标定,然后进行双目标定,将结果保存在xml文件中.xml文件 ...

  2. matlab 双目标定及参数说明

    一 标定步骤 1. 调用标定app 2. 勾选相应的选项 一般选择3个径向畸变和2个切向畸变 3. 载入双目图片 点击add images,出现如下界面,自己选择图片的路径和棋盘格的单位长度,然后点击 ...

  3. 基本矩阵 双目 matlab,MATLAB双目标定与OpenCV计算矫正参数矩阵

    Intrinsic parameters of left camera: Focal Length: fc_left = [ 320.53138 321.62046 ] ?[ 1.32444 1.28 ...

  4. Matlab双目相机标定

    1 概述 现在有许多双目相机在出厂时就已经标定好了,用户拿到手后可以直接使用,例如Intel Realsense系列.但是有些相机出厂的时候并没有完成标定工作,因而这个时候就需要我们自己来标定.由于笔 ...

  5. 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python

    双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 目录 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 1.项目结构 2. Environment 3.双 ...

  6. OpenCV | 双目相机标定之OpenCV获取左右相机图像+MATLAB单目标定+双目标定

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 原本网上可以搜到很多关于双目相机标 ...

  7. matlab双目相机标定校正_基于双目视觉的无人机避障算法(一)

    讲述在10月到12月所做的所有工作 对于一个无人机自主避障来说,存在着以下流程: 感知:障碍物检测.行人检测.目标检测 SLAM:为无人机提供位置估计,构建稀疏环境地图 路径规划:规划一条从当前位置到 ...

  8. 双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,)

    二郎也比较忙,在某大场工作,有时候没有时间回复. 如果希望二郎尽快帮忙,可以将代码,数据和问题发给二郎,谢谢大家理解. glwang20@mails.jlu.edu.cn 不过还是希望大家自己要好好研 ...

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

    一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...

  10. 研电赛项目之双目测距,涉及matlab相机标定,opencv多线程编程,摄像头读取,行人检测、BM立体匹配等等

    1 前言 今年参加了十五届研电赛,前天刚提交了作品,还有几天就答辩了,趁这几天总结一下这一个多月的收获. 本次研电赛作品为汽车行驶防碰撞系统,主要面向大型汽车在低速行驶场景下的防碰撞问题,通过双目相机 ...

最新文章

  1. mysql与ms sql server_MS SQL Server和MySQL区别
  2. 线下生意再次“受宠”:大数据给你添点料
  3. SPHINX 文档写作工具安装简要指南 - windows 版 - 基于python
  4. session机制详解以及session的相关应用
  5. keras 多GPU训练,单GPU权重保存和预测
  6. WIN7清理C盘空间垃圾的BAT脚本
  7. 交换机常用配置命令(华为)
  8. 自举电路工作原理分析
  9. C语言——顺序结构训练题
  10. va start linux头文件,va_start/va_end函数-linux
  11. 00 SQL课程简介
  12. 学习使用jQuery中的on() 方法
  13. 【风马一族_php】NO5_php基础知识_数组
  14. Python装逼指南——五行代码实现批量抠图!
  15. Python中range函数的用法
  16. android异常相机处理,android 调用系统相机拍照的各种异常处理
  17. CentOS7 export命令
  18. 树上倍增法求最近公共祖先LCA
  19. 企业做了ISO9001管理体系认证,还需要再做售后服务认证吗?
  20. Python反爬,JS反爬串讲,从MAOX眼X开始,本文优先解决反爬参数 signKey

热门文章

  1. python 爬虫学习之 selenium.webdriver学习
  2. 云计算基础1-云计算时代的发展-天翼云电脑
  3. 当我在做技术管理时,我在做什么?
  4. [CF1528F]AmShZ Farm
  5. Python爬取链家租房信息
  6. 掌财社寒山:俄罗斯银行将在年底前推出数字卢布原型
  7. 如何安装M26F1 5G路由器
  8. 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
  9. cherry pick用法
  10. win10支持8t 硬盘_教你如何解决win10系统识别不了移动硬盘?