Découvrez notre Chaîne YouTube "Devenir Ingénieur"

Objectifs

  • Savoir activer la caméra de son PC
  • Savoir récupérer une image de la caméra
  • Savoir détecter les mouvements dans une image
  • Savoir définir un opérateur de détection
  • Etc.

Ci-dessous le code commenté du projet. Voir le tutoriel pour  plus de détails

Activation de la Caméra

cam = imaqfind; % Trouver l'objet en mémoire (s'il existe!)

if(~exist('cam'))

    cam=videoinput('winvideo',1);           % Déclaration

    set(cam,'ReturnedColorSpace','GRAY');   % RGB

    triggerconfig(cam, 'manual');           % Définition du Trigger

    start(cam);                             % Déclanchement

else

    delete(cam);

    cam=videoinput('winvideo');

    set(cam,'ReturnedColorSpace','GRAY');

    triggerconfig(cam, 'manual');

    start(cam);

end;

Paramètres du programme

M=256; N=256;

Nfil=3; % Taille du Buffer

im_A=zeros(Nfil,M,N);

i=1;j=1;

Iter=1;




K=64;

I_RMSE=zeros(1,K);

Det=zeros(1,K);

Seuil=0.05;

Boucle principale : Détection & Affichage

while 1

    %% Lecture de l'image courante

    im=imadjust(im2double(getsnapshot(cam)));

    im_in=imresize(im,[M N]);

    %% Calcul de l'intensité / Détection

    % Intensité/Détection

    Moy=squeeze(mean(im_A)) ;

    I_diff=Moy(:)-im_in(:);

    RMSE=sqrt(mean(I_diff.^2));     % RMSE f & g

    I_RMSE(i)=RMSE;                 % Intensité

    Det(i)=0.25*(I_RMSE(i)>Seuil);            % Signal de détection

  

    % Mise à jour de l'indice (détecteur)

    i=i+1;

    if i==K+1

        i=1;

        I_RMSE=0*I_RMSE;

        Det=0*Det;

    end;

   

    %% Mise à jour du buffer

    im_A(j,:,:)=im_in;

    j=j+1;

    if j==Nfil+1

        j=1;

    end;

   

    Iter=Iter+1; % Numéro des frames

   

    %% Affichage

    if Iter<2*Nfil

        Det=Det*0;

    else

        figure(1);

        subplot(121); imagesc([Moy-im_in]);colormap(gray);colorbar;

        subplot(122);

        plot(I_RMSE,'-*','linewidth',3);xlim([1 K]); grid on; hold on;

        stem(Det,'r-*','linewidth',3); hold off;

        if RMSE>Seuil

            title('Objet Détecté', 'fontsize',16);

        else

            title('Objet Non Détecté', 'fontsize',16);

        end;

    end;




    % Prise des photos de l'objet détecté

    if RMSE>Seuil

        for m=1:10

            s=strcat('im_',num2str(Iter),'_',num2str(m),'.png');

            im0=getsnapshot(cam);

            imwrite(im0,s);

        end;

    end;

end

Programme Principal

close all; clc; clear all;


%% Activation de la Caméra
cam = imaqfind; % Trouver l'objet en mémoire (s'il existe!)
if(~exist('cam'))
    cam=videoinput('winvideo',1);           % Déclaration
    set(cam,'ReturnedColorSpace','GRAY');   % RGB
    triggerconfig(cam, 'manual');           % Définition du Trigger
    start(cam);                             % Déclanchement
else
    delete(cam);
    cam=videoinput('winvideo');
    set(cam,'ReturnedColorSpace','GRAY');
    triggerconfig(cam, 'manual');
    start(cam);
end;

%% Paramètres du programme
M=256; N=256;
Nfil=3; % Taille du Buffer
im_A=zeros(Nfil,M,N);
i=1;j=1;
Iter=1;

K=64;
I_RMSE=zeros(1,K);
Det=zeros(1,K);
Seuil=0.05;


%% Détection & Affichage
while 1
    %% Lecture de l'image courante
    im=imadjust(im2double(getsnapshot(cam)));
    im_in=imresize(im,[M N]);
    
    %% Calcul de l'intensité / Détection
    
    % Intensité/Détection
    Moy=squeeze(mean(im_A)) ;
    I_diff=Moy(:)-im_in(:);
    RMSE=sqrt(mean(I_diff.^2));     % RMSE f & g
    I_RMSE(i)=RMSE;                 % Intensité
    Det(i)=0.25*(I_RMSE(i)>Seuil);	% Signal de détection
    
    % Mise à jour de l'indice (détecteur)
    i=i+1;
    if i==K+1
        i=1;
        I_RMSE=0*I_RMSE;
        Det=0*Det;
    end;
    

    
    
    %% Mise à jour du buffer
    im_A(j,:,:)=im_in;
    j=j+1;
    if j==Nfil+1
        j=1;
    end;
    
    Iter=Iter+1; % Numéro des frames
    
    %% Affichage
    if Iter<2*Nfil
        Det=Det*0;
    else
        figure(1);
        subplot(121); imagesc([Moy-im_in]);colormap(gray);colorbar;
        subplot(122);
        plot(I_RMSE,'-*','linewidth',3);xlim([1 K]); grid on; hold on;
        stem(Det,'r-*','linewidth',3); hold off;
        if RMSE>Seuil
            title('Objet Détecté', 'fontsize',16);
        else
            title('Objet Non Détecté', 'fontsize',16);
        end;
    end;
    
    
    % Prise des photos de l'objet détecté
    if RMSE>Seuil
        for m=1:10
            s=strcat('im_',num2str(Iter),'_',num2str(m),'.png');
            im0=getsnapshot(cam);
            imwrite(im0,s);
        end;
    end;
end

Accueil Traitement d’Images | Matlab

Click to rate this post!
[Total: 1 Average: 5]

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée.

Anti-Robot *

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.