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 