function [f1,foc,g1]=motion_detection()
%function [f1,foc,g1]=motion_detection()
%---------------------------------------
%该函数用于运动目标检测和轮廓提取
%f1:运动目标的二值图像
%foc:经过开闭运算运动目标的二值图像
%g1:经轮廓提取运动目标图像
%-------------------------------------
%读入视频序列,用两副图像代替
f=imread('3.jpg');
f=rgb2gray(f);
f1=imread('2.jpg');
g1=f1;
f1=rgb2gray(f1);
%用加权的空域平滑算法预处理图像
w=[1 2 1;2 4 2;1 2 1]/16;
f=imfilter(f,w,'replicate');
f1=imfilter(f1,w,'replicate');
%获取运动目标--------------------
for i=1:288
for j=1:352
if(abs(f1(i,j)-f(i,j))>10)
f1(i,j)=255;
else
f1(i,j)=0;
end
end
end
%转化为二值图像进行形态学开和闭运算并显示图像
f1=im2bw(f1);
imshow(f1);
imwrite(f1,'test.jpg');
%se=strel('square',3);
se=strel('disk',3);
fo=imopen(f1,se);
foc=imclose(fo,se);
figure,imshow(foc);
imwrite(foc,'test1.jpg');
%简易的运动目标标注并显示结果
for i=2:287
for j=2:351
if(foc(i,j)==1&&foc(i,j+1)*foc(i+1,j)*foc(i,j-1)*foc(i-1,j)~=1)
g1(i,j)=255;
end
end
end
figure,imshow(g1);
imwrite(g1,'test2.jpg');
评论0