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