当前位置: 首页 > news >正文

车辆单目测距识别 yolov5单目测距 相机标定流程 单目测距RKNN部署

相机模型、相机标定及基于YOLOv5的单目测距实现

1. 前言

注意 此方法不需要预先知道物体尺寸,不需要参照物体!!!!

在摄像头成像的过程中,物体反射的光线通过摄像头的凸透镜聚焦到成像器件上,形成一张二维图像。这一过程将三维世界中的物体转换为二维图像,导致深度信息丢失,因此单目摄像头难以直接进行距离测量。然而,借助某些假设条件(例如假设物体位于地面上),我们可以通过特定方法估算物体的距离。

本文将详细介绍相机模型及其相关参数的标定过程,并探讨如何结合YOLOv5实现单目测距功能。这不仅涉及到理论上的理解,还包括实际应用中的一些挑战和解决方案。

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

相机模型可以简化为一个凸透镜成像系统,如图所示,其中(X_cY_cZ_c)代表相机坐标系,其原点(O)即为光心,也就是相机凸透镜的中心点;而(x-o_1-y)则构成了图像坐标系。当车辆等物体出现在视场内时,其底部接触地面的点(Q)会映射到图像平面上的一个对应点(Q’)。

在这个场景下,如果已知相机的高度(H)以及相机光轴与水平线之间的夹角(\alpha),并且假设物体位于水平地面上,则可以通过简单的几何关系计算出物体到相机的距离。具体来说,就是利用(Q’)点相对于图像中心的位置来推算角度,进而求解深度(OD)。但是需要注意的是,这种基于假设的方法对于动态环境或不平坦地面的有效性有限。

3. 相机参数标定

为了确保单目测距的准确性,首先需要精确获取相机的内部和外部参数。

3.1 内参矩阵

相机内参指的是相机内部的固有属性,包括焦距(f_x)和(f_y)(沿x轴和y轴方向)、主点偏移量(c_x)和(c_y)(图像中心)。这些参数定义了从相机坐标系到图像坐标系的转换关系:


其中,(u)和(v)表示图像坐标系中的像素位置,而(Z_c)是物体在相机坐标系下的深度。

3.2 内参标定

通常使用张正友提出的棋盘格标定法来进行内参标定。该方法要求拍摄一系列不同角度下的棋盘格图像,并通过MATLAB等工具自动计算出内参矩阵。步骤如下:

打印即可用@@@

  1. 准备一组约20张不同视角下的棋盘格照片。
  2. 使用MATLAB中的Camera Calibration应用程序导入图片并完成标定。
  3. 导出得到的内参矩阵用于后续处理。
3.3 外参矩阵

外参矩阵描述了相机坐标系与世界坐标系之间的相对位置和姿态。它由旋转矩阵(R)和平移向量(T)组成,共同决定了两者间的转换关系:

其中,(R)表示旋转矩阵,(T)表示平移向量。确定这两个矩阵的关键在于明确两个坐标系之间的旋转顺序和平移矢量。

4. 基于YOLOv5的单目测距实现

在实际应用中,我们开发了一个名为estimate_distance.py的Python脚本作为核心程序,其中包含了DistanceEstimation类,实现了目标检测后的距离估计功能。以下是主要的工作流程:

  • 目标检测:利用预训练好的YOLOv5模型对输入视频流或静态图片进行实时检测,识别出感兴趣的物体。
  • 特征提取:对于每个检测到的目标框,提取底部中点作为参考点(Q’),类似于前面提到的测距原理。
  • 距离计算:根据相机内参和外参信息,结合上述几何关系公式,计算出物体的实际距离。

通过这种方式,即使是在单目条件下,也能够较为准确地估计物体的距离,为诸如自动驾驶等领域提供了有力支持。当然,在实际部署过程中还需要考虑更多因素,比如光照变化、物体遮挡等问题,以保证系统的稳定性和可靠性。

代码

