混合高斯背景模型 matlab,背景混合高斯背景建模matlab代码

c lea r a l l

%so u rce=av iread('C:\V id eo\So u rce\traff ic\sa n_fr a n_traff ic_30 sec_QVGA');source=mmreader('SampleVideo.avi');frameQYT=get(sou rce,'Nu m berOfFram es');

%-----------------------frames izevariab les-----------------------fr=read(so u rce,1);%读取第一帧作为背景fr_bw=rg b2g ray(fr);%将背景转换为灰度图像fr_s ize=s ize(fr);%取帧大小w id t h=fr_s ize(2);height=fr_size(1);fg=zeros(h e ig ht,w idth);bg_bw=zeros(he ig ht,w idth);

%---------------------mogvariables-----------------------------------

C=4;%组成混合高斯的单高斯数目(一般3-5)

M=0;%组成背景的数目

D=2.5;%阈值一般2.5个标准差a lpha=0.01;%learn ingrate学习率决定更新速度(between0and 1)(frompaper0.01)thresh=0.75;%foreg roundthreshold 前 景 阈 值(0.25or0.75 in paper)sd_in it=6;%in it ia lstandarddev iat ion 初 始 化 标 准 差(fornewcomponents)var=36inpaperw=zeros(h e ig ht,w idth,C);%in it ia l izewe ig htsarray初始化权值数组mean=zeros(h eight,width,C);%pixelmeans像素均值sd=zero s(h e ig h t,w id t h,C);%p ix e lsta n d a rd d ev iat io n s像素标准差u_diff=zeros(h eight,width,C);%differenceofeachpixelfrom mean与均值的差p=alpha/(1/C);%in it ia lpvariab le参数学习率(usedtoupdatemeanandsd)rank=zeros(1,C);%rankofcomponents(w/sd)

%------in itia l izecomponentmeansandweights初始化均值和权值----------pixel_depth=8;%8-bitreso lution像素深度为8位pixel_range=2^pixel_depth-1;%pixelrange像素范围2的7次方0—255 #ofpossib leva lues)fori=1:heightfo rj=1:wid thfork=1:Cmean(i,j,k)=rand*pixe l_range;%meansrandom(0-255之间的随机

数)w(i,j,k)=1/C;%weig htsu n iform ly d istsd(i,j,k)=sd_in it;%in it ia l izetosd_in itendendend

%-----p rocessfram es-处理帧--这里去第八帧n=8;fr=read(sou rce,n);%read inframe读取帧fr_bw=rg b2g ray(fr);%co nvertframetog rayscale转换为灰度图像

%calculated ifferenceofpixelvaluesfrommean计算像素差值form=1:Cu_d iff(:,:,m)=abs(d o u b le(fr_bw)-do u ble(mean(:,: ,m)));end

%updategaussiancomponentsforeachpixel更新每个像素的背景模型fori=1:heightfo rj=1:widthmatch=0;fork=1:Cif(abs(u_diff(i,j,k))<=D*sd(i,j,k))%pixelmatchescomponent像素匹配了模型match=1;%variabletosig na lcom ponentmatch设置

匹配记号

%u pdateweig hts,mean,sd,p更新权值均值 标准差和参数学习率w(i,j,k)=(1-alpha)*w(i,j,k)+alpha;p=alpha/w(i,j,k);mean(i,j,k)=(1-p)*mean(i,j,k)+p*d o u ble(fr_bw(i,j));sd(i,j,k)=sq rt((1-p)*(sd(i,j,k)^2)+p*((d o u b le(fr_bw(i,j))-m ea n(i,j,k)))^2);else%p ixeldoesn'tmatchcomponent几个模型中都没有匹配的w(i,j,k)=(1-a lpha)*w(i,j,k);%weightsl igh lydecreases权值减小endendbg_bw(i,j)=0;fork=1:Cbg_bw(i,j)=bg_bw(i,j)+mean(i,j,k)*w(i,j,k);%更新背景if(bg_bw(i,j)>thresh)k=k-1;

M=k;end%???? 这里有问题背景权值和大于阈值时 背景建模的数目M取k-1,end

%ifnocomponentsmatch,createnewcomponent如果没有匹配的模型则创建新模型if(match==0)

[m in_w,m in_w_index]=m in(w(i,j,:));m ean(i,j,m in_w_ind ex)=d o u b le(fr_bw(i,j));sd(i,j,m in_w_index)=sd_in it;endrank=w(i,j,:)./sd(i,j,:);%ca lculatecomponentrank计算模型优先级ran k_ind=[1:1:C];

%calcu lateforeg rou nd计算前景whi le((match==0)&&(k>M))%?????C- 这里用于前景计算的高斯模型应该是M,所以这里k>Mif(abs(u_diff(i,j,rank_ind(k)))<=D*sd(i,j,rank_ind(k)))fg

(i,j)=0;%black=0e lsefg(i,j)=fr_b w(i,j);endk=k+1;if(k==5)k=k-1;b rea kendendendendfigure(1),subp lot(3,1,1),imshow(fr)%显示输入图像subplot(3,1,2),imshow(u int8(bg_bw))%显示背景图像subplot(3,1,3),imshow(u int8(fg))%显示前景图像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值