matlab thetal,基於matlab的車道和車道線檢測樣例
%% 初始化
% 使用這些來初始化下部分代碼的一些變量和系統對象
DrawPoly = 1; % 設置為0以繪制直線
NumRows = 120; % 要處理的視頻區的行數(視圖下部)
MaxLaneNum = 20; % 跟蹤庫中保存的最大車道數目
ExpLaneNum = 2; % 當前視頻幀中需要檢測的最大車道數目
Rep_ref = zeros(2, MaxLaneNum); % 存儲的車道線
Count_ref = zeros(1, MaxLaneNum); % 車道線計數
TrackThreshold = 75; % 在2幀視頻之間車道區域允許的最大變動距離
LaneColors = single([0 0 0;1 1 0; 1 1 0; 1 1 1;1 1 1]);
% 可以判定當前車道所需的最少幀數,即:5幀視頻內未檢測到偏離當前車道,則顯示車道提示文本
frameFound = 5;
% 車道標記有效的最多幀數,即:車道提示文本最多保持20個幀的時長
frameLost = 20;
% 選擇與原點距離為:35:45 (從1開始編號: 415:424)之間的直線
startIdxRho_R = 415;
NumRhos_R = 11;
% 選擇斜率為:-90:-70deg (從1開始編號:: 1:21)之間的直線
startIdxTheta_R = 1;
NumThetas_R = 21;
% 選擇與原點距離為:379:415 (從1開始編號:: 1:36)之間的直線
startIdxRho_L = 380;
NumRhos_L = 36;
% 對於斜率為:55:85deg (從1開始編號:: 146:176)的直線
startIdxTheta_L = 146;
NumThetas_L = 21;
% 顯示車道線的偏移值
offset = int32([0, NumRows, 0, NumRows]);
%%
% 創建一個 |VideoFileReader| 系統對象以從文件讀取視頻
hVideoSrc = vision.VideoFileReader('viplanedeparture.mp4');
%%
% 創建一個 |HoughLines| 系統對象以檢測黃白線的笛卡爾坐標
hHoughLines1 = vision.HoughLines('SineComputation', 'Trigonometric function');
hHoughLines3 = vision.HoughLines('SineComputation', 'Trigonometric function');
%%
% 定義插入的車道偏離時的警告文本參數。
warnText = {sprintf('Right\nDeparture'), '', sprintf(' Left\n Departure')};
warnTextLoc = [120 170;-1 -1; 2 170];
%%
% 定義插入的指定車道標記顏色/類型的文本參數
lineText = {'', ...
sprintf('Yellow\nBroken'), sprintf('Yellow\nSolid'), ...
sprintf('White\nBroken'), sprintf('White\nSolid')};
%%
%創建一個 |VideoPlayer| 系統對象以輸出顯示視頻
myVideoOut = vision.VideoPlayer;
%%
% 初始化在視頻流循環處理中使用到的變量
Frame = 0;
NumNormalDriving = 0;
OutMsg = int8(-1);
OutMsgPre = OutMsg;
Broken = false;
%% 視頻流循環處理
% 創建一個循環過程來對給定視頻進行車道線檢測
% 該循環使用之前初始化的系統對象
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 intensity
I = imfilter(Imlow, [-1 0 1], 'replicate','corr');
% 設置飽和值為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 deg
H1(:, 1:12) = 0;
H1(:, end-12:end) = 0;
Idx1 = houghpeaks(H1, ExpLaneNum, 'NHoodSize', [301 81], 'Threshold', 1);
Count1 = size(Idx1,1);
% 根據峰值來選擇Rhos和Thetas
Line = [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 >= 5
TwoLanes1 = TwoLanes + [offset; offset]';
if DrawPoly && TwoValidLanes
if TwoLanes(4,1) >= 239
Templ = TwoLanes1(3:4, 1);
else
Templ = [0 239]';
end
if TwoLanes(4,2) >= 239
Tempr = TwoLanes1(3:4, 2);
else
Tempr = [359 239]';
end
Pts_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 ~= OutMsg
ColorType = ColorAndTypeIdx(2-(OutMsg == 2));
Broken = ColorType == 2 || ColorType == 4;
end
ShowThirdLane = Broken && (OutMsg~=1);
if ShowThirdLane
if 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);
end
OutThirdLane = videoexclude3rdlane(ThirdLane, ShowThirdLane,...
TwoLanes, TwoValidLanes, YCbCr);
OutThirdLane = OutThirdLane(:) + offset(:);
RGB = insertShape(RGB,'Line',OutThirdLane.','Color','green');
end
end
OutMsgPre = OutMsg;
step(myVideoOut, RGB); % 顯示視頻
end
%% 釋放資源
release(hVideoSrc);
%% 總結
% 在樣例視頻中,你可以看到【車道】、【車道線】以及【離開當前車道的方式】被檢測到的過程
%% 附錄
% 在這個例子中使用到的函數:
% *
% *
% *
% *
% 顯示結束提示信息
displayEndOfDemoMessage(mfilename)
matlab thetal,基於matlab的車道和車道線檢測樣例相关推荐
- python笑傲江湖统计字数_基於Python的tf-idf算法实现:以《笑傲江湖》为例
连结Jasonnor/tf-idf-pythongithub.com 简介 tf-idf(term frequency-inverse document frequency)是一种用於信息检索与文字 ...
- matlab径向基网络,MATLAB——径向基网络拟合曲线和分类
1.广义RBF P=:.:; rand('state',pi); %指定状态,产生相同的随机数 T=sin(*P)+rand(,length(P)); % 给正弦函数加噪声 plot(P,T,'o') ...
- 用matlab雷达基数据,matlab探地雷达数据处理软件
[实例简介] 一款利用matlab编写的探地雷达数据处理系统,开源免费.支持seg-y.su.dzt等格式的输入数据输入,能够进行增益显示.静校正处理.滤波去噪.偏移成像等常用的数据处理. [实例截图 ...
- matlab fir工具箱,用MATLAB信號處理工具箱進行FIR濾波器設計的三種方法
摘 要 介紹了利用MATLAB信號處理工具箱進行FIR濾波器設計的三種方法:程序設計法.FDATool設計法和SPTool設計法,給出了詳細的設計步驟,並將設計的濾波器應用到一個混和正弦波信號,以驗 ...
- quartus ii matlab,基於Quartus II和MATLAB的FIR濾波器設計與仿真(二)
接上文 基於Quartus II和MATLAB的FIR濾波器設計與仿真(一): 3 QuartusII 調用 IP 核生成 FIR 濾波器模塊 在 Quartus II 中, Altera 提供了 ...
- 【水位预测】基于matlab径向基神经网络地下水位预测【含Matlab源码 1939期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[水位预测]基于matlab径向基神经网络地下水位预测[含Matlab源码 1939期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...
- matlab自动驾驶工具箱,MATLAB,Simulink. - Automated Driving System Toolbox, 自動駕駛系統工具箱-鈦思科技...
Introduction 對自動駕駛以及先進駕駛輔助系統 (Advanced Driver Assistance Systems:ADAS)提供設計.模擬以及測試等多種功能. Automated Dr ...
- matlab 抽样判决代码,matlab抽样判决器
低通 滤波器 LPF 用于滤除高频分量,提高信噪比;抽样判决所需的同步时钟需要从... 通信原理 MATLAB 仿真实验 基于 MATLAB 的第一类部分响应系统的 基带信号及其眼图...这种方法具体 ...
- matlab中exp(liangx),Matlab基础知识
<Matlab基础知识>由会员分享,可在线阅读,更多相关<Matlab基础知识(122页珍藏版)>请在人人文库网上搜索. 1.Lxy, China Jiliang Univer ...
最新文章
- 使tomcat和lighttpd使用service启停
- Evernote用户只用了5%的功能,这着实给科技公司上了一课
- python中home定义是什么_第48p,什么是函数?,Python中函数的定义
- 了解Base64编码的原理(js核对)
- html文档是哪个版本,Pro010-从零开始HTML[#010]——5分钟-HTML 文档类型版本
- [Linux] 编译 与 链接
- SCCM2012系列之十,SCCM2012软件分发
- 搜狗输入法纯净_最新PC端搜狗输入法,无广告弹窗纯净版
- 软件之道 -- 道篇全文
- 二、JavaWeb动态网页基础
- 利用计算机网络技术全面规划供应链中的,供应链是围绕核心企业,通过对商流、信息流、物流、资金流的控制,从采购原材料开始,制成中间产品以 - 试题答案网问答...
- 用c语言模拟石头剪刀布小游戏
- 那些好看的渐变色linear-gradient(拿走不谢)
- Windows 7下查看本机的ip地址
- 用C++语言写游戏——打怪小游戏
- 用iOS/Android实现家庭自动化远程控制
- 08. 路由器的基本配置和Talent配置
- c#中利用keybd_event函数+自定义软键盘实现中文输入时的问题
- 田园项目tabber标签栏使用
- 微计算机原理及应用第八章,微型计算机原理及应用课件第八章中断.docx
热门文章
- Apicloud_(问题)P54提示错误:Uncaught SyntaxError: Unexpected token ) at main.html : 117
- pfSense-2.4.4安装教程
- 3.2 Lucene实战:一个简单的小程序
- 邮件协议POP3/IMAP/SMTP服务的区别
- 第八周总结与软考前任务安排
- The example program of C on point
- (转)黑幕背后的Autorelease
- 通过UserAgent判断智能设备(Android,IOS)
- 表字段identity
- 单片机串口通信与同步异步通信