基于yolov5的单目测距实现与总结+相机模型+标定

news2024/11/13 9:13:00

写这篇文章的目的是为了总结我之前看的标定,相机模型以及单目测距的内容,如果有错误,还请不吝赐教。
参考链接:
相机模型、相机标定及基于yolov5的单目测距实现
深度学习目标检测目标追踪单目测距
单目测距+代码部署(目标检测+车辆/行人等测距)
单镜头视觉系统检测车辆的测距方法
相机模型与视觉测距不完全指南
单目测距(yolo目标检测+标定+测距代码)
老规矩先上参考链接!感谢大佬们的无私奉献!!

代码链接
对代码的部分说明:
1.能跑通最新版本的yolov5就肯定能跑通我的这份代码,就是参考最新代码修改的。
2.权重和数据我就直接放仓库里了,clone下来直接跑,在inference/output里看结果。
3.觉得有用欢迎fork and star!

文章目录

  • 1 前言
  • 2 相机模型及单目测距原理
  • 3 相机内参和外参的标定
  • 4 基于yolov5的单目测距实现及关键代码

1 前言

在摄像头成像过程中,物体反射的光线通过摄像头的凸透镜打在成像器件上,形成一张图片。这是一个三维物体转换为二维图像的过程。在这个过程中,丢失了物体的深度信息,所以单目摄像头很难测距。但是,我们可以通过一个强假设,来简单计算物体的距离,即假设物体是处于地面上。具体意思下面再详细说。

2 相机模型及单目测距原理

相机模型可以简单看成一个凸透镜成像的模型。下图中,XcYcZc是相机坐标系,其原点为光心O,是相机凸透镜的中心点。x-o1-y坐标系是图像坐标系。
图片从b站up主(uid:109364003)的视频中截图的
图片从b站up主(uid:109364003)的视频中截图的
图中有一个车辆,且车辆在地面上,其接地点Q必定在地面上。那么Q点的深度便可以求解出来。具体求解步骤懒得打公式了,就截图了。在单目测距过程中,实际物体上的Q点在成像的图片上对应Q’点,Q’点距离o1点沿y轴的距离为o1p’。这个距离o1p’除以y轴像素焦距fy (单位为pixel) ,再求arctan即可得到角度b’。然后按图中步骤很容易理解了。
在这里插入图片描述
在按图中步骤求解深度OD时,如果相机高度H、相机光轴与水平线的夹角a没有准确测量的话,会对测距精准度造成较大影响。所以用于自动驾驶时,随着车身抖动,测距精度会很低。如果路面不是水平的,而是具有曲率的,那该方法也将失效。

3 相机内参和外参的标定

这部分优秀文献特别多,等我闲的时候再来加。

4 基于yolov5的单目测距实现及关键代码

estimate_distance.py为主程序。该程序中有一个DistanceEstimation类,该类的主要成员函数有camera_parameters(), object_point_world_position(), distance(), Detect(). 在Detect函数中调用yolov5检测得到目标框后,便可以提取目标框的底边的中点作为2中所述的测距所需的Q’点。然后按照2中所述原理,便可以求得到Q点的Xw和Yw坐标。取Xw和Yw的坐标的平方和,再开根号便得到了目标的直线距离。

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

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

相关文章

jmeter的函数助手使用方法

