% Aymeric Arnould, Tom Colinot
% TP3 
% Compensation de mouvement (1/2)
% Codage d'une séquence

clear all

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

file = fopen('Foreman.qcif','r');

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

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

for k = 2:n
    [compY,~,~]=yuv_readimage(file,'qcif');
    Y(:,:,k) = compY;
    compYr = Yc(:,:,k-1);
    [compPred,~,~,~] = PicturePred(compY,compYr,blksize,SearchRange);
    [I_rec,~,~] = encodeINTRA(compY-compPred,gamma);
    
    Yc(:,:,k) = compPred + I_rec;
    Yp(:,:,k) = compPred;
end

% Affichage des images de bases et des images codées de la séquence
figure(1)
colormap(gray)
for i=1:n
    subplot(3,5,i); imagesc(Y(:,:,i));
    subplot(3,5,i+n); imagesc(Yp(:,:,i));
    subplot(3,5,i+2*n); imagesc(Y(:,:,i)-Yp(:,:,i));
end
