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

讲述在10月到12月所做的所有工作

对于一个无人机自主避障来说,存在着以下流程:

  1. 感知:障碍物检测、行人检测、目标检测

  2. SLAM:为无人机提供位置估计,构建稀疏环境地图

  3. 路径规划:规划一条从当前位置到目标位置的移动轨迹

  4. 控制:控制无人机速度,加速度,追随规划出来的轨迹

我先做出了障碍物检测部分:

Opencv/MATLAB做双目测距(相机标定+立体匹配+测距)

双目测距实际操作分4个步骤:相机标定——双目校正——双目匹配——计算深度信息。

01

相机标定+双目校正

首先是对摄像头做标定


Q1:为什么要做相机标定?

标定的目的是为了消除畸变以及得到内外参数矩阵,内参数矩阵可以理解为焦距相关,它是一个从平面到像素的转换,焦距不变它就不变,所以确定以后就可以重复使用,而外参数矩阵反映的是摄像机坐标系与世界坐标系的转换,至于畸变参数,一般也包含在内参数矩阵中。从作用上来看,内参数矩阵是为了得到镜头的信息,并消除畸变,使得到的图像更为准确,外参数矩阵是为了得到相机相对于世界坐标的联系,是为了最终的测距。

无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。

https://blog.csdn.net/baidu_38172402/article/details/81949447

CSDN

https://www.zhihu.com/question/29448299/answer/102658379

知乎 陈明猷 ​

先完成单目标定,再完成双目标定。选择标定方法的时候,选用张正友标定法,因为MATLAB用的也是张正友标定法做的,误差最小。

双目标定,必须是拿自己打印的棋盘格摆拍的,且记下棋盘距离自己的距离,以衡量你标定和匹配的误差是否在合适的范围之内。

先固定好左右相机,拿棋盘标定图摆拍并保存,左右相机各15张(我做的时候在30张图中选用15张图进行opencv标定的时候误差最小,但是在MATLAB中就不用考虑这个问题)

------相机标定的代码网上很多,一步一步来即可---------

简单来说就是:OpenCV使用黑白棋盘格来标定摄像机,调用findChessboardCorners()获得棋盘格角点的像素坐标,再调用cornerSubpix获得棋盘格角点的亚像素坐标。调用drawChessboardCorners()函数绘制出检测到的棋盘角点,然后使用stereoCalibrate()函数完成双目标定。

标定之后进行校正:在OpenCV中可通过stereoRectify()函数完成校正功能,摄像机矩阵,畸变向量,左右旋转矩阵R和平移向量T。输出参数为左右投影矩阵P,以及重投影矩阵Q。可调用函数InitUndistortRectifyMap()生成图像校正所需的映射矩阵。

标定结束后最终得到的yml文件,就是双目标定的参数矩阵,之后使用它就可以得到校正后的图像啦。MATLAB里面有双目标定工具箱很方便,且误差很小。


Q2:你得到的参数和误差有什么合格判据吗?误差在哪个区间内能用?你怎么确定你得到的参数能用?你有跟别人做的对比过吗?

单目标定的误差 看平均重投影误差,越小越好。

双目标定看对极线误差,越小越好,这个关系着后面立体匹配的效果。

在工业生产中,对于双目相机标定, 需要一个稳定可靠的方法确定标定的质量,以帮助判断标定结果,确定是否需要重新标定。现有双目标定的精确度评价研究较少,而且具有明显的局限性,无法应用于工业环境。现有一种方法可以确定标定质量的方法,可在最新资源中查看。


02

双目匹配

原理:

通过对两幅图像视差的计算,直接对前方景物(图像所拍摄到的范围)进行距离测量,而无需判断前方出现的是什么类型的障碍物。所以对于任何类型的障碍物,都能根据距离信息的变化,进行必要的预警或制动。双目摄像头的原理与人眼相似。人眼能够感知物体的远近,是由于两只眼睛对同一个物体呈现的图像存在差异,也称“视差”。物体距离越远,视差越小;反之,视差越大。视差的大小对应着物体与眼睛之间距离的远近,这也是3D电影能够使人有立体层次感知的原因。

229f4e13408b8bbff6baedc68a7efa53.png

双目匹配被普遍认为是立体视觉中最困难也是最关键的问题。得到视差数据,通过上述原理中的公式就可以很容易的计算出深度信息

OpenCV中提供了两种立体匹配算法SGBM算法和BM快匹配算法,其中SGBM算法准确性较高,但是运算速度慢。BM算法准确性稍差但运算速度快,可满足实时应用需求。BM算法在OpenCV中通过函数StereoBM()实现。

接下来就是用基于深度学习的立体匹配算法,让精度更高,潜力更高的GA-Net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机无法播放,如果无法播放计算机mp4文件怎么办?

FireStar365接受1. 下载并安装最新版本的视频播放器(例如: Storm Video).2. 在硬盘中找到MP4视频文件.3. 右键单击该文件,然后选择打开方法“ Storm Video”.4. 可以双击打开页面.zxc942128835将mp4链接到计算机,打开磁盘,单击菜单栏上的工具…

thrift介绍及应用(二)—简单应用

原文:http://blog.csdn.net/guxch/article/details/12162131 ----------------------------------------------------------------------------------- 【接上文“thrift介绍及应用(一)—介绍”】 六、一个最简单的实例 Thrift文件&#xf…

打游戏的教育意义

夜色已深,一个男孩子还在打游戏。门忽然开了,妈妈走了进来,她把一碗阳春面摆在桌子上。说:"歇息一会儿,趁热把这碗面吃了吧。"孩子嗯了一声,眼睛没有离开屏幕。妈妈生怕打搅孩子,悄悄…

