Vous êtes sur la page 1sur 10

Centre Universitaire Nour El -Bachir Master 1 Réseaux et Télécommunication (S2)

Institut des Sciences Année Universitaire


Département de Technologie 2019-2020
Filière Télécommunications

Module : Codage et compression


TP N°1 : Codage de Huffman et arithmétique-Compression et décompression

Objectif du TP

Compression et décompression d’une séquence numérique, en utilisant les algorithmes de


Huffman et Arithmétique. Comparaison de l’efficacité des deux algorithmes en matière de
compression.

Exercice 1 :
Soit les symboles suivant avec le vecteur de probabilité correspondante
symbols = [1:5];
p = [.3 .3 .2 .1 .1];
symbols = [1 2 3];
p = [0.1 0.1 0.8];
- En utilisant la fonction huffmandict ( voir help Matlab) calculer le codage Huffman et la
longueur moyenne du code.
- La commande suivante génère le vecteur signal source en fonction des résultats de la question
précédente :
Generate a vector of random symbols.
sig = randsrc(100,1,[symbols; p]);
-En utilisant les fonctions huffmanenco et huffmandeco (voir help Matlab) faire le codage
huffman et le decodage, comparer les résultats avec la source.

Exercice 2 :
Considérant l’alphabet de la source Alpha= {1, 2, 3} et la séquence à compresser :
Seq=3313333323.
1. Utiliser les fonctions Matlab (correspondant à l’algorithme de compression de Huffman) :
o huffmandict
o huffmanenco
Pour compresser la séquence des symboles numériques Seq.

1
2. Utiliser la fonction Matlab :
o Huffmandeco
Pour décompresser la séquence binaire fournie par le compresseur du Huffman.

3. Comparer la taille initiale de la séquence (1 octet pour chaque symbole) avec la taille du
code fourni par le compresseur de Huffman.

4. Utiliser la fonction Matlab (correspondant à l’algorithme Arithmétique) :


o arithenco
Pour compresser la séquence des symboles numériques Seq.

5. Utiliser la fonction Matlab :


o arithdeco
Pour décompresser la séquence binaire fournie par le compresseur Arithmétique.

6. Comparer la taille initiale de la séquence (1 octet pour chaque symbole) avec la taille du
code fourni par le compresseur Arithmétique.

7. Donner des constations sur l’efficacité de ces deux algorithmes en compression de la


séquence.

2
Master 1 Réseaux et Télécommunication (S2)
Année Universitaire
Centre Universitaire Nour El- Bachir
2019-2020
Institut des Sciences
Département de Technologie
Filière Télécommunications

Module : Codage et compression


TP N°2 : Codage de source

Objectif du TP
A partir d'un texte donné, vous devrez créer un script permettant de calculer la fréquence
(d'apparition), la probabilité (d'apparition) et l'information propre correspondant aux symboles
de l'alphabet de la source. Le script doit comprendre également un code MATLAB permettant
le calcul de l’entropie de la source.

Exercice 1 :
Considérant l’alphabet de la source Alpha= {espace, a, b, c, d, e, f, g, h}. Soit le texte à
compresser par un algorithme de compression est "a bccd aeffhg ga".
Ecrire un code Matlab permettant de faire les tâches suivantes :
1. Calcul de la fréquence d'apparition des caractères
2. Calcul des probabilités d'apparition des caractères
3. Calcul de l'information propre associée à chaque caractère
4. Calcul de la probabilité totale
5. Calcul de l'entropie

Exercice 2 :
Considérant le même énoncé de l’exercice 1. Ecrire un code Matlab permettant de réaliser
seulement les tâches suivantes :
1. Calcul d’un vecteur P dont les éléments sont les probabilités d'apparition des caractères
2. Calcul de la probabilité totale PT (Noter que, le calcul doit être effectué sans
exploitation des données du vecteur P).
3. Si la valeur de la probabilité totale est égale à 1, un calcul de l'entropie doit être effectué.
En outre, si la valeur de la probabilité totale est différente à 1, un message d’erreur
devra signaler que la valeur de la probabilité totale doit être égale à 1.

3
Centre Universitaire Nour El- Bachir Master 1 Réseaux et Télécommunication (S2)
Institut des Sciences Année Universitaire
Département de Technologie 2019-2020
Filière Télécommunications

Module : Codage et compression


TP N°3 : Etude et simulation du codage de Huffman

Objectif du TP

Compression et décompression d’un texte, en utilisant l’algorithme de Huffman.

Exercice 1 :
Considérant l’alphabet de la source Alpha= {espace, a, …, h}. Ecrire un code Matlab
permettant de faire les tâches suivantes :
1. Message demandant la saisie du texte à coder en respectant les caractères de
l’alphabet considéré. La chaîne de caractères saisie par l’utilisateur dans la
console doit être affectée automatiquement à la variable text.
2. Calcul du vecteur correspondant aux probabilités d'apparition des caractères de
l’alphabet dans le texte.
3. Affichage d’un message d’erreur au cas où la probabilité totale est différente de
1.
4. Calcul de l’information propre (quantité d’information).
5. Affichage des mots du code correspondant à chaque caractère de l'alphabet
considéré (la fonction qui sera utilisée est : huffmandict).
6. Encodage du texte par utilisation de la fonction huffmanenco.
7. Décodage de la séquence binaire reçue par le décodeur de Huffman en utilisant
la fonction huffmandeco.
8. Calcul de l'entropie de la source.
9. Calcul de la longueur moyenne du code avec affichage d’un message d’erreur si
la valeur d’entropie est plus grande que celle de la longueur moyenne du code.
10. Calcul de l'efficacité et la redondance du code.
11. Calcul du taux et du gain de compression.
12. Créer un script permettant de (ou modifier le script déjà créé pour) traiter
n’importe quel texte constitué des symboles constituant l’alphabet : Alpha=
{Espace, a, …, z}. Noter que :
 Les symboles sont des lettres de ‘a’ à ‘z’ minuscules plus le caractère
