📄 fenge.m
字号:
clear;
mov=aviread('现代文明的结果.avi'); %视频读入
Info=aviinfo('现代文明的结果.avi'); %提取视频信息
fnum=Info.NumFrames;
% fnum=10;
width=Info.Width;
height=Info.Height;
Data=zeros(height,width,3,fnum); %存放图像序列的数据
Data=uint8(Data);
Y=zeros(height,width,fnum); %用于存储图像的亮度信息
for i=1:fnum %视频结构转换图像序列
temp=mov(i);
A=temp.cdata;
Data(:,:,:,i)=A;
for j=1:height %RGB转换Y(亮度信息)
for k=1:width
Y(j,k,i)=0.299*A(j,k,1)+0.587*A(j,k,2)+0.114*A(j,k,3);
end
end
end
Y=uint8(Y);
for i=1:fnum-1
d(i)=0;
[count1,x]=imhist(Y(:,:,i)); %统计亮度直方图
[count2,x]=imhist(Y(:,:,i+1));
for j=1:256 %差异度距离度量函数
d(i)=d(i)+abs(count2(j)-count1(j));
% d(i)=d(i)/(height*width);
end
end
x1=1:fnum-1;
figure(1);
subplot(411);
stem(x1,d,'.k'); %FDDK函数图形
title('差异度函数图');
t=-10:1:10;
%尺度j=0小波变换
y1=exp(-t.^2/(2))/((sqrt(2*pi))); %高斯变换
y2=conv(y1,d);
n1=size(d,2)
n2=size(t,2);
n=(n2-1)/2;
for i=1:n1
y3(i)=y2(n+i);
end
for i=1:n1-1 %求导
dy(i)=y3(i+1)-y3(i);
end
dy(n1)=y3(n1);
figure(1);
subplot(412);
stem(x1,dy,'.k');
title('尺度j=0小波变换图形');
%尺度j=1小波变换
yy1=exp(-(t/2).^2/(2))/((sqrt(2*pi))*2);%高斯变换
yy2=conv(yy1,d);
for i=1:n1
yy3(i)=yy2(n+i);
end
for i=1:n1-1 %求导
dyy(i)=yy3(i+1)-yy3(i);
end
dyy(n1)=yy3(n1);
figure(1);
subplot(413);
stem(x1,dyy,'.k');
title('尺度j=1时小波变换图形');
%尺度j=2小波变换
by1=exp(-(t/4).^2/(2))/((sqrt(2*pi))*4); %高斯变换
by2=conv(by1,d);
for i=1:n1
by3(i)=by2(n+i);
end
for i=1:n1-1 %求导
dby(i)=by3(i+1)-by3(i);
end
dby(n1)=by3(n1);
figure(1);
subplot(414);
stem(x1,dby,'.k');
title('尺度j=2时小波变换图形');
%每一分辨率下检测局部模极大值
dym=zeros(n1); %尺度j=0时小波变换局部模极大值
for i=2:n1-1
if (abs(dy(i-1))<=abs(dy(i)))&(abs(dy(i))>=abs(dy(i+1)))
dym(i)=dy(i);
end
end
figure(2);
subplot(311);
stem(x1,dym,'.k');
title('尺度j=0小波变换模极大值图形');
%尺度j=1时小波变换局部模极大值
dyym=zeros(n1);
for i=2:n1-1
if (abs(dyy(i-1))<=abs(dyy(i)))&(abs(dyy(i))>=abs(dyy(i+1)))
dyym(i)=dyy(i);
end
end
figure(2);
subplot(312);
stem(x1,dyym,'.k');
title('尺度j=1小波变换模极大值图形');
%尺度j=2时小波变换局部模极大值
dbym=zeros(n1);
for i=2:n1-1
if (abs(dby(i-1))<=abs(dby(i)))&(abs(dby(i))>=abs(dby(i+1)))
dbym(i)=dby(i);
end
end
figure(2);
subplot(313);
stem(x1,dbym,'.k');
title('尺度j=2小波变换模极大值图形');
%去除噪声
T=height*width*0.006; %设定阈值
for i=1:n1
if abs(dbym(i))<T %j=2去噪
dbym(i)=0;
end
if abs(dyym(i))<2*T %j=1去噪
dyym(i)=0;
end
if abs(dym(i))<7*T %j=0去噪
dym(i)=0;
end
end
figure(3);
subplot(311);
stem(x1,dym,'.k');
title('尺度j=0去噪后模极大值图形');
subplot(312);
stem(x1,dyym,'.k');
title('尺度j=1去噪后模极大值图形');
subplot(313);
stem(x1,dbym,'.k');
title('尺度j=2去噪后模极大值图形');
%跟踪匹配极大值
for i=1:n1 %尺度j=0时跟踪匹配模极大值
flag1=0;
flag2=0;
if dym(i)~=0
for j=i:i+5
if (j>n1)|((dym(i)*dyym(j))<0)
break;
elseif ((dym(i)*dyym(j))>0)
flag1=1;
break;
end
end
for j=i:-1:i-5
if (j<1)|((dym(i)*dyym(j))<0)
break;
elseif ((dym(i)*dyym(j))>0)
flag2=1;
break;
end
end
if (flag1==0)&(flag2==0)
dym(i)=0;
end
end
end
%尺度j=1时跟踪匹配模极大值
for i=1:n1
flag1=0;
flag2=0;
if dyym(i)~=0
for j=i:i+5
if (j>n1)|((dyym(i)*dbym(j))<0)
break;
elseif ((dyym(i)*dbym(j))>0)
flag1=1;
break;
end
end
for j=i:-1:i-5
if (j<1)|((dyym(i)*dbym(j))<0)
break;
elseif ((dyym(i)*dbym(j))>0)
flag2=1;
break;
end
end
if (flag1==0)&(flag2==0)
dyym(i)=0;
end
end
end
figure(4);
subplot(411);
stem(x1,d,'.k');
title('差异度函数图');
subplot(412);
stem(x1,dym,'.k');
title('尺度j=0与j=1模极大值匹配结果图');
subplot(413);
stem(x1,dyym,'.k');
title('尺度j=1与j=2模极大值匹配结果图');
%极大值最终跟踪匹配
for i=1:n1
flag1=0;
flag2=0;
if dym(i)~=0
for j=i:i+5
if (j>n1)|((dym(i)*dyym(j))<0)
break;
elseif ((dym(i)*dyym(j))>0)
flag1=1;
break;
end
end
for j=i:-1:i-5
if (j<1)|((dym(i)*dyym(j))<0)
break;
elseif ((dym(i)*dyym(j))>0)
flag2=1;
break;
end
end
if (flag1==0)&(flag2==0)
dym(i)=0;
end
end
end
subplot(414);
stem(x1,dym,'.k');
title('镜头边界分布图');
m=0;
for i=1:n1
if(dym(i)==0)
break;
else
Z(m)=i;
m=m+1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -