% Aymeric Arnould, Tom Colinot
% TP3 
% Compensation de mouvement (2/2)
% PSNR moyen et débit moyen

%clear all

n=5; %Nombre d'images à coder
gamma=1:10;
blksize = 16; %taille des blocs
SearchRange = 8; %portée des vecteurs mouvements

PSNRmoy=[];
bpsmoy=[];
bpsmoy2=[];

for i=1:length(gamma)
    g=gamma(i);
    file = fopen('Foreman.qcif','r');
    
    PSNR_seq=[];
    bpp_seq=[];
    bppMV_seq=[];

    [compY,~,~]=yuv_readimage(file,'qcif');
    Yc= zeros(size(compY,1),size(compY,2),n); %images (dé)codées

    %Codage de la première image
    [I_rec,PSNR,bpp] = encodeINTRA(compY,g);
    Yc(:,:,1) = I_rec; 
    PSNR_seq(1) = PSNR;
    bpp_seq(1) = bpp;

    for k = 2:n
        [compY,~,~]=yuv_readimage(file,'qcif');
        compYr = Yc(:,:,k-1);
        [compPred,~,~,bppMV] = PicturePred(compY,compYr,blksize,SearchRange);
        [I_rec,~,bpp] = encodeINTRA(compY-compPred,g);

        Yc(:,:,k) = compPred + I_rec;
        
        PSNR_seq(k) = PSNR;
        bpp_seq(k) = bpp;
        bppMV_seq(k-1) = bppMV;
    end
    
    PSNRmoy(i) = mean(PSNR_seq);
    bpsmoy(i) = mean(bpp_seq)*size(compY,1)*size(compY,2)*15; %en ne tenant pas compte de bppMV
    bpsmoy2(i) = (mean(bppMV_seq)+mean(bpp_seq))*size(compY,1)*size(compY,2)*15; %en tenant compte de bppMV
    
    fclose('all');

end

figure(2);
subplot(131); plot(gamma,PSNRmoy); xlabel('gamma'); ylabel('PSNR moyen');
subplot(132); plot(gamma,bpsmoy,gamma,bpsmoy2); xlabel('gamma'); ylabel('Debit moyen (bps)'); legend('Sans bppMV','Avec bppMV');
subplot(133); plot(bpsmoy,PSNRmoy,bpsmoy2,PSNRmoy); xlabel('Debit moyen (bps)'); ylabel('PSNR moyen'); legend('Sans bppMV','Avec bppMV');