tyhj327
2009-05-16, 21:47
clear all
close all
aviobj=avifile('object.avi');
info=aviinfo('D:\SampleVideo.avi');
numframe=info.NumFrames;
mov=aviread('D:\SampleVideo.avi');
frame1=frame2im(mov(1,1));
frame1=rgb2gray(frame1);
% imshow(frame1);
[m,n]=size(frame1);
for i=1:numframe-1
%提取第i帧和第i+1帧,并将之转化为两幅图像
f1=aviread('D:\SampleVideo.avi',i);
f2=aviread('D:\SampleVideo.avi',i+1);
f1=frame2im(f1);
I1=rgb2gray(f1);
f2=frame2im(f2);
I2=rgb2gray(f2);
%求差分图像并二值化
Im=abs(imsubtract(I2,I1));
if Im>150
Imby=1;
else
Imby=0;
end
I=Imby;
%求二值后目标图像的质点
M00=0;
M10=0;
M01=0;
M20=0;
M02=0;
M11=0;
for j=1:m;
for k=1:n;
M00=M00+I(j,k);
M10=M10+j*I(j,k);
M01=M01+k*I(j,k);
M20=M20+(j^2)*I(j,k);
M02=M02+(k^2)*I(j,k);
M11=M11+j*k*I(j,k);
end
end
xcenter=M10/M00;
ycenter=M01/M00;
a=M20/M00-xcenter^2;
b=M11/M00-xcenter*ycenter;
c=M02/M00-ycenter^2;
%下段程序实现功能:求目标长轴与短轴的长度以确定目标大小
l=sqrt(1/2*((a+c)+sqrt(b^2+(a-c)^2)));%目标长轴计算
w=sqrt(1/2*((a+c)-sqrt(b^2+(a-c)^2)));%目标短轴计算
xmin=round(xcenter-l/2);
xmax=round(xcenter+l/2);
ymin=round(ycenter-w/2);
ymax=round(ycenter+w/2);
%以目标中心为中心画框形以框住目标
tagx=[xmin,xmax,xmax,xmin];
tagy=[ymin,ymin,ymax,ymax];
fill(x,y,'w');
%将图像转化为帧,并加入到新avi文件中
I1=gray2rgb(I1);
I1=im2frame(I1);
aviobj=addframe(aviobj,I1);
end
mov=aviread('aviobject.avi');
movie(mov);
执行后,出现“index exceeds matrix dimensions"! 在此多谢了!急!能给出详细的程序改正语句,更好!
close all
aviobj=avifile('object.avi');
info=aviinfo('D:\SampleVideo.avi');
numframe=info.NumFrames;
mov=aviread('D:\SampleVideo.avi');
frame1=frame2im(mov(1,1));
frame1=rgb2gray(frame1);
% imshow(frame1);
[m,n]=size(frame1);
for i=1:numframe-1
%提取第i帧和第i+1帧,并将之转化为两幅图像
f1=aviread('D:\SampleVideo.avi',i);
f2=aviread('D:\SampleVideo.avi',i+1);
f1=frame2im(f1);
I1=rgb2gray(f1);
f2=frame2im(f2);
I2=rgb2gray(f2);
%求差分图像并二值化
Im=abs(imsubtract(I2,I1));
if Im>150
Imby=1;
else
Imby=0;
end
I=Imby;
%求二值后目标图像的质点
M00=0;
M10=0;
M01=0;
M20=0;
M02=0;
M11=0;
for j=1:m;
for k=1:n;
M00=M00+I(j,k);
M10=M10+j*I(j,k);
M01=M01+k*I(j,k);
M20=M20+(j^2)*I(j,k);
M02=M02+(k^2)*I(j,k);
M11=M11+j*k*I(j,k);
end
end
xcenter=M10/M00;
ycenter=M01/M00;
a=M20/M00-xcenter^2;
b=M11/M00-xcenter*ycenter;
c=M02/M00-ycenter^2;
%下段程序实现功能:求目标长轴与短轴的长度以确定目标大小
l=sqrt(1/2*((a+c)+sqrt(b^2+(a-c)^2)));%目标长轴计算
w=sqrt(1/2*((a+c)-sqrt(b^2+(a-c)^2)));%目标短轴计算
xmin=round(xcenter-l/2);
xmax=round(xcenter+l/2);
ymin=round(ycenter-w/2);
ymax=round(ycenter+w/2);
%以目标中心为中心画框形以框住目标
tagx=[xmin,xmax,xmax,xmin];
tagy=[ymin,ymin,ymax,ymax];
fill(x,y,'w');
%将图像转化为帧,并加入到新avi文件中
I1=gray2rgb(I1);
I1=im2frame(I1);
aviobj=addframe(aviobj,I1);
end
mov=aviread('aviobject.avi');
movie(mov);
执行后,出现“index exceeds matrix dimensions"! 在此多谢了!急!能给出详细的程序改正语句,更好!