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

//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 SVD-----------

[U, S, V] = svd(img);
S = diag(S); 
// On récupère les min(m, n) valeurs singulières (extraction valeurs diagonales de S)

        // Début : partie graphique
        figure(2, "Figure_name", "Valeurs Singulières");
        clf(2);
        x = 1:length(S);
        plot(x,S);
       
// Réduction à 30% des valeurs
nb_val = length(S) * (30/100);
U = U(:, 1:nb_val);
S = S(1:nb_val);
V = V(:, 1:nb_val);
       
svdmat = [S,U',V'];
    
//----------SVD Inverse---------------
    
        // Extraction des matrices U, S, V
        S = diag(svdmat(:, 1));
        U = svdmat(:, 2:501)'; //Commencer à 2 <=> Ajouter 1 à la largeur
        V = svdmat(:, 502:size(svdmat,2));
        tab = U * S * V;
           
        Resultat = uint8(255*tab);
        figure(3, "Figure_name", "Image reconstruite à partir de SVD");
        clf(3);
        ShowImage(Resultat,'Image reconstruite à partir de SVD');
