Académique Documents
Professionnel Documents
Culture Documents
Compte-rendu
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,
– 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
exec("init_fct.sce");
cette commande doit être exécutée chaque fois que vous redémarrez Scilab.
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.
IMAGE=lire_imageBMPgris("T10.bmp");
afficher_image_gris(IMAGE,256,20);
T = dct2(IMAGE);
ecrire_tableau(T,"%7.2f"); // format "%7.2f" : valeur écrite avec 2 décimales
ecrire_tableau(abs(T),"%7.2f");
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")
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) ?
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.
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")
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.
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).
T = dct2(IMAGE);
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);
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 :
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.
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 .