如某个上传文件接口,一个文件只能同时被一个接口调用,如果被并发同时调用就会报错 创建多个测试文件 比如50并发,创建更多的文件防止并发多时随机数生成重复 生成随机数函数 工具–函数助手-选择random-输入范围(1-696&#…

在阿里云服务器添加ssh,方便远程登录

前言: 添加ssh密钥步骤: chmod 700 .ssh #创建ssh cd .ssh chmod 700 authorized_keys #添加权限密钥 vim authorized_keys #编辑密钥 添加本地电脑ssh密钥 vim /etc/ssh/sshd_config #更改ssh配置文件 配置文件 # no default banner path #Banner no…

[Qt学习笔记]Qt使用MFC编译生成dll库在无编程环境电脑出现无法加载dll的问题

目录 1、 问题介绍2、 问题分析3、 问题总结和思考 1、 问题介绍 在项目实践中,使用Qt调用了一个vs创建的dll库,在本机上编译和release后的exe可以加载对应的dll文件,将exe拷贝到有vs编程环境的电脑上也可以加载对应的dll文件,但…

开篇介绍——蓝桥赛前冲刺(JavaB组)

开篇介绍 蓝桥杯赛事时间安排 专栏内容介绍 在接下来的几天时间内,老汉会不间断的更新该专栏,主要针对蓝桥杯B组赛事高频考点的复习巩固,其中包括老汉认为较优质的算法讲解(文章、视频),以及对应的真题、…

GPU 使用率监测及可视化

1. 使用 nvidia-smi可视化 直接在终端输入nvidia-smi动态查看GPU的使用情况watch -n 0.5 nvidia-smi其中0.5表示每隔0.5秒更新一次,时间可以调整 2. 使用nvitop可视化 2.1 nvitop的使用 (1) 安装 pip install nvitop(2) 查看GPU使用率 nvitop

全覆盖路径规划开源项目Clean-robot-turtlebot3原理及流程概括总结

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。 1、全覆盖路径规划开…

第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python清洗处理文本的常见步骤二、使用Python库去除非文本元素示例代码三、使用Python库去除格式化元素的示例代码四、使用Python库去除空白字符示例代码五、使用Python库合并段落和行示…

制造业工厂为什么需要生产管理MES系统

一、制造业的生产管理需求与痛点 日趋激烈的市场竞争、客户对产品多样化要求越来越高,导致产品的生命周期缩短,企业需要通过智能制造实现降本、增效、提质,以提高企业的快速响应能力和核心竞争力。 二、生产管理的过程的痛点具体表现如下&am…

ai写作润色工具有哪些?工具大盘点!

ai写作润色工具有哪些?在内容创作日益繁荣的今天,无论是今日头条还是百家号自媒体平台,一篇好的文章往往能吸引大量的读者。而一篇好的文章,除了内容有深度、观点独到之外,还需要有吸引人的标题和流畅、生动的文笔。这…

【大数据】三、HDFS 基础原理

HDFS HDFS 是一种典型的分布式文件系统,但其不是唯一的分布式文件系统 HDFS 是一种新型的文件系统,不同于传统的文件系统,新型文件系统解决了传统文件系统存在的负载不均衡与网络瓶颈问题。 但归根结底、这些弊端都是由传统文件系统所存在…

利用matplotlib对list数据画曲线

平时有时候分析数据需要画一张如下较为完整的图,所以写个博文在有需要的时候过来快速粘贴下 import matplotlib.pyplot as plt# 两个示例列表 list_xl [0.219683, 0.217855, 0.214003, 0.211832, 0.211356, 0.210974, 0.210622, 0.210312, 0.210040, 0.209794,0.…

qt5-入门-国际化

参考: Qt 国际化(上)_w3cschool https://www.w3cschool.cn/learnroadqt/fwkx1j4j.html QT5实现语言国际化(中英文界面动态切换,超详细)_qt qevent::languagechange-CSDN博客 https://blog.csdn.net/m0_49047167/article/details/…

Mysql总结(附思维导图)

Mysql Mysql索引 使用 创建主键索引 在对应字段后指定primary_key:id int primary key 创建唯一索引 在对应字段后指定unique_key:name varchar(20) unique 创建普通索引 在创建表的最后,指定某列或某几列:index(name) 创建全…

vue前端解析jwt

vue前端解析jwt 我们可以用在线解析看解析的结果:https://www.lddgo.net/encrypt/jwt-decrypt 但是如果在前端需要解析token,拿到其中的权限信息,可以这样解决。 在线的: 完美解决: 代码: function par…

(MYSQL)数据库中排序与分页操作

排序: 使用ODER BY 语句(在select语句的末尾)进行排序其中: 加ASC 升序; 加DESC 降序; 排序举例: SELECT id,name,salary FROM employees ORDER BY id; 注:此时就是以id升序排列表…

【Flutter学习笔记】9.7 动画过渡组件

参考资料:《Flutter实战第二版》9.7 动画过渡组件 “动画过渡组件”指的是在Widget属性发生变化时会执行过渡动画的组件,其最明显的一个特征就是会在内部管理一个AnimationController。controller定义了过渡动画的时长,而animation对象的定义…

Hutool中的这些工具类,太实用了

前言 今天给大家介绍一个能够帮助大家提升开发效率的开源工具包:hutool。 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool的设计思想是尽量减少重复的定义…

SAP PM 维护计划参数详解

本文的主要目的是解释调度参数如何影响预防性维护中计划日期的计算——基于时 间的单周期计划。 调度参数: 我们直接在维护计划中维护单周期计划的调度参数,如下图 计划标识 是计算计划日期的依据: 时间: 月份的计算基础始终…

成为高效Java工程师的干货笔记

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技术交流群】 作为一名Java工程师&…