?? framedif4.m
字號:
%求解視頻的幀差分布 (方法四,基于邊緣輪廓法檢測鏡頭邊界)
%讀取視頻
clear all;
clc;
tic;%start time
shot=mpgread('video\sport2.m1v',[],'truecolor');%讀取視頻
%shot=aviread('video\skiing.avi');
frames=size(shot,2);
framedif=zeros(frames,1);
w=size(shot(1,1).cdata,1);
h=size(shot(1,1).cdata,2);
%%%%%初始化第一幀圖像%%%%%
gray1=rgb2gray(shot(1,1).cdata);%第一幀圖像
%h=fspecial('gaussian');
%gray1=imfilter(gray1,h);
gray1=im2bw(gray1,0.2);
if sum(sum(gray1))==0
bw1=gray1;
else
bw1=edge(gray1,'canny');%%注意
end
%%%獲取邊緣元素個數%%%%
p1=0;
for j=1:w
for k=1:h
if bw1(j,k)==1
p1=p1+1;
end
end
end
%%%%%%%%膨脹圖像%%%%%%%%
% se1 = strel('line',6,0);
% se2 = strel('line',6,90);
se = strel('diamond',6);
%se=strel(ones(6);%周圍六個像素內
r1=imdilate(bw1,se);
%%%%%%%%反色%%%%%%%%%%%%
for j=1:w
for k=1:h
if bw1(j,k)==1
r1(j,k)=0;
else
r1(j,k)=1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%
for i=2:frames
%%%%%%%獲取灰度圖%%%%%%
gray2=rgb2gray(shot(1,i).cdata);%%%canny 僅支持灰度圖,因此先灰度化
%gray2=imfilter(gray2,h);
%%%canny邊緣檢測%%%%%%%
gray2=im2bw(gray2,0.2);
if sum(sum(gray2))==0
bw2=gray2;
else
bw2=edge(gray2,'canny');%%注意
end
%%%獲取邊緣元素個數%%%%
p2=0;
for j=1:w
for k=1:h
if bw2(j,k)==1
p2=p2+1;
end
end
end
%%%%%%%%膨脹圖像%%%%%%%%
%se=ones(6);%周圍六個像素
r2=imdilate(bw2,se);
%%%%%%%%反色%%%%%%%%%%%%
for j=1:w
for k=1:h
if bw2(j,k)==1
r2(j,k)=0;
else
r2(j,k)=1;
end
end
end
%%%%%%%%%%%圖像相與并統計消失與新增邊緣點的數目%%%%%%%%%%%
out1=0;%上一幀消失的邊緣點的數目
in2=0; %下一幀新增的邊緣點的數目
for j=1:w
for k=1:h
%%前一幀%%
if bw1(j,k)==1&&r2(j,k)==1
and1(j,k)=1;
else
and1(j,k)=0;
end
%%后一幀%%
if bw2(j,k)==1&&r1(j,k)==1
and2(j,k)=1;
else
and2(j,k)=0;
end
if and1(j,k)==1
out1=out1+1;
end
if and2(j,k)==1
in2=in2+1;
end
end
end
%%%求解ecr%%%%
if p1==0||p2==0
framedif(i,1)=1;
else
framedif(i,1)=max(out1/p1,in2/p2);
end
bw1=bw2;
r1=r2;
p1=p2;
end
plot(framedif);xlabel('幀數'),ylabel('邊緣輪廓變化率'),title('視頻的邊緣變化率分布圖');
l=legend('邊緣變化率');
box on;
%subplot('position',[0 0 1/3 1]),imshow(imresize(shot(1,1).cdata,[40 60])),xlabel('第1幀');subplot('position',[1/3 0 1/3 1]),imshow(imresize(shot(1,11).cdata,[40 60])),xlabel('第11幀');subplot('position',[2/3 0 1/3 1]),xlabel('第24幀'),imshow(imresize(shot(1,24).cdata,[40 60]));
%subplot('position',[0 0 1/3 1]),imshow(imresize(shot(1,76).cdata,[40 60])),xlabel('第76幀');subplot('position',[1/3 0 1/3 1]),imshow(imresize(shot(1,86).cdata,[40 60])),xlabel('第86幀');subplot('position',[2/3 0 1/3 1]),imshow(imresize(shot(1,99).cdata,[40 60])),xlabel('第99幀'),
%set(gca,'Color','none');
%set(l,'color','none');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -