目标检测+车道线识别+追踪

一种方法:

车道线检测-canny边缘检测-霍夫变换

一、什么是霍夫变换

霍夫变换(Hough Transform)是一种在图像处理和计算机视觉中广泛使用的特征检测技术,主要用于识别图像中的几何形状,尤其是直线、圆和椭圆等常见形状。霍夫变换的核心思想是将图像空间中的形状检测问题转化为参数空间中的峰值检测问题,通过在参数空间中投票累积的方式寻找满足特定形状条件的参数组合,从而有效地识别出图像中的几何特征。

以下是霍夫变换的基本工作原理和步骤:

  1. 图像空间到参数空间的映射: 霍夫变换的关键在于它将图像中的点与参数空间中的曲线参数对应起来。对于直线检测,通常使用极坐标形式表示直线:ρ = xcosθ + ysinθ,其中ρ是直线到原点(通常取图像左上角)的距离,θ是直线的斜率角。对于每个图像中的边缘点(x, y),都可以在ρ-θ参数空间中对应一条曲线。同样,对于圆或椭圆的检测,也有对应的参数表示形式。

  2. 投票累积: 对于图像中的每一个边缘点,计算其在参数空间中对应的所有可能参数组合,并在对应的参数值处进行投票(通常是增加计数或累加)。这意味着在参数空间中,每一条可能的直线(或圆、椭圆)都会有一个累积值。这个过程可以形象地理解为,每个边缘点都在参数空间中“投出”一系列票,支持其可能属于的几何形状。

  3. 峰值检测: 在投票累积完成后,参数空间中会出现一些局部峰值,这些峰值对应于图像中具有大量支持点(即边缘点)的几何形状参数。通过设定阈值或寻找全局/局部极大值,可以识别出这些峰值,即找到了图像中最可能存在的几何形状的参数表示。

  4. 形状重构: 根据识别出的参数,可以在原始图像空间中画出相应的直线、圆或椭圆,完成形状的检测。对于直线,可以使用ρ和θ计算出直线的方程;对于圆或椭圆,根据找到的参数可以直接绘制出来。

霍夫变换的优点包括:

  • 抗噪声:由于采用累加投票的方式,少量噪声点不会对最终结果产生显著影响,除非它们恰好在同一条可能的形状参数线上大量聚集。
  • 对形状完整性的要求较低:即使图像中的几何形状部分遮挡或断裂,只要存在足够多的边缘点支持同一参数,霍夫变换仍能有效识别。

其局限性包括:

  • 计算复杂度较高:尤其在处理高分辨率图像或检测复杂形状时,参数空间的维数增加,导致投票累积和峰值检测的计算成本增大。
  • 对参数选择敏感:霍夫变换的效果很大程度上取决于参数空间的分辨率设置,选择不当可能导致真实形状未能有效识别或产生大量假阳性结果。

尽管现代计算机视觉中出现了许多基于深度学习的高效检测方法,霍夫变换因其简单、直观和鲁棒性,在特定应用场合(如工业检测、低复杂度硬件实现等)中仍然具有实用价值。

1. 基本思想

将传统的图像从X,Y轴坐标系变化到参数空间(m,b)或者霍夫空间(hough space)中,通过参数空间(可称为累加空间)计算局部最大值从而确定原始图像中直线或圆的位置。

二、边缘检测算法

边缘检测算法本质上就是一种滤波算法,区别在于滤波器的选择,其与滤波的规则是一致的。为了理解边缘检测算子,我们引入梯度这个概念,梯度在数字图像处理领域可以理解为像素灰度值变化速度,但在数字图像处理中,实际的应用是不需要求导的,只需要进行简单的加减运算。

几种基本的边缘检测滤波器:sobel、prewitt、roberts算子。

问题:直接使用基本的边缘算子求得的边缘图存在很多问题,如噪声污染没有被排除、边缘线太过粗宽等。因此我们介绍一个先进的边缘检测算子——canny算子。

目前流行的canny算法的具体步骤:
1. 高斯滤波

