一、课题介绍
本设计为基于MATLAB的运动车辆跟踪检测系统。带有一个GUI界面,可以读取高速路车流视频,读取视频信息,并且统计每辆车经过左车道还是右车道,车速和平均速度检测,以及某一帧下的车流密度,以及最后总共经过的车辆总数。将运动检测到的目标用方框框起来。是一个非常不错的选题。
二、实现功能
车流密度:一定时间内经过车辆的总数;
车流量:某一帧下的车辆数目;
车速:经过车辆的实时速度;
平均速度:所有车辆的平均速度;
三、GUI界面以及运行预期效果
GUI设计图
GUI运行效果图
四、主要源码
1、视频读取
[filename, cd1] = uigetfile( ...
{'*.avi;*.mp4;'},'Pick an Video');
if filename
filename = [cd1,filename];
video = vision.VideoFileReader(filename, 'ImageColorSpace', 'RGB');
end
axes(handles.axes1);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
2、判定车道以及车速
thresh = 120; % 判定左车道和右车道分届的阈值
for n = 1 : size(bbox,1)
fprintf('y: %f \n',bbox(n,2));
pos = bbox(n,1) + bbox(n,3);
if bbox(n,2) < 45 && bbox(n,2) > 35
if pos < thresh && (size(left,1) == 0 || i - left(size(left,1)) > 4) % 记住刚进入的车
left = [left;i];
elseif (size(right,1) == 0 || i - right(size(right,1)) > 4)
right = [right;i];
end
else
fm = 30; % 视频帧率,参数可调,这里假设为30帧每秒
len = 30; % 视频中路段的长度,参数可调,这里先定位100m
if pos < thresh % 判断要开出该区域的车
if bbox(n,2) > 85 && size(left,1) > 0
vleft = i - left(1,1) + 2; % 这里计算左车道车速,帧数
if vleft < 30 && vleft > 4 % 因为车速再慢也会大于一定速度
left(1,:) = [];
t = vleft/fm; % 计算实际时间 帧数/每秒帧数
vleft = len/t; % 计算实际车速 距离/实际时间,vl为坐车道速度
v1=v1+vleft;
v1
fprintf('左车道,车速: %f \n',vleft);
set(handles.edit_speed,'string',strcat('左车道:',num2str(vleft)));
else
left(1,:) = [];
end
end
else
if bbox(n,2) > 80 && size(right,1) > 0
vr = i - right(1,1); % 这里计算右车道的车速,这里还是帧数
if vr < 35
right(1,:) = [];
t = vr/fm; % 计算实际时间 帧数/每秒帧数
vr = len/t; % 计算实际车速 距离/实际时间
v2=v2+vr
fprintf('右车道,车速: %f \n',vr);
set(handles.edit_speed,'string',strcat('右车道:',num2str(vr)));
else
right(1,:) = [];
end
end
end
end
3、车辆计数
for j=1:(i-2) %对检测到的车辆进行求和
if count(j)==0 & count(j+1)>0
k=j+1;
else if count(j)>0 & count(j+1)==0
q=j;
summ1=summ1+max(count(k:q));
cheliang_jishu(p)=max(count(k:q));
p=p+1;
end
end
end