⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framedif4.m

📁 多种基于内容的视频检索镜头分割算法matlab程序
💻 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 + -