高斯滤波的原理:根据待滤波的像素点及其邻域点的灰度值按照高斯公式生成的参数规则进行加权平均。

2. 计算梯度图像与角度图像

canny中使用的梯度检测算子是使用高斯滤波器进行梯度计算得到的滤波器,得到的结果也类似于sobel算子,即距离中心点越近的像素点权重越大。
角度图像的计算则较为简单,其作用为非极大值抑制的方向提供指导。

3. 对梯度图像进行非极大值抑制

上一步得到的梯度图像存在边缘粗宽、弱边缘干扰等众多问题,现在可以使用非极大值抑制来寻找像素点局部最大值,将非极大值所对应的灰度值置0,极大值点置1,这样可以剔除一大部分非边缘的像素点,因此最后生成的图像应为一副二值图像,边缘理想状态下都为单像素边缘。

4. 使用双阈值进行边缘连接

经过以上三步得到的边缘质量已经很高了,但是还是存在许多伪边缘,因此canny算法采用的算法是双阈值法,具体思路是:选取两个阈值,将小于低阈值的点认为是假边缘置0,将大于高阈值的点认为是强边缘置1,介于中间的像素点需要进一步的检查。

第二种方法:

利用边缘与颜色提取车道线,利用仿射变换转换成鸟瞰图,并利用直方图滑动窗口的算法精确定位车道线,利用最小二乘法进行拟合,实现车道线的检测,并计算车辆偏离车道中心的距离,触发报警装置。

第三种方法:

深度学习车道线检测

第三种方法:

需要实现的yolo+车道线检测

大致思路

目标检测+车道线识别+追踪+测距

数据获取和预处理:
首先,从摄像头或传感器获取图像或视频流,并进行预处理。预处理步骤可能包括图像去噪、色彩校正和尺度调整等。

目标检测:
使用深度学习的目标检测算法YOLO对图像或视频中的目标进行检测和定位。这些算法可以输出每个目标的类别、位置和置信度等信息。

车道线识别:
对于每个图像帧,利用图像处理技术(如边缘检测和霍夫变换)来识别图像中的车道线。这可以提供关于道路结构和车道位置的信息。

追踪:
将目标检测结果与前一帧的跟踪结果进行匹配,以实现目标的连续追踪。使用运动模型和特征匹配等技术来预测和更新目标的位置。这可以提供目标的运动轨迹和速度等信息。

测距:
利用单目视觉或其他深度估计技术,根据目标在图像中的大小、形状和视差等信息,计算目标与相机之间的真实距离。这可以提供关于目标与车辆的相对距离,从而帮助系统做出更准确的决策。

集成和决策:
将目标检测、车道线识别、追踪和测距的结果进行集成,并进行高级决策和规划。例如,根据目标的类别、位置和速度等信息,进行避障、路径规划和车辆控制等决策。

参考文章:目标检测+车道线识别+追踪+测距(代码+部署运行)_车道目标检测和跟踪-CSDN博客


                        
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中,数据是通过很多计算机或者通信设备相互转发,才能够到达目的地,所以在这个转发的过程中,如果通信包…

MySql实战--普通索引和唯一索引,应该怎么选择

在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引? 假设你在维护一个市民系统&…

C++堆详细讲解

介绍 二叉堆是一种基础数据结构,主要应用于求出一组数据中的最大最小值。C 的STL中的优先队列就是使用二叉堆。 堆的性质 : 1 . 堆是一颗完全二叉树 ; 2 . 堆分为大根堆 和 小根堆(这里不讨论那些更高级的如:二叉堆,二叉堆,左偏树等等) …

《手把手教你》系列技巧篇(五十八)-java+ selenium自动化测试-分页测试(详细教程)

1.简介 前几天,有人私信里留言问宏哥,分页怎么自动化测试了,完了给他说了说思路,不知道最后搞定没有,索性宏哥就写一篇文章来讲解和介绍如何处理分页。 2.测试场景 对分页来说,我们最感兴趣的和测试的无非…

主流公链 - Monero

