使用MALTAB标定实践记录
记录一下整个相机的标定矫正过程,希望能够帮助到刚学习标定的童鞋们~
首先下载matlab calibration toolbox,百度搜索第一条就是了(http://www.vision.caltech.edu/bouguetj/calib_doc/)。下载到本地后,需要在MATLAB中更改主路径:
Set Path->Add with Subfolders->选定你刚下载的toolbox所在目录。
在command Window中敲calib加载图像,此时会弹出一个框框。注意你的Current Folder是标定图像所在的目录。
选择Standard(all the images are stored in memory)->Read images.
command 窗口中会显示当前目录下的所有文件,并要求你输入要矫正的相机图像的basename.我一般对需要矫正的图像会这样命名,方便后期的操作:左图(left_%d.jpg)右图(right_%d.jpg)。而这里要求的basename则是前缀中除开数字的部分,以矫正左图为例,那么就是输入left_
接下来会问你图像格式,注意这里能够接受的图像格式有(ras,bmp,tif,pgm,jpg,ppm),你根据你图像的实际格式输入,我这边是jpg格式。
回到那个toolbox中,选择Extract grid corners,提取角点。
它会问你是否处理所有图像,这个根据你自己的需求设定,默认是全部。包括后面会问到选择的框框的大小,默认值是长宽个15个像素。一般我是用默认值,但是注意一点就是如果你在扣角点的过程中框框已经太大将其他角点也包含进来,那么你就可以适当的调整这个框框的尺寸。所有的图像按照一定的方向(我习惯是顺时针)扣四个角点。如图中绿色圈圈的位置。第一张图会问你关于棋格的尺寸,你根据你的实际情况来填就好,我这里是100mm。
所有的图像都抠完角点后,选择Calibration,进行标定,如果标定参数正常,则保存下来。因为我会标定左右摄像头得到的图像,因此后面还需要进行双目标定。因此这里得到标定的参数文件后我会先改它的命名,为了后面双目标定做准备。
提醒一点。在标定完左相机需要标定右相机的时候,先clear all 一下,再重新开始。
双目标定:
clear all 后,输入 stereo_gui->Load left and right calibration files->Run stereo calibration->Save stereo calib results
双目标定便结束了。
标定后我们就得到了左右摄像机的内外参数。Focal Length是焦距,我们一般在立体视觉中基于左图来计算,故需要的fx fy就是左摄像机的Focal Length参数。Principal point是主点,常用cu,cv表示。Skew这里指的是图像中U轴和V轴的夹角与90°的差值,一般来说数值是接近于0的。Distortion则是畸变参数。在立体匹配中我们常常看见的一个baseline参数,就在这里Translation vector中的x值。获取了相机内外参数后,我们需要对这对相机获取的图像进行矫正。具体的矫正程序放在github上了有兴趣的可以下载来看看。将刚刚标定得到的参数放上去运行就能得到矫正后的图像了。
https://github.com/RebeccaTsang/Rectify
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
分割线
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在实践过程中遇到了一些问题,也借这个机会在这里做一下笔记。
用MATLAB读取图像的时候,对图像的命名要求比较高,建议像我这样命名即(basename+id.jpg)比较方便。可问题是我们得到数据时命名往往不是按照我们想的那样命名,这时候就需要批量命名。在Windows下和Ubuntu下的方法各异,我是在Ubuntu下做的实践,那我介绍一下Ubuntu下的批量命名方式吧。
这里我就不讲具体的原理和语法,百度Ubuntu 批量重命名/批量改后缀名 都介绍了很多方法和语法在里面。我这里只讲我是怎么做的。
最开始我得到的图像命名是这样的,首先我要改图像的后缀名,注意的是png格式是可以改成jpg格式的,而jpg格式不能直接改为png格式。
在该目录下打开终端:
mogrify -format jpg *.png rm *.png
上面两步的意思是将所有png格式的图像生成一个jpg格式的,再把所有png图像删掉。
rename -n 's/^/left_/' *l.jpg
rename -f 's/^/left_/' *l.jpg
rename -n 's/_l//' *l.jpg
rename -f 's/_l//' *l.jpg
这里-n是显示你即将要重命名的文件以及重命名后的结果,但是仅仅是显示,而非真正的改动。-f则是真正的执行重命名的命令。
头两句的意思是指在文件名最前面,“^"指的是最前面,添加left_。这样我们得到的命名是left_xxxx_l.jpg。
后面的_l是我们不需要的,则需要后面的两句话执行,将命名中的”_l"替换为空。
值得注意的是这里的1,3句我们是仅用作显示,看看这个结果是不是我们想要的,不打也可以。最后结果为:
注意到尽管现在的命名格式已经符合规范,但是数字编号不是按顺序的,就需要对这个数字进行重新编号。
新建一个文档,命名为ren.sh。内容为一下这段代码,可以将所有right_xxxx.jpg的文件重新从0开始编号。同理,这是针对右图的,左图的话更改right为left就可以了。
#!/bin/bash
j=;
for i in `seq -f "right_%04g.jpg" `;
do
#echo $i
if [ -f $i ];
then
echo $i "exist";
mv $i right_$j.jpg
let j+=;
fi done
在相应目录下打开终端,执行
./ren.sh
便得到以下结果:
使用MALTAB标定实践记录的更多相关文章
- Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock
在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题
按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...
- Ionic3项目实践记录
Ionic3首次项目实践记录 标签(空格分隔): Angular Ionic Ionic3踩坑 1. 路由懒加载(lazy load) 如果设置了懒加载,就必须全部懒加载(包括TabsPage),否则 ...
- k8s1.4.3安装实践记录(2)-k8s安装
前面一篇已经安装好了ETCD.docker与flannel(k8s1.4.3安装实践记录(1)),现在可以开始安装k8s了 1.K8S 目前centos yum上的kubernetes还是1.2.0, ...
- ElasticSearch5.0+版本分词热更新实践记录
前言 刚开始接触ElasticSearch的时候,版本才是2.3.4,短短的时间,现在都更新到5.0+版本了.分词和head插件好像用法也不一样了,本博客记录如何配置Elasticsearch的Hea ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比
上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...
- 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果
上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...
随机推荐
- css的基础知识1
总结:css引用:1内联:在标签中加style属性,<标签名 style="样式1:样式值1:样式2:样式值2"> </标签名>.2.内嵌:在head标签中 ...
- 【原创】使用JS封装的一个小型游戏引擎及源码分享
1 /** * @description: 引擎的设计与实现 * @user: xiugang * @time: 2018/10/01 */ /* * V1.0: 引擎实现的基本模块思路 * 1.创建 ...
- 史上最详细的CentOS 7 安装 HBase教程
1. 前半部分参考 https://www.cnblogs.com/ivictor/p/5906433.html 2.问题 namenode无法启动,参考 https://stackoverflow. ...
- Centos下安装mysql(二进制版)
1.下载安装包,选择相应的平台.版本,比如,选择64位Linux平台下的MySQL二进制包“Linux-Generic (glibc 2.5)(x86,64-bit),Compressed” 如:#w ...
- 【模板】Link-Cut Tree
#include<cstdio> #include<algorithm> #define N 500010 #define rg register #define ls (c[ ...
- 【codeforces 761E】Dasha and Puzzle
[题目链接]:http://codeforces.com/contest/761/problem/E [题意] 给你一棵树,让你在平面上选定n个坐标; 使得这棵树的连接关系以二维坐标的形式展现出来; ...
- 【codeforces 792D】Paths in a Complete Binary Tree
[题目链接]:http://codeforces.com/contest/792/problem/D [题意] 给你一棵满二叉树; 给你初始节点; 给你若干个往上走,左走,右走操作; 让你输出一系列操 ...
- Android欢迎页面以及引导页面
开发环境:Windows 10 x64,Android Studio 3.0 很多APP都会在启动主界面(MainActivity)之前显示一个短暂的欢迎页面,设置微博,知乎,百度之类APP还是在欢迎 ...
- FORTIFY_SOURCE
In recent years Linux distributions started treating security more seriously. Out of many security f ...
- 64位CentOS6.5下Eclipse用Java连接mysql
1.到官网上下载jdbc驱动,我下载的是mysql-connector-java-5.0.8.tar.gz 2.解压下载到的文件 tar -zxvf mysql-connector-java-5.0. ...