【车道线检测】基于matlab Hough变换图片车道线检测 【含Matlab源码 276期】

2024-04-11 08:48

本文主要是介绍【车道线检测】基于matlab Hough变换图片车道线检测 【含Matlab源码 276期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、Hough变换图片车道线检测简介

1 引言
随着人们生活水平的提高, 科技的不断进步, 智能驾驶技术逐渐受到了研究者们的广泛研究和关注。先进驾驶辅助系统 (Advanced Driver Assistance System, 简称ADAS) 是智能驾驶技术的一个分支, 即通过某种形式的传感器了解周围的环境, 以协助驾驶员操作 (辅助司机) 或完全控制车辆 (实现自动化) , 达到提高车辆安全驾驶的目的。车道线检测作为ADAS的重要组成部分, 能够为系统确定车辆所在车道位置, 并提供车道偏离预警决策依据。目前主要通过在车内安装摄像头, 利用图像处理算法实时获取视频图像进行车道线检测, 但现实行车环境复杂, 比如存在视角遮挡、道路阴影、道路裂痕以及邻近车辆压线干扰等情况, 以至于车道线不易提取且容易造成误检、漏检, 因此如何实时、准确地检测出车道线具有重要的研究意义。

目前, 国内外众多学者对车道线检测进行了深入的研究并提出了一系列检测方法, 基于计算机视觉的车道线检测主要可以分为基于车道线特征和模型两类方法。基于车道线特征的检测方法主要是根据标志线的纹理、边缘以及颜色等特征来提取车道线, 杨智杰等人[7]基于图像的RGB颜色信息检测车道线, 但是当视野中其他物体的颜色与车道线颜色相近时, 容易造成车道线误检。基于模型的方法则是通过计算车道线模型的几何特征参数进而实现车道线检测, 通常分为直线和曲线两种车道线模型。王宝锋等人通过B-样条曲线对弯道车道线进行检测, 陈家凡提出采用远近景将图像分割, 远景视场通过曲线拟合车道线, 但基于曲线车道模型的车道线检测通常计算过程复杂, 时间成本高。Qian等人基于Hough变换进行的车道线检测, 但是该方法在恶劣环境使得车道线不易提取。陈军等人在概率Hough的基础上进行车道线检测, 该算法虽然优于标准的Hough变换, 但准确率还有待提高。以上基于传统Hough变换或者改进后的Hough变换方法能够完成部分车道线的提取, 但同时存在车道线漏检、误检的情况, 且检测结果受行车环境、车道线完好程度以及行驶时段影响较大, 且路面污渍、邻近车道车辆超越、同车道前车干扰以及路面反光“泛白”都会对车道线检测算法的稳定性造成影响, 使得检测到的车道线难以反映路面的真实情况。

鉴于此, 本文基于上述问题, 在满足自动驾驶时效性强和准确性高的要求之上, 提出一种叠加约束的Hough变换车道线检测算法, 算法通过研究不同环境以及工况下车道线的几何特征, 使得都能够准确检测车道线。算法首先从视频流的原始图像中裁剪感兴趣区域, 再将RGB颜色空间转换到YCbCr空间;然后运用大津法分离车道线与非车道线信息, 接着进行滤波处理和边缘检测;最后采用概率Hough变换拟合边界, 顾及车道线的斜率范围以及相同车道线斜率相近的特征, 根据边缘检测结果对漏检的车道线进行补充, 之后对车道线边界进行筛选与合并, 从而获取最终的车道线检测结果。本文方法的优势在于能够提高行车环境复杂、天气阴暗以及隧道昏暗环境下车道线提取的准确率, 并完善Hough变换检测车道线时存在的误检、漏检车道线边界以及只提取车道线边界的不足, 准确提取车道线并实时可视检测结果。

2 车道线检测算法
本文提出的基于Hough变换车道线检测算法主要分为视频图像预处理、Hough变换拟合车道线边界、检测车道线三个部分, 总体流程如图1所示。

