Th`eme Image - TP2 - Compression
Transcription
Th`eme Image - TP2 - Compression
Université Joseph Fourier UE MAP110/120 DLST Année 2013-14 Thème Image - TP2 - Compression Compte-rendu Il vous est demandé de rédiger un compte-rendu pour ce TP. Ouvrez en parallèle un document Open Office Writer dans lequel vous allez mettre pour chaque exercice les différents résultats demandés, et les réflexions et commentaires que cela vous inspire. Ce compte-rendu devra impérativement être envoyé à la fin de la séance par e-mail à l’adresse [email protected] et en indiquant comme sujet [MAP120]-TP2-IMAGE-noms et prenoms du binome . Récupération des fichiers nécessaires à la séance machine Un certain nombre de fichiers sont nécessaires à cette séance machine. Pour récupérer ces fichiers : – créez dans votre répertoire personnel, un répertoire nommé TP2-IMAGE, – sur le site ALFRESCO - Espaces collaboratifs https://espaces-collaboratifs.grenet.fr/share/page/site/UJFueDDMAP110120/dashboard dans la partie Espace documentaire et le répertoire Theme Image/TP2, récupérez le fichier _archive2.zip, en cas de problème avec le site ALFRESCO - Espaces collaboratifs, utiliser l’URL http://www-ljk.imag.fr/membres/Nicolas.Szafran/ENSEIGNEMENT/L1/DDMAP110-120/ – placez le fichier _archive2.zip dans votre répertoire TP2-IMAGE, décompactez l’archive et vérifiez ensuite que les fichiers suivants sont présents alea.bmp asterix.bmp campus.bmp dessin.bmp papillon.bmp point10.bmp T10.bmp velos.bmp afficher_image_gris.sci dct2.sci ecrire_imageBMPgris.sci ecrire_tableau.sci ex1compression.sce gris_NB_diffusion.sce gris_NB_seuillage.sce idct2.sci init_fct.sce lire_imageBMPgris.sci test_zip_image.sci – démarrez SCILAB, placez-vous dans votre répertoire TP2-IMAGE et tapez la commande exec("init_fct.sce"); cette commande doit être exécutée chaque fois que vous redémarrez Scilab. MAP110/120 - 2013-14 1 TP2-Image 1 - Compression réversible Les outils de compression réversible classiques (comme zip) peuvent être utilisés avec des fichiers images. Tapez la commande suivante : test_zip_image("asterix.bmp"); La fonction test zip image charge un fichier, le compacte, affiche les tailles (en octets) du fichier initial et du fichier compacté, le taux de compression correspondant et affiche l’image correspondant au fichier. Exercice 1 : Refaites le test de compactage avec les fichiers-images suivants : campus.bmp, alea.bmp, papillon.bmp, dessin.bmp, velos.bmp. Dans votre rapport, faites un tableau en notant pour chaque fichier-image : – la taille du fichier initial , – la taille du fichier compressé , – le taux de compression Commentez les résultats obtenus, notamment le taux de compression obtenu en fonction de l’image. 2 - Compression non réversible Utilisation de la Transformée en cosinus 2.1 - L’exemple du cours • Dans un premier temps, on va revoir l’exemple du cours. Chargez et affichez l’image-test en tapant les instructions suivantes : IMAGE=lire_imageBMPgris("T10.bmp"); afficher_image_gris(IMAGE,256,20); et affichez les valeurs du tableau dans la fenêtre SCILAB ecrire_tableau(IMAGE,"%3d") (le format "%3d" permet d’écrire des entiers sur 3 chiffres). • Pour calculer la transformée en cosinus, on utilise la fonction dct2. Tapez les instructions suivantes : T = dct2(IMAGE); ecrire_tableau(T,"%7.2f"); // format "%7.2f" : valeur écrite avec 2 décimales On peut aussi écrire les valeurs absolues des valeurs de T : ecrire_tableau(abs(T),"%7.2f"); MAP110/120 - 2013-14 2 TP2-Image L’opération inverse (transformée en cosinus inverse) est faite par la fonction idct2. Tapez les instructions suivantes : IMAGEb = idct2(T); IMAGEb = min(max(round(IMAGEb),0),255); // conversion en entier entre 0 et 255 ecrire_tableau(IMAGEb,"%3d") l’opération min(max(round(IMAGEb),0),255) est nécessaire afin d’obtenir des valeurs entières entre 0 et 255. On peut vérifier que les deux tableaux IMAGEb et IMAGE sont égaux en affichant la différence : ecrire_tableau(IMAGEb-IMAGE,"%3d") qui donne un tableau de valeurs nulles. Ceci montre que la transformée en cosinus est une opération réversible, c’est à dire que image = transformee cosinus inverse(transformee cosinus(image)) Exercice 2 : Refaites le même exercice avec le fichier image point10.bmp. Dans le rapport, copier la matrice obtenue pour la transformée en cosinus de l’image T10.bmp et la matrice obtenue pour la transformée en cosinus de l’image point10.bmp. Commentez la manière dont sont réparties les valeurs dans ces matrices, notamment dans quelle partie trouve-t-on en général les plus grandes valeurs (en valeur absolue, c’est à dire sans considérer le signe) ? 2.2 - Modification de la Transformée en Cosinus Si on modifie plus ou moins la transformée en cosinus, cela entraı̂ne une modification du même ordre sur l’image (et inversement). Par exemple, si on modifie (en annulant) des valeurs importantes dans la DCT, la modification sur l’image sera importante. Exercice 3 : i) [modification de coefficients importants] Tapez les instructions suivantes : TM = T; // modif. de coeff. de la DCT dont les valeurs absolues sont entre 100 et 1000 TM(1,2)=0; TM(2,1)=0; TM(3,5)=0; TM(7,1)=0; ecrire_tableau(TM,"%7.2f"); // écriture de la DCT modifiée IMAGEM = idct2(TM); // calcul de l’image correspondant à TM afficher_image_gris(IMAGE ,256,20); // comparatif des 2 images afficher_image_gris(IMAGEM,256,20); Dans le rapport, copiez les valeurs de la matrice TM et incluez l’image correspondant à IMAGEM. ii) [modification de coefficients moyens] refaites le même exercice mais en mettant à zéro 4 coeff. de la DCT dont les valeurs absolues sont entre 10 et 100 iii) [modification de coefficients faibles] refaites le même exercice mais en mettant à zéro 4 coeff. de la DCT dont les valeurs absolues sont inférieures à 10 MAP110/120 - 2013-14 3 TP2-Image 2.3 - Modification par arrondi Un procédé de compression consiste à modifier la transformée en cosinus T (qui est composée de valeurs réelles - nombres décimaux) pour faire apparaitre des zéros. La méthode vue en cours consiste à faire des opérations d’arrondi afin de se ramener à des entiers (éventuellement multiple d’un nombre) : 1) arrondi au multiple de 2 le proche : charger et exécuter le fichier ex1compression.sce Pour chaque pixel, il existe une différence entre l’image initiale IMAGE et l’image finale IMAGEM, cette différence est néanmoins minime du point de vue visuel donc acceptable. Notez aussi le taux de compression. 2) autres arrondis : modifiez le fichier ex1compression.sce en remplaçant les 2 lignes // modification de T par arrondi à l’entier multiple de 2 le plus proche TM = round(T/2)*2; par les deux lignes // modification de T par arrondi à l’entier multiple de 5 le plus proche TM = round(T/5)*5; puis exécutez le script, observez les deux tableaux IMAGE et IMAGEM, les deux images correspondantes, la différence IMAGEM-IMAGE et notez le taux de compression. Refaites le test en modifiant l’arrondi a) TM = round(T/10)*10; // arrondi vers le multiple de 10 le plus proche b) TM = round(T/20)*20; // arrondi vers le multiple de 20 le plus proche c) TM = round(T/50)*50; // arrondi vers le multiple de 50 le plus proche d) TM = round(T/100)*100; // arrondi vers le multiple de 100 le plus proche comparez pour chaque test l’image initiale et l’image finale et notez le taux de compression . Exercice 4 : Modifiez le script précédent en mettant en commentaire les instructions suivantes (utilisées pour écrire les tableaux) : // affichage des valeurs de TM printf("\nTableau TM :\n"); ecrire_tableau(TM,"%4d") // affichage de la différence entre IMAGE et IMAGEM printf("\nDifférence entre les deux images :\n"); ecrire_tableau(IMAGEM-IMAGE,"%4d") puis modifiez-le afin de tester les différentes images dessin.bmp, alea.bmp, asterix.bmp, papillon.bmp, velos.bmp pour chaque image, vous testerez les différentes compressions correspondantes aux différents arrondis en notant à chaque fois le taux de compression afin de remplir le tableau suivant. Taux de compression Arrondi au multiple de 2 le + proche Arrondi au multiple de 5 le + proche Arrondi au multiple de 10 le + proche Arrondi au multiple de 20 le + proche Arrondi au multiple de 50 le + proche Arrondi au multiple de 100 le + proche dessin alea asterix papillon velos Dans le rapport, recopiez ce tableau rempli (sans mettre les images correspondantes) MAP110/120 - 2013-14 4 TP2-Image 2.4 - Traitement par parties d’image Les tests ci-dessus montrent que plus l’arrondi est important, plus le taux de compression est important et plus l’image finale est modifiée par rapport à l’image originale, la modification a pour conséquence de rendre l’image globalement plus ou moins floue. Pour éviter ce problème de flou global, l’idée est de ne pas traiter globalement l’image, mais de faire l’opération par parties d’image. Au lieu de calculer la transformée en cosinus sur l’ensemble de l’image, on va calculer la transformée en cosinus sur des parties d’image de dimensions 8 × 8 (c’est le principe utilisé dans la compression JPEG). Sauvegardez le script précédent en le renommant ex2compression.sce, puis remplacez la ligne : T = dct2(IMAGE); par les instructions suivantes : T =zeros(H,L); for i=1:H/8 for j=1:L/8 // traitement d’un bloc de taille 8x8 correspondant // aux lignes d’indices 8*i-7 à 8*i, et aux colonnes d’indices 8*j-7 à 8*j T(8*i-7:8*i,8*j-7:8*j) = dct2(IMAGE(8*i-7:8*i,8*j-7:8*j)); end end et la ligne : IMAGEM = idct2(TM); par les instructions suivantes : IMAGEM =zeros(H,L); for i=1:H/8 for j=1:L/8 IMAGEM(8*i-7:8*i,8*j-7:8*j) = idct2(TM(8*i-7:8*i,8*j-7:8*j)); end end Exercice 5 : Refaites les mêmes tests que dans l’exercice précedent afin de remplir le tableau suivant : Taux de compression Arrondi au multiple de 2 le + proche Arrondi au multiple de 5 le + proche Arrondi au multiple de 10 le + proche Arrondi au multiple de 20 le + proche Arrondi au multiple de 50 le + proche Arrondi au multiple de 100 le + proche dessin alea asterix papillon velos Dans le rapport, recopiez ce tableau rempli (sans mettre les images correspondantes) (suite de l’exercice sur la page suivante) MAP110/120 - 2013-14 5 TP2-Image Commentez les résultats obtenus : – pour chaque image, observez comment le taux de compression varie, et à partir de quel arrondi a-t-on une différence visuelle entre l’image initiale et l’image finale ? – pour un arrondi fixé, pour quels types d’images a-t-on les taux de compression les plus faibles et pour quels types d’images a-t-on les taux de compression les plus élevés ? 3 - Compression non réversible Passage de 256 niveaux de gris à 2 (noir et blanc) 3.1 - Opération de seuillage Ouvrez avec l’éditeur le fichier gris NB seuillage.sce, ce programme SCILAB permet de convertir une image niveaux de gris (fichier papillon.bmp) en une image noir et blanc par la méthode de seuillage vue en cours. Exercice 6 : Utiliser ce script afin de tester la méthode de seuillage pour les fichiers-images dessin.bmp, velos.bmp, asterix.bmp et papillon.bmp. Dans le rapport, incluez les différentes images obtenues par seuillage. 3.2 - Opération de diffusion Ouvrez avec l’éditeur le fichier gris NB diffusion.sce, ce programme SCILAB permet de convertir une image niveaux de gris (fichier papillon.bmp) en une image noir et blanc par la méthode de diffusion vers la droite vue en cours. Exercice 7 : utiliser ce script afin de tester d’autres méthodes de diffusion en modifiant le noyau. Vous testerez notamment les noyaux suivants : 0 0 0 7 5 1 1 1 0 0 0 0 0 3 0 0 5 × × × 3 5 7 5 3 0 1 0 0 3 2 3 7 1 8 16 48 1 3 5 3 1 En bas false Floyd-Steinberg Floyd-Steinberg Jarvis-Judice-Ninke 0 0 0 5 3 0 0 0 8 4 1 1 0 0 1 0 0 2 × 2 4 5 4 2 × 2 4 8 4 2 0 1 0 1 1 0 32 42 0 2 3 2 0 1 2 4 2 1 Droite et Bas Sierra Lite Sierra Stucki ainsi qu’un noyau que vous aurez créé par vous-même. Dans le rapport, mettez les images obtenues par diffusion à partir de l’image papillon.bmp pour les différents noyaux . MAP110/120 - 2013-14 6 TP2-Image