对视频中的车辆进行计数,MATLAB仿真

Posted fpga&matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对视频中的车辆进行计数,MATLAB仿真相关的知识,希望对你有一定的参考价值。

1.仿真预览

2.部分核心代码

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的视频中车辆跟踪监测分类算法仿真,包括背景差分与帧间差分以及形态学处理

毕设题目:Matlab车辆计数

视频人员密集程度检测计数基于MATLAB的人员密集程度检测计数仿真

Matlab/simulink 车辆七自由度平顺性仿真

车辆计数基于matlab GUI背景差分法道路行驶多车辆检测含Matlab源码 1911期