matlab前景分割
Posted mask_天俊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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前景分割的主要内容,如果未能解决你的问题,请参考以下文章
图像分割基于类间方差阈值图像分割与腐蚀膨胀matlab源码含GUI
图像分割基于类间方差阈值图像分割与腐蚀膨胀matlab源码含GUI
OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorLSBP的使用示例代码及运行效果
OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGSOC的使用示例代码及运行效果