对视频中的车辆进行计数,MATLAB仿真
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对视频中的车辆进行计数,MATLAB仿真相关的知识,希望对你有一定的参考价值。
1.仿真预览
clc; close all; clear;
folderPath = 'TrafficVideo\\'; % 文件夹名称
imageType = '*.jpg'; % 图像类型
imageFiles = dir([folderPath, imageType]); % 指定路径下所有指定图像,以结构体形式保存
%% 通过循环遍历所有图像
procNum = length(imageFiles);
m=5;
n=ceil((procNum-1)/4/m);
Road = imread([folderPath,imageFiles(procNum).name]);
GrayRoad = rgb2gray(Road);
figure,imshow(Road);
th=zeros(1,(length(imageFiles)-1)/4);
se1=[1 1 1];
se2=ones(9);
color=[1 0 0;0 1 0;0 0 1;1 0 1;0 1 1;1 1 0;1 1 1];
a=0;
q=0;
for z=1:(length(imageFiles)-1)/4:length(imageFiles)-1
figure,
%%%%%%%%%%%%%%%%%%%%%%%%%%求取阈值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = z:(length(imageFiles)-1)/4+z-1
fileName = imageFiles(k).name; % 当前文件名,注意这里不含路径信息
I = rgb2gray(imread( [folderPath, fileName] ))- GrayRoad; % 将图像数据读入矩阵
th(k-z+1)=graythresh(I);
end
th1=sum(th)/length(th)-0.045;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = z:(length(imageFiles)-1)/4+z-1
fileName = imageFiles(k).name; % 当前文件名,注意这里不含路径信息
I0 = imread([folderPath, fileName]);
% J=midfilter(I);
I = rgb2gray(I0)- GrayRoad; % 将图像数据读入矩阵
% [mu,mask]=kmeans(J,2);
% th=graythresh(I);
% I=midfilter(I); %中值滤波
I=im2bw(I,th1); %分割
J=midfilter(I);
I=imclose(J,se2); %闭运算
I=imopen(I,se1); %开运算
[Car,num,Rect] = CarProc(I); %标记、计数、求坐标
subplot(m,n,k-z+1);imshow(I0,[]); title(num2str(k))
midCar=Car;
if k~=1
for v=1:num
[r,c]=size(Car);
Car1=Car;
for x=1:r
for y=1:c
if Car1(x,y)~=v
Car1(x,y)=0;
end
end
end
J=Car1.*Car0;
if J==0
[r1,c1]=find(Car1~=0);
a=a+1;
for k1=1:length(r1)
midCar(r1(k1),c1(k1))=a;
end
q=a;
if (q>7)&&(q<=14)
q=q-7;
end
if q>14
q=q-14;
end
rectangle('Position',Rect(v,:),'EdgeColor',color(q,:),'LineWidth',1);
text(Rect(v,1),Rect(v,2),num2str(a),'color','r');
else
[r1,c1]=find(Car1~=0);
[c2,d2]=find(Car1.*Car0~=0);
for k1=1:length(r1)
midCar(r1(k1),c1(k1))=Car0(c2(1),d2(1));
end
g=Car0(c2(1),d2(1));
if (Car0(c2(1),d2(1))>7)&&(Car0(c2(1),d2(1))<=14)
g=Car0(c2(1),d2(1))-7;
end
if Car0(c2(1),d2(1))>14
g=Car0(c2(1),d2(1))-14;
end
rectangle('Position',Rect(v,:),'EdgeColor',color(g,:),'LineWidth',1);
text(Rect(v,1),Rect(v,2),num2str(Car0(c2(1),d2(1))),'color','r');
end
end
else
for v=1:num
if num>0
a=a+1;
text(Rect(v,1),Rect(v,2),num2str(a),'color','r');
rectangle('Position',Rect(v,:),'EdgeColor',color(q,:),'LineWidth',1);
end
end
end
Car0=midCar;
end
end
% search(1); %图像检索
C70
以上是关于对视频中的车辆进行计数,MATLAB仿真的主要内容,如果未能解决你的问题,请参考以下文章
车辆计数基于matlab光流法行驶车辆检测计数含Matlab源码 627期
车辆分类基于matlab的视频中车辆跟踪监测分类算法仿真,包括背景差分与帧间差分以及形态学处理