[双目视差] 单双目MATLAB 相机标定(一)单目摄像机标定
单双目MATLAB 相机标定(一)单目摄像机标定
一、环境准备
MATLAB R2014a+windows7 64位
二、标定过程
(1)首先把解压的TOOLBOX_calib文件夹的路径设置到MATLAB里,在主页->环境->设置路径->选择工具箱路径,如图:
选择保存后关闭
(2)此时,将你采集到的图片放到工具箱以外的文件夹中,在MATLAB中打开,如图:
注意上面的路径,必须选择图像所在的文件夹,不然下一步会出现错误“No image in this directory in either ras, bmp, tif, pgm, ppm or jpg format. Change directory and try again.”跟这有关。
(3)回到MATLAB界面,输入命令,calib_gui 如图所示:
选择standard,出现如下窗口,如图所示:
(4)点击Image name,出现
此时提示你输入Basename,Basename就是你的所有图片的名字中相同的部分,
例如我的图片Basename就是image2_,然后按照要求输入图片格式,例如我的图片是JPG格式就输入“j”回车,图片就读入到了MATLAB里,出现所有图片的缩略图,如图所示:
(5)点击Extract grid corners,提取每幅图的角点,点击完成后出现如下界面:
直接回车(没有参数)选择所有的图像,否则就需要输入图像索引如[2 5 8 10 12]来提取这些图像中的角点。然后通过直接输入“Enter”来选择默认的角点寻找窗口尺寸:wintx=winty=5。这就产生了一个11X11个像素有效的窗口尺寸,角点提取引擎有一个对网格中的方格个数进行计数的自动机制。这个工具尤其对于图像数量大的时候非常便利,因为用户不需要手工地输入X和Y方向方格的数量。所以也可以直接回车(没有参数),然后第一张标定图像就会显示出来,如图所示:
(6)点击长方形棋盘格的四个边角点。选择的位置在下图中显示出来(注意:尽量精确地点击这四个角点,控制在实际角点的5个像素范围内,否则一些角点可能会被检测器丢失掉)。
点击的顺序规则:第一个点被用来作为棋盘格坐标系的原点。其他三个点可以以任何顺序点击。第一个点击的的点非常重要,尤其是对于多相机的情况(例如当计算几个相机在空间之间的相互关系的时候)。当处理多相机系统时对于不同的相机标定图像需要总是选择同一个棋盘格坐标系。
(7)经过上面的步骤之后,标定棋盘的边界就显示出来了:输入网格中每个方格在X和Y方向上的尺寸dX和dY(在这里,dX=dY=30mm=defaultvalues)(要根据自己的棋盘做调整),例如我的棋盘设置为28mm的正方形。程序会自动对各个方向的方格数进行计数,然后在显示出没有畸变的预估角点,如图所示:
角点以大约0.1个像素的精度被提取出来。对第2、3、4…图像采用上述同样的步骤。
(8)在角点提取完之后,就可以单击标定工具箱面板上的“Calibration”来运行主要的相机标定程序。标定主要通过两个步骤来完成:初次初始化以及非线性优化。
初始化步骤中对标定参数进行闭环计算,这个过程不包括任何镜头畸变(程序名:init_calib_param.m)
非线性优化过程中将对所有的标定参数最小化总体映射误差(从最小二乘的角度出发)(9个内参以及6X20=129个外参)。优化是对特定雅可比矩阵进行计算然后往梯度下降的方向进行的。下图为非线性优化的结果:
从上图中我们可以注意到:为了达到最小值,只用了15次梯度迭代。这就意味着只有15次对映射函数、雅可比计算
以及求逆的评估。快速收敛的一个原因就是初始化程序所要计算的参数的有一个好的初始预估值。
现在,忽略推荐的可以减少畸变的模型的系统。对一个模型的复杂性进行判断的映射误差仍然很大。这主要是因为
对于一些图像一些网格角点并没有被精确地提取。
(9)单击面板上的“Reproject on images”来将网格角点映射到原始图像中。这些映射是基于当前的内参和外参计算
出来的。输入一个空字符(直接按"Enter")作为“Number(s) of image(s) to show([]=all images)”来
表示你想查看所有图像,下面的图像显示了最初的四张检测到的角点的图像(叉)以及映射的网格角点(圆)。
映射误差也以有颜色的叉叉显示在图中:
(10)在面板中单击“ShowExtrinsic”。外参(棋盘格相对于相机的相对位置)就以3D的形式显示出来了:
(11)工具“Analyseerror”允许你去检查哪个点对应大的误差。单击“Analyse error”并且选择图像由上角的那个点。
单击选中之后,下面的信息就会出现在命令行窗口:这就意味着对应的点在第9张图像中,在标定板网格坐标的(3,4)的位置。
(12)单击“Save”保存标定结果(内参和外参)到matlab文件“Calib_Results.mat”
注意:在进行第二次标定时要将保存好的matlab文件更名:如“Calib_Results.mat” —> “Calib_Results_left.mat",否则会遇到无法保存matlab文件。
[双目视差] 单双目MATLAB 相机标定(一)单目摄像机标定的更多相关文章
- 机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定
本文CameraCalibrator类源代码来自于OpenCV2 计算机视觉编程手册(Robert Laganiere 著 张静 译) 强烈建议阅读机器视觉学习笔记(4)--单目摄像机标定参数说明之后 ...
- opencv单目摄像机标定(二)
// 引入实际标定板方格宽度的标定程序 #include <string> #include <iostream> #include <cv.h> #include ...
- opencv单目摄像机标定(一)
#include <string> #include <iostream> #include <cv.h> #include <highgui.h> u ...
- opencv单目摄像机标定
#include <cv.h> #include <highgui.h> #include <iostream> #include <stdio.h> ...
- 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)
相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...
- C#下的摄像机标定
前言:计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决 ...
- 利用matlab摄像机标定
(1)输入图像 "Image names"键 Matlab的图形窗口显示出20幅靶标图像 (2) 提取角点 "Extract grid corners"键. 输 ...
- SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解
想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...
- Matlab 摄像机标定+畸变校正
博客转载自:http://blog.csdn.net/Loser__Wang/article/details/51811347 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行 ...
- [zt]摄像机标定(Camera calibration)笔记
http://www.cnblogs.com/mfryf/archive/2012/03/31/2426324.html 一 作用建立3D到2D的映射关系,一旦标定后,对于一个摄像机内部参数K(光心焦 ...
随机推荐
- Nginx常用经典配置|反向代理、HTTPS重定向、端口转发
二级目录映射 目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口. 如前端是https://example.com/index.html,调用的接口是https://example.co ...
- arp 基本功能
地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要.ARP最初在1982年的R ...
- WIn环境基于vs编辑器,Qt应用申请管理员权限的解决方法(转载)
原文章地址:https://blog.csdn.net/weixin_38416696/article/details/103879377 基本按照那个文章的操作.基本可以了. 唯一问题就是那个vs的 ...
- 【Leetcode】 剑指offer:栈与队列 --Day01
写在前面 2023届秋招形势严峻,作为2024届本科生倍感压力.时间紧迫,需要加快脚步. 计划之一是在未来的36天时间里通关Leetcode的剑指offer系列算法题.这一系列的学习周期为31天,也就 ...
- 使用redis分布式锁重复执行采坑
事件:生产环境部署两台,每天凌晨1点,定时任务同步更新(先删除,后全部插入)账号表,使用了redis分布式锁,发现定时任务还是执行了两次,导致数据重复,影响对应业务. 原因分析:定时任务执行的逻辑是调 ...
- iText5实现Java生成PDF
参考代码:https://github.com/youcong1996/study_simple_demo 参考博客:https://blog.csdn.net/weixin_37848710/art ...
- 声网 MetaKTV 技术揭秘之“声临其境”:3D 空间音效+空气衰减+人声模糊
声网近期发布了"MetaChat 元语聊"."MetaKTV"解决方案,致力于提供一种全新的元宇宙互动社交.K 歌方式,其中都提到了"3D 空间音频& ...
- 第一章 1.1.1节 Kubeadm安装K8S高可用集群
1.1 安装前必读 请不要使用带中文的服务器和克隆的虚拟机. 生产环境建议使用二进制的方式安装. 文档中的IP地址要更换成自己的IP地址,要谨记!!! 1.2 基本环境配置 kubeadm安装方式自1 ...
- 深入了解 JavaScript 内存泄漏
作者:京东零售 谢天 在任何语言开发的过程中,对于内存的管理都非常重要,JavaScript 也不例外. 然而在前端浏览器中,用户一般不会在一个页面停留很久,即使有一点内存泄漏,重新加载页面内存也会跟 ...
- JS逆向实战12——某店 captchaToken 参数 加密
今天爬取的是网站需要模拟登陆 目标网站 aHR0cHM6Ly9wYXNzcG9ydC55aGQuY29tL3Bhc3Nwb3J0L2xvZ2luX2lucHV0LmRv 浏览器抓包分析 随便输入一堆假 ...