第一阶段是对图像进行预处理, 以去除非周围环境所带来的干扰;第二阶段是采用概率Hough变换进行车道中边缘点峰值的统计, 最终拟合出车道线边界;第三阶段是由于Hough变换拟合的边界与真实的车道线存在差异, 部分车道线会被漏检、误检, 因而本文引入叠加约束条件剔除误检的车道线以及对漏检的车道线进行补充, 最后将车道线的边界进行合并实现车道线的准确检测。
在这里插入图片描述
图1 车道线检测算法总体流程图
2.1 视频图像预处理
通常车载摄像头所获取的行车视频包含众多道路信息, 为减少无关信息带来的干扰, 提高车道线的检测效率, 我们对每一帧视频图像进行矩形感兴趣区域 (ROI) 的裁剪。基于图像RGB颜色空间直接进行处理时, 会出现背景信息不易分割、计算量大、对噪声比较敏感等问题, 并且当车道线与路面颜色区分不大时检测的车道线容易出现残缺, 因此, 如图2所示, 本文在预处理阶段对图像的颜色空间进行转换;最后通过形态学滤波对图像进行腐蚀膨胀处理, 以此去除车道线中的噪声和弥补被过度腐蚀的信息, 之后再通过Canny算子进行边缘检测。
在这里插入图片描述
图2 图像预处理流程图
由于车辆在不同道路上行驶时会导致视野范围存在差异, 为尽可能使得ROI区域能够涵盖车道线信息, 本文选择矩形ROI对图片进行有用信息的裁剪。而车道线颜色通常为白色和黄色两种, 为准确检测出这两种类型的车道线, 我们将原图像的RGB颜色空间转换到YCbCr空间, 根据背景颜色与目标颜色的差异实现分离, 且该方法计算量比较小。YCbCr颜色空间中, RGB转换到YCbCr颜色空间中各个分量的计算如公式 (1) ~ (3) 所示。

Y=0.257R+0.504G+0.098B (1)
Cb=-0.140R-0.291G+0.439B+128 (2)
Cr=0.5R-0.4187G-0.0813B+128 (3)
其中Y代表亮度, Cb代表蓝色与亮度的差异, Cr代表红色与亮度的差异。

经过对多段不同工况的行车视频流的二值化实验结果表明, 亮度阈值选取72能够很好的提取出目标信息, 颜色空间转换前后的二值化对比结果如图3所示。
在这里插入图片描述
2.2 Hough变换检测车道线
传统霍夫变换 (Hough变换) [15]实现原理是将平面坐标空间中具有相同形状特征的曲线或者直线映射到另外一个空间的点上, 累计形成的峰值, 将图像中检测任何形状的问题都转换为峰值点分析的问题, 极坐标系下的表达方式如公式 (4) 所示。
ρ=x·cosθ+y·sinθ (4)
其中, ρ表示坐标所在位置的原点到直线的长度距离, M×N表示感兴趣区域图像的高度和宽度;而θ表示垂线ρ与x轴正方向的夹角 (θ∈[0, 180°]) 。具体的实现步骤如下。
(1) 建立一个参数 (ρ, θ) 空间的二维数组, 该数组相当于一个累计器。
(2) 遍历搜索图像中所有目标像素点, 对于每一个目标像素点都根据公式 (4) 求极径ρ, 找到对应位置, 然后在累加器的对应位置加1。
(3) 求所得累加器中的最大值, 其位置 (ρ’, θ’) 。
(4) 通过参数空间位置 (ρ’, θ’) , 根据式 (4) 找到图像空间中相对应的直线参数。
本文采取概率Hough变换拟合预处理后的边缘像素, 通过点出现的概率区间来避免无效直线的检测, 特点在于检测到的车道线能够得到两端的端点, 但是当周围栏杆以及旁边车辆干扰时, 会出现漏检以及误检。

⛄二、部分源代码

% 含检测模块的主程序(Otsu阈值分割,矩形感兴趣搜索区域)
close all;
clc;
clear;

