1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWYkpdx
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
由于这里,需要统计的人数,其主要特征是头部信息较为完整,而身体部分存在较大的重叠,所以这里我们主要对头部进行提取。
具体思路如下:
目标提取,获得视频的运动部分;
背景去除,干扰去除,通过这个步骤,获得无背景干扰的运动目标
通过提取头部头发纹理以及脸部特征的方法获得每个目标的头部,并通过边缘检测的方法,提取头部轮廓信息。
4.部分源码
.........................................................
global xlag;
global CNT;
global frm;
global PEOPLE;
frm = 1;
xlag = 0;
CNT = 0;
PEOPLE = 0;
START = 150;
%读取视频
PIX = VideoReader('test.avi');
PIX_Size = [PIX.Width,PIX.Height];
Num_Frame = floor(PIX.Duration * PIX.FrameRate);
%参数初始化
for i = START:550
PIX_each_frame = imresize(read(PIX,i),1/4);
%1:预处理
I0 = func_median(PIX_each_frame,5);
%2:头部提取
%边缘检测
I1 = edge(I0,'canny');
%边缘修复
I2 = func_distancemap(I1);
%轮廓检测,检测边缘中最接近圆的区域,头部定位
[I3,L1] = func_head_detection(I2,PIX_each_frame);
figure(1);
subplot(231);
imshow(PIX_each_frame);
title('原始视频');
subplot(232);
imshow(I0);
title('中值滤波视频');
subplot(233);
imshow(I1);
title('边缘检测效果');
subplot(234);
imshow(I3,[]);
title('头部定位');
subplot(236);
imshow(I3,[]);
STR = ['第',num2str(i-START+1),'帧','共检测到',num2str(PEOPLE),'人'];
title(STR,'Color','r','fontsize',15);
drawnow;
end
10_028_m