首页 > 编程语言 >yolov5单目测距与相机标定流程和c++单目测距RKNN部署

yolov5单目测距与相机标定流程和c++单目测距RKNN部署

时间:2024-12-31 16:01:46浏览次数:3  
标签:RKNN 物体 矩阵 相机 单目 self 测距

相机模型、相机标定及基于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))

标签:RKNN,物体,矩阵,相机,单目,self,测距
From: https://blog.csdn.net/qq1309399183/article/details/144850936

相关文章

  • YOLO v5和Deepsort实现车辆距离and单目测距与相对速度检测
    使用YOLOv5和DeepSort实现车辆距离与相对速度检测改进自单目距离检测本项目基于YOLOv5和DeepSort算法,旨在通过单目摄像头实时检测周围车辆的距离及其相对于摄像头载体的相对速度。这项技术对于智能交通系统、自动驾驶汽车以及交通安全监控等领域具有重要意义。本文将......
  • MoGe---最新单目3D几何估计方法
    目录一、概述二、相关工作 1、单目深度估计2、单目几何估计3、相机内参估计4、单目几何的大规模数据训练三、前置知识1、仿射不变和尺度不变指标2、FOV和shift3、ROE对齐求解器四、MoGe1、为什么设计仿射不变?2、恢复相机焦距和移位 3、MoGe框架五、实验1、点......
  • 单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
    1.程序功能描述单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW,GA,PSO三种优化算法的优化收敛曲线进行对比。2.测试软件版本以及运行结果展示MATLAB2022A版本运行 3.核心程序fort=1:Iter%计算每个烟花适应度值fori=1:Npopyfit......
  • 如何matlab进行单目相机标定(全流程)
    1、打开matlab软件,app中找到cameracalibrator并打开2、并添加图片或连接相机3、拍摄标定板照片10-20张并传入,标定板生成代码可以看这个文章:python生成一个标定板代码_python棋盘格标定-CSDN博客样式如下,需不断调整角度等4、传入app中,这里需要选择标定板样式,以及具体一......
  • Qt/C++地图测距/显示不同线段的距离/拿到测距结果/测距结束信号
    一、前言说明地图测距在地图组件中属于一个比较小众的功能,但是又不得不提供,有时候用户希望直接在地图上选点,测算距离,尤其是在一些军事领域用的比较多,测距功能提炼出来的共性就是,每一段都有距离,最后鼠标右键或者双击结束测距,然后发个信号传过来总的距离。一般地图厂家也都提供了对......
  • 【推荐算法】单目标精排模型——Wide & Deep
    keyword:Google应用商店Motivation:作者认为一个好的推荐模型需要包含memorization和generalization。memorization主要负责记忆法频繁出现的特征项;generalization主要负责挖掘新的特征组合;截至2016年,作者认为目前的基于神经网络的推荐模型会过度泛化并推荐相关性较低的物品(ge......
  • 【推荐算法】单目标精排模型——DIEN
    keyword:阿里巴巴,广告点击率预测Motivation:截至2018年,还没有相关的推荐算法考虑到用户兴趣的趋势。作者认为大多数的模型是直接将行为视为兴趣,无法直接提取用户真正的潜在兴趣特征。因此,作者提出了DIEN模型,利用interestextractorlayer通过用户历史行为序列捕捉用户的兴趣序......
  • 【推荐算法】单目标精排模型——FiBiNET
    keyword:学术论文Motivation:传统的Embedding&MLP算法是通过内积和Hadamardproduct实现特征交互的,这篇文章的作者提出了采用SENET实现动态学习特征的重要性;作者认为简单的内积和Hadamardproduct无法有效对稀疏特征进行特征交互,因此提出bilinearfunction实现特征交互,提出了FI......
  • 在Windows环境下的rknn-toolkit环境搭建
    首先安装好conda,我是用的是anaconda,miniconda也可以。下载rknn_toolkit的轮子。可以直接在瑞芯微的git仓库中下载,地址为:github.com/rockchip-linux/rknn-toolkit/releases。我这里下载的是1.7.5版本的。选择rknn-toolkit-v1.7.5-packages.zip下载,之后解压,pipinstallrknn_t......
  • 【推荐算法】推荐系统中的单目标精排模型
    前言:推荐系统中模型发展较快,初学者【也就是笔者】很难对模型进行一个系统的学习。因此,这篇文章总结了王树森中的视频以及《深度学习推荐系统》中的单目标精排模型,绘制了一个单目标精排模型的思维导图来帮助初学者【笔者】更好的学习。在后面的学习过程中,会加入更多的单目标......