tic;%程序执行的起始时间
k=1;
% mri=uint8(zeros(128,160,3,120));%建立4维的矩阵,前面的两维不管,由后面两维决定
% T,n为检测模块判断标志
T=0;
n=0;
a=0;
for frame=1:100
T=T+1;%%%%%%用于记录第几帧图像
startNum=frame;
imStr=num2str(startNum);
%imName=strcat(‘1000_’,imStr,‘.bmp’);%以上几句实现字符串连接的操作
imName=strcat(‘E:\DCIM\shipinchuli\shipinchuli2\m’,imStr,‘.jpg’);%以上几句实现字符串连接的操作
orig=imread(imName);%读取图片

origGray = rgb2gray(orig);%图片灰度化
mylane=origGray; 
[height,width] = size(origGray);
figure,imshow(origGray),title('origGray');%显示灰度图片

%%%%%%水平平均灰度投影
% grayProject=areaskybar(origGray,width,height);
% figure,barh(grayProject,0.5); %绘制二维水平条形图
%%%%%%白线Otsu阈值分割,得到图像segmentorig
OtsuGray=origGray;
[threshOtsu,segmentorig]=autothresh(OtsuGray,height,width);%大津法阈值分割函数 返回最佳阈值和部分图像块 暂时好像没用着
% figure,imshow(segmentorig),title(‘segmentorig’);
%
% imhist(origGray); %绘制灰度直方图
% [counts,x]=imhist(origGray);

% orighictr=histeq(origGray); %增强对比度
% figure,imshow(orighictr),imshow(‘orighictr’);

%%%%%边缘二值图像,sobel算子
[origEdgeBw,sobthresh]= edge(origGray,‘sobel’,‘vertical’); % B、Bw表示二值化 用Sobel边缘检测算子进行边缘检测 返回二值图像和阈值
%origEdgeBw 产生一个掩膜矩阵
%sobthresh 阈值

% [origEdgeBw,sobthresh]= edge(origGray,‘sobel’);

% origEdgeBw=sobell(height,width,origGray);%自己编的sobel算子函数
% figure,imshow(origEdgeBw),title(‘edgedIm’);

%边缘灰度图像
edgedIm = double(origGray).*double(origEdgeBw);%通过掩膜矩阵与原图像相乘,类似于与运算    

% figure,imshow(edgedIm),title(‘edgedIm’);
laneDispF = floor( MyFilt(edgedIm,100) ); % 滤波 感觉没变化

% figure,imshow(laneDispF),title(‘laneDisp’);
% figure;
% segorigF=floor(MyFilt(segmentorig,100));%滤波
% figure,imshow(segorigF),title(‘segorig Filt’);
skyline=areasky(origGray,width,height); %求陆天分界线 第一幅图:79行

if T==1  %第一幅图像用检测模块进行检测,后面的图像用跟踪实现
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 调用检测模块%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[lData,rData,lReservedPnt,rReservedPnt,Detorig]=detect(orig,origGray,laneDispF,segmentorig,imName);% lData,rData为左右拟和直线上间隔取点的坐标数组Imrsize=imresize(Detorig,2);%变为Detorig的2倍mri(:,:,:,k)=Imrsize;k=k+1;else%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 进入跟踪阶段%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 从记录的边界点附近寻找当前的边界点
% 左边界
subL = 0;
for t = 1:lReservedPnt
for temp = lData(t,1)-10 : lData(t,1)+10 % 在左右各10个象素内搜索特征点
if( temp>0 && temp<=width && segmentorig(height-lData(t,2),temp) ~= 0 )
subL = subL + 1;
leftLanePnts(subL,1) = temp;
leftLanePnts(subL,2) = lData(t,2);
break;
end
end
end

    % 右边界subR = 0;for t = 1:rReservedPntfor temp = rData(t,1)-10 : rData(t,1)+10if( temp>0 && temp<=width && laneDispF(height-rData(t,2),temp) ~= 0 )subR = subR + 1;rightLanePnts(subR,1) = temp;rightLanePnts(subR,2) = rData(t,2);break;endendend

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

这篇关于【车道线检测】基于matlab Hough变换图片车道线检测 【含Matlab源码 276期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893607

相关文章

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图