标准评分卡分数计算原理_评分卡的形式、刻度及应用场景

 看到有伙伴提问:①我们的评分卡做好后,后续的使用策略是什么呀,都有哪些方向? ②评分卡分数切割点如何定,制定的业务逻辑是什么?其实,这个问题不好回答,也好回答。一方…

hexeditor 复制二进制值_MySQL复制全解析 Part 6 MySQL GTID 生命周期

实验环境此次实验的环境如下MySQL 5.7.25Redhat 6.10操作系统账号:mysql数据库复制账号:repl复制格式:基于行的复制通过前面的介绍我们知道MySQL的复制有两种方法基于二进制日志文件位置基于GTID上一节的内容为GTID的格式和存储,这节根据官方文档我们说GTID的生命周…

自动ip的计算机共享打印,局域网内自动获取ip地址怎么设置打印机共享文件夹...

在局域网环境中,为了尽可能地节省办公成本,很多用户都会选择在局域网中架设、部署共享打印机,以便在单位的任何角落处都能方便、自如地进行打印操作。下面是学习啦小编为大家整理的关于局域网内自动获取ip地址怎么设置打印机共享文件夹,一起来看看吧!局域网内自动获…

高级数据分析1代码_用Python进行数据分析,让你一看就会

本书详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。虽然本书的标题是“数据分析”,重点却是Python编程、库,以及用于数据分析的工具。第1章 准备工作第2章 Python语法基础,IPython和Jupyter Notebooks第3章 …

工期日历天计算器_天津实地告诉你:房建项目是怎样保节点,抢工期的?

工程概况天津实地蔷薇花园住宅地块项目共计由24栋单体住宅、2栋配建及地下人防车库组成,其中12层小高层4栋、13层小高层1栋、19栋7层洋房。总建建筑面积为139348.62㎡,地上99348㎡,地下40000㎡,人防面积为14236㎡。工期目标项目施…

测试fps游戏反应速度软件,FPS反应速度提速

静谧无声,生死一瞬,说的就是FPS游戏,没有哪一个种类的游戏可以比拟我们FPS玩家对于反应速度的追求,更快更准哪怕提速只是1毫秒,无数高手之所以为高手就是因为他们可以打出我们看起来不可能完成的击杀,特别是…

html5中单选框被选中把值传给后台_HTML5的表单设计

使用过Delphi的程序员,对Form这个词应该比较熟悉。在Delphi中,Form被翻译为“界面、窗口”,作用是:为用户提供界面,供用户输入信息,向用户展示处理结果。HTML5中也有Form,功能与Delphi中的Form差…

python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat maps显示数字表格数据,其中单元格根据…

Hive的系统架构

一、架构图 二、各组件 用户接口:包括 CLI(控制台命令),JDBC/ODBC,WebUI。 CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive --…

坐标不显示_Simpack不显示坐标轴方向的解决方法

经常有用户咨询Simpack软件打开模型时,不能显示坐标轴的x、y、z方向,这个问题对建模有很大的影响。本文是兰州交通大学陈龙同学提供的解决方法,供大家参考。使用Simpack软件建模时,会遇到这种情况:比如要创建标记点时&…

th:text为null报错_为vue3.0的学习TS解读高级类型

知识点摘要本节课主要关键词为: 自动类型推断 / 类型断言 / 类型别名(type) / 映射类型(Pick/Record等...) / 条件类型(extends) / 类型推断(infer)自动类型推断(不用你标类型了,ts自己猜)大家现在写ts的时候一定会在每个变量后面都加上类型吧? 但是?现在告诉大家有些情况下你…

Hive与Hadoop的调用关系

一、调用图 二、步骤解析 1、提交sql 交给驱动 2、驱动编译:解析相关的字段表信息 3、去metastore查询相关的信息 返回字段表信息 4、编译返回信息 发给驱动 5、驱动发送一个执行计划 交给执行引擎 6、执行计划 6.1、DDLs 对数据库表的操作的 直接和metastore交互 …

简述计算机文件的命名办法,如何进行文件命名-如何进行文件管理

如何进行文件命名-如何进行文件管理电脑的管理事实上就是文件和文件夹的管理。想要我们的电脑干净整齐,就需要我们正确的进行文件管理。我们知道了文件和文件夹的概念之后,现在我们再来看看单独的文件,认识一下文件的构成以及文件命名和命名规…

网页加载出现没有合适的负载均衡器_分布式必知必会-七层负载和四层负载到底是什么?...

背景我们在使用负载均衡器的时候,往往会听到七层负载或四层负载这两个名词,许多负载均衡软件提供的方式也不同,那么七层和四层区别在哪呢?为什么有的支持有的不支持呢?负载均衡简介负载均衡建立在现有网络结构之上&…

博弈论 斯坦福game theory stanford week 3.2_

title: 博弈论 斯坦福game theory stanford week 3-1 tags: note notebook: 6- 英文课程-15-game theory --- 博弈论 斯坦福game theory stanford week 3-1 习题 第 1 个问题 We say that a game is dominance solvable, if iterative deletion of strictly dominated strategi…

nestjs swagger文档调用需要鉴权的接口

目标 nestjs经常需要设置一些鉴权(登录后)才能访问的接口,但是生成的swagger文档可以发起接口请求,文档发起的请求默认是不携带登录token的,所以需要移除swagger文档发起请求的守卫拦截。 nestjs守卫拦截设置见另一篇…

ajax预加载html seo,前端性能优化 — JS预加载和懒加载

JS预加载需求:有时我们需要实现例如快速快速切换页面、图片之类的功能时,能尽快的加载出我们所需的图片会极大提升用户体验,这时用预加载将图片先缓存到浏览器,用户使用需显示图片时无疑会顺畅很多。核心:当一个图片在…