logo资料库

基于MATLAB的vibe算法的运动目标检测代码.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
Vibe 算法原代码 video = VideoReader('DSC_0005.MOV');%读取视频文件 height = video.Height;%获取视频高度参数 width = video.Width;%获取视频宽度参数 se = strel('disk',1); %% 设置参数 NumFrames = video.NumberOfFrames;%获取视频总帧数 cardinality =2;%阈值 r = 20;%给定半径 n = 20;%样本集数目 %% 初始化 bg = zeros(height,width,n);%初始化 20 个高为 height,宽为 width 的图像文件 bg1=zeros(height,width,NumFrames);%初始化 NumFrames 个高为 height,宽为 width 的图像文件 for nn = 1 : n imrgb = read(video,nn);%读取图像 imgray = rgb2gray(imrgb);%灰度化 bg(:,:,nn) = imgray; end bgpad = padarray(bg,[1 1],'replicate'); %% 随机更新 for f = 25 : NumFrames imageRGB = read(video,f);%读取图像 image = rgb2gray(imageRGB);%灰度化 for i = 1:height for j = 1:width div = abs(bg(i,j,:) - double(image(i,j)));%获取欧氏距离 logic = div < r; bignum = sum(logic); if bignum > cardinality 随机选择初始化背景中的一个点用新点进行替换 bg1(i,j,f)=0; %% randz = randi(n); bgpad(i+1,j+1,randz) = image(i,j); %% randy = randi([-1 1]); randx = randi([-1 1]); bgpad(i+1+randy,j+1+randx,randz) = image(i,j); 随机改变(i,j)邻域 bg1(i,j,f)=255; else end end
end bg1(:,:,f) = bwareaopen(bg1(:,:,f),300); bg1(:,:,f)=imdilate(bg1(:,:,f),se); axes(handles.axes2); imshow(bg1(:,:,f)); disp(f); [L,num]=bwlabel( bg1(:,:,f));%bwlabel 是用来标记二值图像中的连通区域 axes(handles.axes1); imshow(imageRGB); hold on; RGB=label2rgb(L);%转换标记矩阵到 RGB 图像 STATS=regionprops(L, 'all'); for i=1:num y = ceil(STATS(i).BoundingBox(1));%图像的横竖行 r x = ceil(STATS(i).BoundingBox(2));%图像的竖行 c h = ceil(STATS(i).BoundingBox(3));%图像的横竖行 r w = ceil(STATS(i).BoundingBox(4));%图像的竖行 c rectangle('Position',[y,x,h,w],'EdgeColor', 'r'); % end drawnow end
分享到:
收藏