def distance(self, k xw=5, yw=0.1): print('\n','=' * 50) print('开始测距') fig = go.Figure() #p外参矩阵, k内参矩阵 p, k = self.camera_parameters(self.excel_path) if len(kuang): obj_position = [] u, v, w, h = k1] * self.W, k[2] * self.H, k[3] * self.W, k4] * self.H # u,v中心点坐标 w,h框宽和框高 print('中心点', u, v) print('框宽/高', w, h) d1 = self.object_point_world_position(u, v, w, h, p, k) distance = 0 print('距离', d1) if d1[0] <= 0: d1[:] = 0 else: distance = math.sqrt(math.pow(d1[0], 2) + math.pow(d1[1], 2))

车辆单目测距识别 yolov5单目测距 相机标定流程 单目测距RKNN部署

http://www.jsqmd.com/news/903601/

相关文章:

  • 在Linux上区分两个相同型号的USB摄像头?试试用libuvc获取设备详细信息
  • 一键美化Vibe Coding应用:单文件CSS实现原型界面现代化改造
  • 为什么顶尖AI团队已在发布会前48小时全员待命?揭秘Gemini新API Rate Limit突变、Token计费模型重构与企业级SLA条款暗改
  • 内网开发福音:保姆级教程,用一台能上网的Ubuntu搞定另一台机器的PostgreSQL 14离线安装
  • 5.26未做完
  • 从哑变量到One-Hot:R语言中处理分类变量的Lasso回归全攻略(含糖尿病数据案例)
  • 终极Windows硬件指纹伪装指南:EASY-HWID-SPOOFER完全解析
  • 《2026年5月徐州黄金回收哪家好?余生黄金回收连锁门店全解析》 - 润富黄金珠宝行
  • 【Linux IO模型】Linux IO模型详解:阻塞/非阻塞/IO多路复用、Epoll源码实战,吃透百万并发服务器核心原理
  • 2026支付宝立减金回收操作指南:折扣、渠道、流程全解析 - 可可收公众号
  • Claude Code 在大型代码库里的工程实践
  • 空中威胁识别 yolo数据集 无人机数据集 多旋翼无人机识别
  • LOIC:网络压力测试工具的技术架构与设计哲学深度解析
  • 春展启幕|2026 春季广交会展台搭建,品质服务商这样选 - 资讯焦点
  • 如何快速掌握VBA-JSON:面向Office开发者的终极数据转换指南
  • 2026北京搬家公司怎么选?政府央企高校都在用的标准化选型指南 - 年度推荐企业名录
  • 避坑指南:MariaDB密码插件simple_password_check配置的那些‘坑’与最佳实践
  • 2026年北京搬家公司怎么选?资质齐全、口碑权威的一站式搬迁方案深度对比指南 - 年度推荐企业名录
  • 基于LattePanda MU与Bazzite系统打造紧凑型x86游戏主机实战指南
  • 为什么你的Gemini用户第3天就流失?5类典型流失画像+实时干预SOP(附可复用埋点清单)
  • 2026年新松多可和遨博机器人及法奥机器人行业深度分析:具身智能焊接防爆协作机器人的价值抉择与生态构建 - 深度智识库
  • UWPHook:Windows UWP游戏与Steam平台无缝集成的技术解决方案
  • 告别词库焦虑!用Mac自带五笔+文本替换,打造你的专属高效输入方案
  • 快速排序代码
  • VRX自主水面舰艇仿真平台:从零开始掌握水上机器人仿真技术
  • 通达信缠论插件:让复杂技术分析变得简单直观
  • VALSE 2026 Tutorial分享|视觉基础模型:从单任务到通用模型
  • 别再写死负责人了!Flowable候选人组实战:用Java代码搞定研发部请假审批
  • Obsidian Projects:如何在纯文本环境中实现高效项目管理?
  • 2026北京搬家公司怎么选?迁禧、四通、蓝犀牛等5大品牌深度横评+避坑指南 - 年度推荐企业名录