首页 > 代码库 > matlab前景分割
matlab前景分割
用最简单的差分法实现了一下前景分割。使用的mall数据集。
思路是这样的:首先设定一个队列的长度,若读取的图片张数少于队列长度则以当前读取到的图片做平均。否则则以队列中的图片做平均。
还计算了队列中图片每个像素点期望,设定一个期望阈值,只要小于阈值的像素,因为证明这个像素在队列中变化很少,所以当作背景。
这样之后在做差分,大于差分阈值的就是前景。
%init close all ; path = ‘./mall_dataset/frames/‘; numofImages = 30 ; image_cells = cell(numofImages,1) ; E = cell(numofImages,1) ; Em = cell(numofImages,1) ; %param Wh = 10 ;%人高 Ww = 5 ;%人宽 defualtLenOfList = 5 ;%前景差分时默认的队列长度 var_t = 5 ; %方差阈值 dif_t = 60 ;%差分阈值 %kenel gaussian_kenel = fspecial(‘gaussian‘,3,0.5) ; %program for i=1:numofImages temp = i ; prefix = ‘seq_00‘ ; while temp < 1000 prefix = strcat(prefix,‘0‘) ; temp = temp*10 ; end prefix = strcat(prefix,num2str(i)) ; I=imread([path,prefix,‘.jpg‘]); %依次读取每一幅图像 I = rgb2gray(I); I = imfilter(I,gaussian_kenel) ; %I = uint8(I) ; [Gmag,Gdir] = imgradient(I) ; E{i}.Gmag = Gmag; E{i}.Gdir = Gdir ; image_cells{i} = I ; %todo strip高=wp/W? 不一定好 %差分处理 Gmean = 0 ; if i~=1 if i>defualtLenOfList lenoflist = defualtLenOfList ; else lenoflist = i-1 ; end Lstart = i-lenoflist ; Ltail = i-1 ; for j=Lstart:Ltail Gmean = Gmean + (E{j}.Gmag ./ lenoflist) ; end Lmean = 0 ; Lvar = 0 ; if lenoflist>=10 for k=Lstart:Ltail Lmean = Lmean + (E{k}.Gmag./lenoflist) ; end for k=Lstart:Ltail Lvar = Lvar+((E{k}.Gmag-Lmean).^2)./lenoflist ; end Gmean = Gmean(:).*(Lvar<var_t) ; end Gmoving = E{i}.Gmag - Gmean ; Gmoving = Gmoving .* (Gmoving>dif_t) ; G = uint8(Gmoving); imshow(G) ; end end
matlab前景分割
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。