时间长了,也不知道原作者是谁了,先帖子在这里
% mov=aviread('2.avi');%读取视频帧,视频格式为[1*100]Struct
% temp=size(mov); %temp=[1 100]
% fnum=temp(2); %fnum=100
%
% for i=1:fnum,
% strtemp=strcat(int2str(i),'.','JPG');
% imwrite(mov(i).cdata(:,:,:),strtemp);
% end %从视频中提出每一帧图像
o=3;
e='.jpg';
for i=1:20
u=o-1;v=o-2;
m=int2str(o);
n=int2str(u);
h=int2str(v);
s=strcat(m,e); %%把字符串b与m连接后在连接e得到图像文件存储的位置
m=imread(s); %%从S处把图像读取出来
m=rgb2gray(m); %%将图像M灰度化
s=strcat(n,e); %%把字符串b与m连接后在连接e得到图像文件存储的位置
n=imread(s); %%从S处把图像读取出来
n=rgb2gray(n); %%将图像M灰度化
s=strcat(h,e); %%把字符串b与m连接后在连接e得到图像文件存储的位置
h=imread(s); %%从S处把图像读取出来
h=rgb2gray(h); %%将图像M灰度化
m=medfilt2(m,[3,3]); %%中值滤波
n=medfilt2(n,[3,3]); %%中值滤波
h=medfilt2(h,[3,3]); %%中值滤波
q=im2double(m); %%将图像数组转换为double型
w=im2double(n); %%将图像数组转换为double型
g=im2double(h); %%将图像数组转换为double型
c=q-w;j=w-g; %作帧差
th=10/255; %设定阈值
se90=strel ('line',3,90);se0=strel ('line',3,0);%构造结构元素
%第一帧间差
k=find(abs(c)>=th);
c(k)=1;
k=find(abs(c)<th);
c(k)=0;
se=strel('diamond',5);
c=bwareaopen(c,15); %删除小面积对象
%c=bwmorph(c,'close'); %形态学闭运算
%c=imdilate(c,[se90,se0]); %膨胀运算
c=imdilate(c,se); %膨胀运算
%c=bwmorph(c,'close'); %形态学闭运算
%c=bwareaopen(c,50); %删除小面积对象
%第二帧间差
k=find(abs(j)>=th);
j(k)=1;
k=find(abs(j)<th);
j(k)=0;
j=bwareaopen(j,15); %删除小面积对象
%j=bwmorph(j,'close'); %形态学闭运算
%j=imdilate(j,[se90,se0]); %膨胀运算
j=imdilate(j,se); %膨胀运算
%j=bwmorph(j,'close'); %形态学闭运算
%j=bwareaopen(j,50); %删除小面积对象
c=c&j;
%c=imerode(c,[se90,se0]); %腐蚀运算
a=c;b=c;d=c;f=c;
[m,n]=size(c);
%%行扫描填充
for i=1:m
for j=1:n-1
if a(i,j)>0
a(i,j+1)=1;
end
end
end
for i=1:m
for j=n:-1:2
if b(i,j)>0
b(i,j-1)=1;
end
end
end
th=a&b;
%%列扫描填充
for i=1:n
for j=1:m-1
if d(j,i)>0
d(j+1,i)=1;
end
end
end
for i=1:n
for j=m:-1:2
if f(j,i)>0
f(j-1,i)=1;
end
end
end
td=d&f;
c=th&td;
figure,imshow(c);
o=o+1;
end