基于Matlab的车道线检测系统 (文末有代码获取链接)【含Matlab源码 MX_001期】

运行环境:Matlab2014b

部分代码:

%% 视频流循环处理
% 创建一个循环过程来对给定视频进行车道线检测
% 该循环使用之前初始化的系统对象
warningTextColors = {[1 0 0], [1 0 0], [0 0 0], [0 0 0]}; 
while ~isDone(hVideoSrc) RGB = step(hVideoSrc);% 选择输入视频的下部(限制视野)Imlow  = RGB(NumRows+1:end, :, :);% 边缘检测和Hough变换Imlow = rgb2gray(Imlow); % Convert RGB to intensityI = imfilter(Imlow, [-1 0 1], 'replicate','corr'); %imfilter函数:对任意类型数组或多维图像进行滤波% 设置饱和值为0到1之间I(I < 0) = 0;I(I > 1) = 1;th = multithresh(I); % 计算门槛[H, Theta, Rho] = hough(I > th);% 将角度制变量Theta转换成弧度制Theta = Theta * pi / 180;% 峰值检测H1 = H;% 删除H中满足下列条件的矩阵: theta < -78 deg and theta >= 78 degH1(:, 1:12) = 0;H1(:, end-12:end) = 0;Idx1 = houghpeaks(H1, ExpLaneNum, 'NHoodSize', [301 81], 'Threshold', 1);Count1 = size(Idx1,1);% 根据峰值来选择Rhos和ThetasLine = [Rho(Idx1(:, 1)); Theta(Idx1(:, 2))];Enable = [ones(1,Count1) zeros(1, ExpLaneNum-Count1)];% 跟踪一组标记了的车道线[Rep_ref, Count_ref] = videolanematching(Rep_ref, Count_ref, ...MaxLaneNum, ExpLaneNum, Enable, Line, ...TrackThreshold, frameFound+frameLost);% 将极值点转换到笛卡尔坐标系Pts = step(hHoughLines1, Rep_ref(2,:), Rep_ref(1,:), Imlow);% 检测是否有向左或向右的车道偏离[TwoValidLanes, NumNormalDriving, TwoLanes, OutMsg] = ...videodeparturewarning(Pts, Imlow, MaxLaneNum, Count_ref, ...NumNormalDriving, OutMsg);% 输出信息的含义: % 0 = 向右离开当前车道% 1 = 正常驾驶% 2 = 向左离开当前车道% 检测车道线的颜色和类别YCbCr  = rgb2ycbcr(double(RGB(NumRows+1:240, :, :)));ColorAndTypeIdx = videodetectcolorandtype(TwoLanes, YCbCr);% 变量ColorAndTypeIdx的含义:% 无效的颜色或类别 = int8(0); % 黄虚线 = int8(1);% 黄实线 = int8(2);  % 白虚线 = int8(3);% 白实线 = int8(4).% 输出Frame = Frame + 1;if Frame >= 5TwoLanes1 = TwoLanes + [offset; offset]';if DrawPoly && TwoValidLanesif TwoLanes(4,1) >= 239Templ = TwoLanes1(3:4, 1);elseTempl = [0 239]';endif TwoLanes(4,2) >= 239Tempr = TwoLanes1(3:4, 2);elseTempr = [359 239]';endPts_poly = [TwoLanes1(:,1); Templ; Tempr; ...TwoLanes1(3:4,2); TwoLanes1(1:2,2)];% 在车道区域绘制多边形RGB = insertShape(RGB,'FilledPolygon',Pts_poly.',...'Color',[0 1 1],'Opacity',0.2);            end% 绘制车道线RGB = insertShape(RGB,'Line',TwoLanes1',...'Color',{'yellow','magenta'});% 插入车道变更警告文本 (空文本不会被绘制)txt = warnText{OutMsg+1};txtLoc = warnTextLoc(OutMsg+1, :);txtColor = single(warningTextColors{mod(Frame-1,4)+1});RGB = insertText(RGB,txtLoc,txt,'TextColor', txtColor, ...'FontSize',20, 'BoxOpacity', 0);% 插入描述车道线的颜色和种类信息的文本for ii=1:2% 空文本不会被绘制txtLoc = TwoLanes1([1 2], ii)' + int32([0 -35]);lineTxt = lineText{ColorAndTypeIdx(ii)};txtColor = LaneColors(ColorAndTypeIdx(ii), :);RGB = insertText(RGB,txtLoc,lineTxt,'TextColor',txtColor, ...'FontSize',14, 'BoxOpacity', 0);end% 如果有必要,绘制第三条车道线if OutMsgPre ~= OutMsgColorType = ColorAndTypeIdx(2-(OutMsg == 2));Broken    = ColorType == 2 || ColorType == 4;endShowThirdLane = Broken && (OutMsg~=1);if ShowThirdLaneif OutMsg == 0% 寻找位于右边的第三条车道线Idx2 = houghpeaks(H(startIdxRho_R:startIdxRho_R+NumRhos_R-1, ...startIdxTheta_R:startIdxTheta_R+NumThetas_R-1), ...'NHoodSize', [7 7], 'Threshold', 1);Rhor = Rho(Idx2(:,1) + startIdxRho_R);Thetar = Theta(Idx2(:,2) + startIdxTheta_R);ThirdLane = step(hHoughLines3, Thetar, Rhor, Imlow);else% 寻找位于左边的第三条车道线Idx3 = houghpeaks(H(startIdxRho_L:startIdxRho_L+NumRhos_L-1 , ...startIdxTheta_L:startIdxTheta_L+NumThetas_L-1),...'NHoodSize', [7 7], 'Threshold', 1);Rhol = Rho(Idx3(:,1) + startIdxRho_L);Thetal = Theta(Idx3(:,2) + startIdxTheta_L);ThirdLane = step(hHoughLines3, Thetal, Rhol, Imlow);endOutThirdLane = videoexclude3rdlane(ThirdLane, ShowThirdLane,...TwoLanes, TwoValidLanes, YCbCr);  OutThirdLane = OutThirdLane(:) + offset(:);RGB = insertShape(RGB,'Line',OutThirdLane.','Color','green');           endendOutMsgPre = OutMsg;step(myVideoOut, RGB);    % 显示视频
end

运行截图:

代码获取链接:基于Matlab的车道线检测系统

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

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

相关文章

SpringBoot使用redis结合mysql数据库(黑名单)渲染商品详情界面

目录 一、界面效果 二、前端代码 三、后端代码&#xff08;redisblacklist&#xff09; 3.1 ProducatController 3.2 ProductService 3.3 ProductDao 3.4 映射文件 一、界面效果 二、前端代码 商品详情前端代码 <template><van-nav-bartitle"商品详情&quo…

【FixBug】超级大Json转POJO失败

今天遇到了一个问题&#xff1a;使用Jackson将一个超级大的JSON字符串转换POJO失败&#xff0c;debug看没问题&#xff0c;将JSON字符串粘贴到main方法中测试&#xff0c;提示错误信息如下&#xff1a; 自己猜测是因为字符串超长导致转换时先截断字符串导致JSON格式不正确&…

微服务架构-分支微服务设计模式

微服务架构-分支微服务设计模式 这种模式是聚合器模式的扩展&#xff0c;允许同时调用两个微服务链 分支微服务设计模式是一种用于构建大型系统的微服务架构模式&#xff0c;其核心思想是 将复杂的业务逻辑拆解为多个小的、相互独立的子系统&#xff0c;每个子系统由一个或多…

unity制作app(10)--统一字体

1.载入字体&#xff0c;微软雅黑&#xff0c;需要3分钟左右 加载进来3个 2.font文件夹下创建一个txt&#xff0c;内部的内容如下&#xff1a; &#xfeff;啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏…

C# 语法糖

语法糖 var关键字&#xff08;隐式类型变量&#xff09;&#xff1a;自动属性&#xff1a;简化的事件访问器&#xff1a;Lambda表达式和匿名方法&#xff1a;扩展方法&#xff1a;LINQ查询&#xff1a;异步编程&#xff08;async和await&#xff09;&#xff1a;嵌套匿名类型&a…

word如何创造新的格式标题

1 效果如下&#xff1a;&#xff08;标题命名默认音序排序&#xff09; 2 创建 选中自己喜欢的标题&#xff0c;修改字号字体&#xff0c;then 3 修改 注意要点如下&#xff1a; 后续&#xff1a;以上操作可能导致后续一级标题不能折叠二级标题&#xff0c;目录导航栏也不能…

C++网络编程——socket

在服务器中&#xff0c;需要建立一个socket套接字才能对外提供一个网络通信接口&#xff0c;在Linux系统中套接字仅是一个文件描述符&#xff0c;也就是一个int类型的值 socket概念 socket 的原意是“插座”&#xff0c;在计算机通信领域&#xff0c;socket 被翻译为“套接字…

OpenStack创建云主机——超级详细步骤

四、创建云主机 一台云主机成功创建或启动需要依赖OpenStack中的各种虚拟资源&#xff0c;如CPU、内存、硬盘等。如果需要云主机丽娜姐外部网络&#xff0c;还需要网络、路由器等资源。如果需要外部网络访问云主机&#xff0c;那么还需要配置浮动IP。因此&#xff0c;在创建云主…

开源监控工具monit安装部署

Monit 简介 Monit是一个轻量级(500KB)跨平台的用来监控Unix/linux系统的开源工具。部署简单&#xff0c;并且不依赖任何第三方程序、插件或者库。 Monit可以监控服务器进程、文件、文件系统、网络状态&#xff08;HTTP/SMTP等协议&#xff09;、远程主机、服务器资源变化等等。…

Linux内核 -- 启用 Linux 内核调试信息

启用 Linux 内核调试信息 本文档提供了如何在编译 Linux 内核时启用调试信息的逐步指南。调试信息对于调试和诊断内核问题至关重要。 启用调试信息的步骤 1. 进入内核源代码目录 打开终端并导航到 Linux 内核源代码目录&#xff1a; cd /path/to/linux-kernel2. 配置内核 …

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

一款基于UniappFastAdminThinkPHP开发的旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&#xff09;。机构可以发布旅游线路、景点项目&#xff…

React18 apexcharts数据可视化之甜甜圈图

03 甜甜圈图 apexcharts数据可视化之甜甜圈图。 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基本甜甜圈图个性图案的甜甜圈图渐变色的甜甜圈图 面包圈 import ApexChart from react-apexcharts;export function DonutUpdate() {// 数据…

Linux——多线程(一)

一、线程的概念 1.1线程概念 教材中的概念&#xff1a; (有问题?) 线程是进程内部的一个执行分支&#xff0c;线程是CPU调度的基本单位 之前我们讲的进程&#xff1a; 加载到内存中的程序&#x…

栈的特性及代码实现(C语言)

目录 栈的定义 栈的结构选取 链式储存结构和顺序栈储存结构的差异 栈的代码实现 "stack.h" "stack.c" 总结 栈的定义 栈&#xff1a;栈是限定仅在表尾进行插入和删除操作的线性表。 我们把运行插入的和删除的一段叫做栈顶&#xff08;TOP&#xff…

【第6章】SpringBoot整合Mybatis

文章目录 前言一、准备1. 版本要求2.安装3. 建表语句 二、案例1. mapper2.实体类3.测试类4.扫描5. 配置6. mapper.xml7.输出 总结 前言 MyBatis-Spring-Boot-Starter 可以帮助你更快地在 Spring Boot 之上构建 MyBatis 应用。 一、准备 1. 版本要求 MyBatis-Spring-Boot-Sta…

【JVM】一次JVM内存泄露分析处理

一次内存泄露分析 背景情况 编写了一个大数据基础组件的可用性监控程序&#xff0c;采用Bootstrap监测端口的方式&#xff0c;使得方法常驻&#xff08;main线程常驻&#xff09;&#xff0c;通过一个调度线程ScheduledThreadPoolExecutor&#xff0c;定时的调动监测任务。 …

adb获取包名和界面名

adb获取包名和界面名 mac adb shell dumpsys window windows | grep mFocusedApp windows adb shell dumpsys window windows | findstr mFocusedApp 这个是在当前手机打开哪个界面获取的就是哪个界面的包名与界面 注意第一次连接时会有提示&#xff0c;需要连接两次才可以 …

【AI算法岗面试八股面经【超全整理】——机器学习】

AI算法岗面试八股面经【超全整理】 概率论信息论机器学习深度学习CVNLP 目录 1、回归损失函数2、分类损失函数3、误差&#xff08;Error&#xff09;、偏差&#xff08;Bias&#xff09;、方差&#xff08;Variance&#xff09;4、PCA&#xff08;Principle Component Analysi…

哈希算法教程(个人总结版)

背景 哈希算法&#xff08;Hash Algorithm&#xff09;是一种将任意长度的输入&#xff08;也称为消息&#xff09;转换为固定长度的输出&#xff08;也称为哈希值、散列值、摘要&#xff09;的算法。哈希算法在计算机科学中有着广泛的应用&#xff0c;包括数据存储、数据检索…

【软考网络工程师-2023年5月上午真题】

1、固态硬盘的存储介质是&#xff1a; 闪存 。 &#xff08;固态硬盘SSD的存储介质是Flash&#xff0c;也叫闪存&#xff0c;U盘中的存储介质也是闪存&#xff1b;机械硬盘HDD的存储介质是磁盘&#xff0c;依靠磁盘转动实现读写&#xff0c;机械硬盘内涵机械臂和磁道&#xff0…