人员密集程度检测计数仿真:基于Matlab的视频分析

1.软件版本

matlab2013b

2.部分核心代码

第一步:读取图片视屏序列

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

n_frames = 0;

for i=1:length(list)

   I  = imread(fullfile(folder,list(i).name));

   I2 = rgb2gray(uint8(I));

   I3(:,:,i) = I2;

   n_frames  = n_frames + 1;

end

这样写可以专门用来读取连续编号的图片序列作为视屏。

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_边缘检测



第二步:提取背景

这个部分的方法参考您提供的论文的这个部分:

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

对应的代码如下所示:

function back3 = func_getbackground(image,frames,T);

rows = size(image,1);    

cols = size(image,2);    

d(1:rows,1:cols,1)          = image(1:rows,1:cols,1);

for k = 2:frames

   d(1:rows,1:cols,k)      = image(1:rows,1:cols,k) - image(1:rows,1:cols,k-1);

end

//以上就是求解图像的差分

CDM(1:rows,1:cols,2:frames) = d(1:rows,1:cols,2:frames);

CDM(abs(CDM) <  T)=0;

CDM(abs(CDM) >= T)=255;

//求CDM值

m=0;

for i=1:rows

for j=1:cols

for k=2:frames

if CDM(i,j,k) == 0

            m(k)=1;

end

if CDM(i,j,k) == 255

            m(k)=rand(1);

end

end

            position(i,j) = func_position(m);

end

end

//求解CDM中最大的连0的坐标

for i=1:rows

for j=1:cols

   back3(i,j) =image(i,j,position(i,j));    

end

end

//获得背景

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_边缘检测_03



第三步:当前图片与背景的差

function images2 = func_subbackground(image,back,frames,T2);

rows = size(image,1);    

cols = size(image,2);

for k=1:frames

   images(1:rows,1:cols,k)  = back(1:rows,1:cols)-image(1:rows,1:cols,k);  

   images2(1:rows,1:cols,k) = im2bw(images(1:rows,1:cols,k),T2);  

end

这里求解差,并将得到的结果求二值图

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



第四步:形态学处理

rows = size(image,1);    

cols = size(image,2);

for k=1:frames

    images3(1:rows,1:cols,k)=bwareaopen(image(1:rows,1:cols,k),10);

end

这里我们主要将视屏中的个别噪点去掉使画面更加’干净’;

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_拟合_05



第五步:边缘检测

function images = func_edgecheck(image,frames);

rows = size(image,1);    

cols = size(image,2);

for k = 1:frames

for i=2:rows

for j=2:cols

if image(i,j,k)==1 &&(image(i+1,j,k)==0||image(i-1,j,k)==0||image(i,j+1,k)==0||image(i,j-1,k)==0)

        images(i,j,k)=255;

else

        images(i,j,k)=0;

end

end

end

end

普通边间求解法

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



第六步:求解前景像素数

function Num = func_pixel(image,frames);

rows = size(image,1);    

cols = size(image,2);

Num(1:frames)  = 0;

for k = 1:frames

for i=2:rows

for j=2:cols

if image(i,j,k)>0

             Num(k) = Num(k)+1;

end

end

end

end

plot(Num,'r-*');

grid;

ylabel('ÏñËØÊý');

xlabel('Ö¡ÊýÄ¿');

title('µÍÃܶÈÈË¿ÚÃܶÈ');

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_边缘检测_07



第七步:拟合说明

这个步骤主要是通过求的的像素值与实际存在的人数进行拟合。其拟合效果如下所示:

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_边缘检测_08


【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_曲线拟合_09

通过拟合得到人数和像素数的关系曲线为:

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

【视频人员密集程度检测计数】基于MATLAB的人员密集程度检测计数仿真_拟合_11

即在低密度的条件下,像素数和人数的关系曲线。


clc;clear;close all;Max_num = 8;%本视屏的最大人数数目folder     = 'Vedio\01\';list       = dir('Vedio\01\*.jpg');level      = 60;level2     = 0.25;%step1:读取图片序列[n_frames,I3] = func_readvedio(folder,list);implay(I3);%step2:提取背景back3 = func_getbackground(I3,n_frames,level);figure;imshow(uint8(back3));%step3:背景差images2 = func_subbackground(I3,back3,n_frames,level2);implay(images2);%step4:形态学处理images3 = func_Xintai(images2,n_frames);implay(images3); %step5:边缘检测images4 = func_edgecheck(images3,n_frames);implay(images4);%step6:统计前景像素数目Num1 = func_pixel(images3,n_frames);%曲线拟合xdata1=1:length(Num1);a1=polyfit(xdata1,Num1,1);y1=polyval(a1,xdata1);figure;plot(y1,'b-*');hold on;plot(Num1,'r-*');a1%人数曲线拟合figure;x1=1:Max_num;y1=5*a1(1)*x1+a1(2);plot(y1,x1,'r-*');title('前景人数');grid on;%step6:统计前景边缘像素数目Num2 = func_pixel(images4,n_frames);%曲线拟合xdata2=1:length(Num2);a2=polyfit(xdata2,Num2,1);y2=polyval(a2,xdata2);figure;plot(y2,'b-*');hold on;plot(Num2,'r-*');a2%人数曲线拟合figure;x2=1:Max_num;y2=5*a2(1)*x2+a2(2);plot(y2,x2,'r-*');title('前景边缘人数');grid on;1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空