‘Espace’.

4
 Si un texte ne contient pas tous les symboles de l’alphabet, la fonction
huffmandict va tenir compte les symboles qui n’apparaissent pas dans le
message (ce qui implique une structure d’arbre de Huffman complexe et
taille du code importante) et cela va provoquer une fausse compression
puisque cette fonction ne doit recevoir que l’alphabet formé par les
symboles apparaissant dans le message.
13. Créer un script permettant de (ou modifier le script déjà créé pour) traiter
n’importe quel texte constitué de n’importe quels symboles. Noter que vous
devrez créer une fonction permettant de déterminer l’alphabet associé au texte
afin de l’utiliser dans la fonction huffmandict. À la fin du script, intégrer un code
Matlab permettant de signaler que le résultat fourni par la sortie du décodeur est
similaire (ou différent) au texte inséré à l’entrée du codeur.

5
Centre Universitaire Nour El- Bachir Master 1 Réseaux et Télécommunication (S2)
Institut des Sciences Année Universitaire
Département de Technologie 2019-2020
Filière Télécommunications

Module : Codage et compression


TP N°4 : Initiation au Traitement D'image

Objectif du TP

Utiliser les fonctions MATLAB pour afficher, lire et créer une image

Exercice :
Lire image (taille) :
img=imread('barbara.jpg') ;
imshow(img) ;
size(img)

Afficher des images :


img=imread('coins.png');
img2=imread('saturn.png');
figure;subplot(1,2,1);imshow(img);
subplot(1,2,2);imshow(img2);

Créer une image en niveau de gris


img=zeros(128);
for i=1:128
for j=1:128
img(i,j)=i+j-2;
end
end
imshow(img,gray(128));

Créer une image en noir et blanc :


b=zeros(128,128);
d=ones(100,100);
b(35:65,35:65)=255;

6
d(35:65,35:65)=0;
figure;imshow(b);
figure;imshow(d);

Seuillage:
img=imread('cions.png');
figure;imshow(img);
img2=im2double(img);
figure;subplot(1,2,1);imshow(img);
result=(img2>0.5)
subplot(1,2,2);imshow(result);

Histogramme:
I = imread(‘coins.png’);
imshow(I)
figure, imhist(I,256)
histo = imhist(I,256);
figure;plot(histo);

Filtrage en fonction des composantes


s=size(img);
seuil=200;
imgf = uint8(zeros(s));
for i=1:s(1)
for j=1:s(2)
if img(i,j,3)>seuil
imgf(i,j,:)=img(i,j,:);
end
end
end

7
Centre Universitaire Nour El- Bachir Master 1 Réseaux et Télécommunication (S2)
Institut des Sciences Année Universitaire
Département de Technologie 2019-2020
Filière Télécommunications

Module : Codage et compression


TP N°5 : Norme JPEG -Compression et codage-

Objectif du TP

Utiliser les fonctions MATLAB pour Compresser une image JPEG.

Exercice :

Traitement de l'image par bloc :


1- L'image est découpées en blocs de tailles 8x8 pixels pour appliquer à chacun d'entre eux une
DCT.
L'instruction blkproc permet de découper une image en plusieurs blocs de taille [M N] et
d'appliquer une fonction à chacun de ces blocs, ici on utilisera la fonction dct2.
Lire une image (bmp ,tif)
>> imshow(x,gray(256))
>> y = blkproc(X,[8 8],'dct2'); X la matrice de l'image
>> imshow(y,gray(256))
Exemple :

L'image étant très uniforme dans les noirs, on observe des pics « blancs » pour les basses
fréquences de chaque bloc.
2. On veut maintenant représenter l'énergie moyenne de chaque bloc, pour cela on créer une
Fonction 'energie' qui fait la moyenne du carré de la DCT :

function[z]= energie(x)
xcarr=x.^2;
z=mean(mean(xcarr)); %deux fois à cause de la 2D
Exemple : en utilisant la fonction mesh : afficher l’énergie moyenne après l’application de la
dct2

8
3-On regarde l'image en annulant les coefficients AC et identifier le pourcentage d'énergie
contenu en moyenne dans les coefficients DC.

3.1- Reproduire le programme en suivant ces étapes :


-Calculer la dct2 d’une image choisie
-Effectuer la fonction filtrepdc sur le résultat
function[z]= filtrepdc(x)
z=zeros(8,8);
z(1,1)=x(1,1);
-Calculer l’énergie moyenne avant et après la fonction filtrepdc
-Afficher le résultat après calcule de la IDCT2
-Comparer entre les deux images.
3.2-De la même manière on filtre en gardant les coeff. DC mais en gardant aussi les 3
coefficients AC voisins du DC.

9
La figure représente : en haut l’image après 1er filtre. En bas l’image après 2eme filtre

3. On réalise maintenant un programme dctprog.m qui va afficher au fur à mesure l'image avec
plus de détails. C'est à dire en prenant 1 puis 4, 9, 16, 25, 36, 49, 64 premiers coefficients en
fréquence de chaque bloc, séparé par une temporisation pour mieux visualiser l'influence des
coefficients.

10

Vous aimerez peut-être aussi