一個可以用來做臉部偵測的視訊框架間差分代碼

來源:互聯網
上載者:User

時間長了,也不知道原作者是誰了,先文章在這裡

% 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.