您现在的位置:首页 >> 机器学习 >> 内容

m基于形态学处理和SVM的视频行人密集度分析matlab仿真

时间:2023/1/23 21:00:09 点击:

  核心提示:10_007_m,包括程序操作录像+说明文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y56Xm55v

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览





3.算法概述

        行人检测技术已经成为计算机视觉领域的关键研究方向。行人检测的最重要的任务就是对行人目标进行准确定位。行人检测技术有很强的使用价值,可以与多人跟踪、行人重识别等技术结合,应用于汽车无人驾驶系统、智能机器人、智能视频监控、人体行为分析、人流量统计系统、智能交通领域。

        目前的行人检测任务主要为基于图像特征的方法。基于图像特征的方法,主要通过手动构造行人特征,如hog等,再结合svm、adaboost等分类器训练检测器来实现行人检测。在实际场景下,多个行人与摄像头之间的距离远近不一,摄像头捕获的图像中行人尺寸不同,而现有检测过程中的特征尺寸单一,无法覆盖所有的待检测行人尺寸,出现漏检情况,导致检测效果不佳。另外,在密集人群场景下,行人之间会出现重叠情况,检测出多个目标的候选区域框距离比较近时,在最终去掉重复任务的检测框时,容易误除,导致密集行人检测效果不佳。

4.部分源码

folder     = 'Vedio\02\';

list       = dir('Vedio\02\*.jpg');

level      = 60;

level2     = 0.25;

level3     = 8000;%用来区分低密度还是中高密度的门限值

level4     = 1200;

flag       = 0;%1:低密度,0:高密度

density    = 1;%定义一个密度变量,记录不同时刻的密度变化

%step1:读取图片序列

[n_frames,I3] = func_readvedio(folder,list);

%step2:提取背景

back3 = func_getbackground(I3,n_frames,level);

rows = size(I3,1);    

cols = size(I3,2); 

clear  folder list;

%由于是基于视屏的,所以下面采用一个循环的处理方法进行处理,每次只处理一个图片

for k = 1:n_frames%下面的处理都是基于逐帧的

    disp('当前帧数');k

    %step3:背景差

    images2(1:rows,1:cols,k) = func_subbackground(I3(1:rows,1:cols,k),back3,level2); 

    %step4:形态学处理

    images3(1:rows,1:cols,k) = func_Xintai(images2(1:rows,1:cols,k)); 

    %step5:统计前景像素数目

    Num(k) = func_pixel(images3(1:rows,1:cols,k));

        %低密度

        %低密度

        if Num(k) < level3%说明是低密度

        flag       = 1;    

            %step6:边缘检测

            images4(1:rows,1:cols,k) = func_edgecheck(images3(1:rows,1:cols,k));

            %step7:统计前景边缘像素数目

            Num2(k) = func_pixel(images4(1:rows,1:cols,k));

              if Num2(k) <level4

              disp('人口密度很低,密度等级:1');    

              density(k) = 1;

              else

              disp('人口密度低  ,密度等级:2'); 

              density(k) = 2;

              end    

        end

        %高密度

        %高密度        

        if Num(k) > level3%说明是中高密度

        flag       = 0;    

        %人群密度特征提取

        d=1;

        [Energy8_0(k),Contrast8_0(k),Correlation8_0(k),Homogeneity8_0(k)] = func_different_L_features(images3(1:rows,1:cols,k),k,d); 

        level = 8;    

        %选取0度和90度的作为训练数据

        [train1_data_0,train1_data_90,train2_data_0,train2_data_90,test_data_0,test_data_90]=func_loaddata(level);

        %high_low = 1; %中密度分类值

        %high_low = -1;%高密度分类值

        %输出结果为error=1,说明不是该类;输出为0,说明属于某类型

        %0度数据的训练

        [error01,Output01] = func_classifer(train1_data_0,train2_data_0,test_data_0,1);

        [error02,Output02] = func_classifer(train1_data_0,train2_data_0,test_data_0,-1);

        %90度数据的训练

        %[error901,Output901] = func_classifer(train1_data_90,train2_data_90,test_data_90,1);            

        %[error902,Output902] = func_classifer(train1_data_90,train2_data_90,test_data_90,-1);     

            if error01 == 0 & error02 == 1   

            disp('人口密度高  ,密度等级:4');

            density(k) = 4;

            end

            if error01 == 1 & error02 == 0

            disp('人口密度中  ,密度等级:3');

            density(k) = 3;

            end

        end    

        figure(1);

        imshow(I3(1:rows,1:cols,k));

        title(['人口密度等级',num2str(density(k))]);

        drawnow

end

if flag == 1

figure;    

%1随帧数变化前景像素数变化曲线

subplot(211);plot(Num,'b-*');title('随帧数变化前景像素数变化曲线');

%3前景人数与人数的拟合曲线

%曲线拟合

xdata1=1:length(Num);

a1=polyfit(xdata1,Num,1);

y1=polyval(a1,xdata1);

%人数曲线拟合

x1=1:8;

y1=5*a1(1)*x1+a1(2);

subplot(212);plot(y1,x1,'r-*');

title('前景人数与人数的拟合曲线');

end

10_007_m

作者:我爱C编 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168