Monero: 加密货币的隐私标杆 1. 简介 Monero(XMR),世界语中货币的意思,是一种去中心化的加密货币,旨在提供隐私和匿名性。与比特币等公开区块链不同,Monero专注于隐私保护,使用户的交易记录和余…

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫(又被称作网络蜘蛛、网络机器人,在某些社区中也经常被称为网页追逐者)可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…

网络: 套接字

套接字: 在网络上进行进程间通信 网络字节序与主机字节序的转化 sockaddr sockaddr struct sockaddr {sa_family_t sa_family; // 地址族char sa_data[14]; // 地址数据,具体内容与地址族相关 };sockaddr_in :主要是地址类型, 端口号, IP地址. 基于IPv4编程…

Linux:文件增删 文件压缩指令

Linux:文件增删 & 文件压缩指令 文件增删touch指令mkdir指令cp指令rm指令rmdir指令 文件压缩zip & unzip 指令tar指令 文件增删 touch指令 功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新…

vitepress builld报错

问题:build时报错:document/window is not defined。 背景:使用vitepress展示自定义的组件,之前build是没有问题了,由于新增了qr-code以及quill富文本组件,导致打包时报错。 原因:vitepress官…

密码学 总结

群 环 域 群 group G是一个集合,在此集合上定义代数运算*,若满足下列公理,则称G为群。 1.封闭性 a ∈ G , b ∈ G a\in G,b\in G a∈G,b∈G> a ∗ b ∈ G a*b\in G a∗b∈G 2.G中有恒等元素e,使得任何元素与e运算均为元素本…

vue实现把Ox格式颜色值转换成rgb渐变颜色值(开箱即用)

图示: 核心代码: //将0x格式的颜色转换为Hex格式,并计算插值返回rgb颜色 Vue.prototype.$convertToHex function (colorCode1, colorCode2, amount) {// 确保输入是字符串,并检查是否以0x开头let newCode1 let newCode2 if (t…

YOLOv9改进策略:block优化 | Transformer架构ConvNeXt 网络在检测中大放异彩

💡💡💡本文改进内容:Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩,同时对比 Swin-T 模型,在多种任务中其模型的大小和准确率均有一些提升,模型的 FLOPs 较大的减小且 Acc …

Solana 低至 0.4 Sol 创建OpenBook市场ID教程

Raydium上线代币之前,需要OpenBook ID,但是Raydium官方提供的链接创建需要花费 3-4 SOL。这成本使得我们对发行代币望而却步。 本篇文章介绍OpenBook的概念和教大家如何更低成本 (最低0.4 SOL) 创建 OpenBook Market ID。 目录 1、Raydium加池子创建为什…

机器学习中的 K-Means算法及其优缺点(包含Python代码样例)

一、简介 K-Means算法是一种经典的无监督学习算法,用于将数据集中的样本分为 K 个不同的类别。K-均值聚类算法的工作原理如下: 随机选择 K 个中心点作为初始聚类中心。将每个样本点分配到离其最近的聚类中心,形成 K 个初始聚类。通过计算每…

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去,让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的,今天在亮数据中看到了个【…

大话设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架,而将具体步骤的实现留给子类来完成,从而使子类…

用搜索引擎收集信息-常用方式

1,site csdn.net (下图表示只在csdn网站里搜索java) 2,filetype:pdf (表示只检索某pdf文件类型) 表示在浏览器里面查找有关java的pdf文件 3,intitle:花花 (表示搜索网页标题里面有花…

linux查找指定目录下包含指定字符串文件,包含子目录

linux查找指定目录下包含指定字符串的文件,包含子目录 linux查找指定目录下包含指定字符串的指定文件格式,包含子目录 指定目录 cd /home/www/linux查找指定目录下包含指定字符串的文件,包含子目录 grep -r "指定字符串"注释 gr…

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

操作系统导论-py2文件修改为py3文件快捷解决方法

在操作系统导论作业中,我们需要用到HW文件。但是这个代码包中,所有.py文件都是py2格式的,需要我们修改为py3文件后运行,即将.py文件开头的 #! /usr/bin/env python 修改为: #! /usr/bin/env python3 在前面小部分文件中…