    // Analyse numérique : TP n°2
    // Groupe : B10
    // ~ ALVES Vincent, JARRET Guillaume
    //
    // Compression d'images par FFT 

//Obtention de l'image originale
img = read('im34.txt',-1,640);
ap = uint8(255*img);
figure(1, "Figure_name", "Image originale");
clf(1);
ShowImage(ap,'Image originale');

//---------Application de la Transformée de Fourier-----------------

//Passage en Matrice 1D. -1 = length(original)
go = matrix(img,1,-1);

//Application de Fourier
A=fft(go);

figure(4, "Figure_name", "FFT : Spectre Original");
clf(4);
plot(abs(A));


//On prend de 2 à 1/2 de la matrice(160000)
for (i=length(A)/2:length(A))
        A(i)=0;
end
A(1)=0;

figure(2, "Figure_name", "FFT : Spectre Tronqué");
clf(2);
plot(A);

//---------Reconstitution de l'image via FFT inverse----------------


//On prend un % de fréquences (ici, 30%) pour la compression.
for (i=length(A)*(5/100):length(A))
        A(i)=0;
end

//A=A(2:length(A)*(30/100));

//Reconstruire un spectre complet par symétrie:
A_recons = zeros(1, 500*640); //Longeur complete
A_recons(1:length(A)) = A; //On remplit le début avec ce qui reste de A

A_recons((500*640-length(A)+2):(500*640)) = conj(A($:-1:2));
A_recons(1:length(A)/2) = A(1:length(A)/2); 
//symétrie.

figure(5, "Figure_name", "FFT : Spectre complet reconstruit");
clf(5);
plot(A_recons);

B=ifft(A_recons); //On applique la transformée inverse
//B=abs(B);

temp = matrix(B,500,640); //500x640 Taille image originale
Result = uint8(255*temp);
figure(3, "Figure_name", "Image compressée");
clf(3);
ShowImage(Result,'Image compressée');
