Vous êtes sur la page 1sur 6

Université Joseph Fourier DLST

UE MAP110/120 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 SZAFRAN@IMAG.fr
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 correspon-
dantes, 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 dessin alea asterix papillon velos


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
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 trans-
formé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 dessin alea asterix papillon velos


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
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 conver-
tir 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 conver-
tir 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
0 0 0 1 0 0 3 1 0 0 5 1
× × × 3 5 7 5 3
0 1 0 8 0 3 2 16 3 7 1 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
0 0 1 0 0 2 1 1
× 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

Vous aimerez peut-être aussi