Vous êtes sur la page 1sur 6

Université A.

MIRA de Béjaia
Master Département : ATE
Spécialité :Télécommunication
Module : TVN
Chargé de cours :A. MEKHMOUKH
Année Universitaire : 2019/2020

TP N° :01 (Compression JPEG)

 Objectifs :
 Nous allons, avec ce TP, comprendre le principe de compression d'une image.

Partie 1 :
Le principe de compression d'une image est représenté par le schéma synoptique ci-
dessous :

1
1. Transformer une image en composantes :
La première notion que nous allons aborder est de visualiser une image en composantes
RGB et en composantes YCrCb. Pour réaliser ces opérations, nous utilisons le logiciel
Simulink .

(a) Cette première étape va consister à charger une image et à la visualiser en mode
mono-dimensionnel et tri-dimensionnel. Ouvrir une feuille Simulink

i. Dans la librairie  Video and Image Processing Blockset Sources, copier


le module : Image from le.

ii. Charger l'image  test.png. En cliquant 2 fois sur le module, les paramètres
du bloc apparaissent. Copier le nom du chier dans  File name.

iii. Pour visualiser cette image, dans la librairie  sinks, copier le bloc et le relier
à la source : Video Viewer.

iv. Démarrer la simulation, stockez le chier dans vos documents sous le nom :
 testRGB. Vous voyez donc une image couleur.
v. Dans ce même chier, nous allons maintenant observer cette image en compo-
santes RGB : Rouge, Vert, Bleu. Dupliquer la source et 3 fois le bloc image
viewer. Choisir dans les paramètres du bloc image, la rubrique Image signal,
le menu  separate color signals. Vous avez alors 3 sorties à relier chacune à
un bloc image viewer.

vi. Lancer le programme. Se rajoutent à l'image couleur, les composantes R,G et


B. Quels commentaires pouvez-vous faire ?

(b) Maintenant, nous allons transformer une image initialement en composante RGB,
en une image en composantes YcrCb :

i. Dupliquer le programme précédent sous le nom  testYCrCb.


ii. Entre les deux blocs [source et visualisation], intercaler un bloc  Color
Space Conversion et ceci pour chacune des simulations. Vous cherchez ce
bloc dans la librairie. Un de ces blocs sera en mono-dimensionnel et l'autre en
tri-dimensionnel.

iii. Vous rajouter un bloc image viewer, sur la source monodimensionnelle an
d'avoir l'image réelle. Vous pouvez aussi introduire un bloc image viewer sur
chaque sortie RGB an de comparer avec les composantes Y,Cr,Cb.

iv. Commentaires sur vos observations.

(c) Cette dernière étape va consister à transformer une image en composantes YCrCb,
équivalent au format 4 :2 :2, en une image au format 4 :2 :0. Vous copiez le chier
précédent sous le nom  test4 :2 :0.
i. Entrer le bloc  Color Space Conversion et le bloc image viewer, intercaler
un bloc qui convertit l'image du format 4 :2 :2 au format 4 :2 :0 (à chercher
dans la bibliothèque). Observez les entrées et les sorties de ce bloc.

ii. An de voir si l'on retrouve l'image de départ, faire les transformations inverses
(passage du 4 :2 :0 au 4 :2 :2 et de YcrCb à RGB). Observez les signaux à chaque
bloc.

iii. Commentaires.

2. Comprendre la DCT
La deuxième étape que nous explorons est la formation de blocs en vue d'une DCT et
d'une quantication. Nous abordons cette étape de deux façons : en faisant des calculs

2
manuels, dans un premier temps, an de comprendre le principe de la DCT (Discrete
Fourier Transform) et dans un deuxième temps, en utilisant le logiciel Matlab an de
visualiser la modication des blocs de pixels au cours des diérentes opérations. DCT
à une dimension Dans le cours, comme nous traitons des images, nous avons travaillé
avec une DCT à deux dimensions, qui n'est pas facile à manipuler manuellement. An
de mieux comprendre le principe d'une DCT, nous allons maintenant utiliser une DCT
à une dimension dont les expressions (fonctions de base rendues orthogonales) sont
données ci-dessous :

 pixel (x) est le bloc à une dimension à transformer et F(u) sa DCT.

(a) On suppose que le signal pour lequel on fait une DCT comprend N=8 échan-
tillons. Les fonctions de base de la DCTsont données par l'expression ci-dessous :
q h i
2 πu
p(x, u) = N
c(u).cos 2N (2x + 1) avec : x ∈ [0, 7] et u ∈ [0, 7]
Pour une valeur de u xée, x varie.
 Dans un premier temps, on va considérer x variable continue ,x ∈ [0, 8] tracer
p(x, u) à l'aide du logiciel Matlab (x sera
les 8 fonctions de base de la DCT,
alors un vecteur = [0 :0.1 :8]). Nommer ce chier  coefcont. Utiliser une
boucle for pour générer les fonctions de base et visualiser-les sur une même
fenêtre en utilisant l'ordre subplot. Vous pouvez aussi dans une autre fenêtre,
tracer les conversions de ces fonctions en image :
imagesc(nomfct) ; colormap(gray) ;
 Dans un deuxième temps, on va considérer x variable discrète x ∈ [0, 7] pour
avoir 8 valeurs, tracer les 8 fonctions de base de la DCT, p(x, u) à l'aide du
logiciels Matlab (x devrait être un vecteur = [0 :7] mais Matlab ne prend pas
le zéro. . ..donc à adapter). Ce chier s'appellera  coefnum. Visualisation, de
ces fonctions sur une même fenêtre avec subplot et sous forme d'images comme
précédemment.

(b) On utilisera l'ordre  dct à une dimension de Matlab :

 Prendre une forme d'onde caractéristique pour les valeurs de pixels : par exemple,
une ligne de pixels de valeurs identiques (comme 128, 128, 128, 128, 128, 128, 128,
128) doit donner un seul coecient non nul (coecient 1). Acher cette séquence,
sa DCT et la DCT inverse sous forme d'images et de vecteurs (ordre Matlab :
imagesc(nom) ;).
 Maintenant, on simule une image formée de pixels semblables à la forme d'onde 4
p(x,4), calculée ci-dessus. Pour cela, on calculera les 8 valeurs de la fonction dénie
par l'onde 4. On normalisera ces valeurs obtenues entre 255 et 0. Appliquer alors à
la suite de pixels la transformation DCT(arrondie), puis la DCT inverse. Donner
toutes les visualisations (images) sur un seul graphe (subplot) ainsi que les valeurs
des coecients de chaque transformation. Conclusion ?

3
3. Codage de Human :
An de vous rappeler sur le code de Human, coder manuellement la chaîne suivante :
CCTIRMTDXMCITCR
(a) Donner la table des fréquences.

(b) Construire l'arborescence de Human en essayant de réordonner les fréquences à


chaque étape.

(c) Construire le code binaire associé.

(d) Quel est le nombre de bits de la suite compactée ? Quel est le taux de compression
obtenu (on comparera au cas où l'on aurait codé chaque caractère sur 10 bits) ?

Partie 2 : (Compression d'une image)


Précédemment, nous avons travaillé sur les diérentes transformations nécessaires pour
eectuer une compression des données. Maintenant, nous allons mettre à prot tout ceci et
à partir d'un bloc de 8x8 pixels qui représente un bloc de la luminance de l'image couleur
spirale, nous eectuerons toutes ces transformations en nous aidant du logiciel Matlab. Soit
la matrice 8x8 de coecients compris entre 0 et 255 qui représente cette image spirale :

1. Ouvrir une feuille de travail Matlab. Le chier sera appelé  image. Commencer par
taper clear all ; et close all ; an d'eacer toutes les données à chaque nouvelle simu-
lation.

2. Copier la matrice A ci-dessus.

3. La visualiser : gure(1) ; imagesc(A) ;


4. Cette image est en couleur. Nous allons travailler sur une image en niveaux de gris,
pour ne traiter que la luminance. Cette image est visualisée par : gure(2) ; color-
map(gray) ; imagesc(A) ;
5. Puis ouvrir une nouvelle gure que l'on va partager en 4 an d'observer plusieurs
images à la fois (ordre subplot(x,y,z) : gure(3) subplot(2,2,1) imagesc(A) co-
lormap(gray) ;
6. Avant d'eectuer une DCT, nous allons représenter la matrice D des coecients de
cette DCT, pour N=8. Elle est donnée par :

4
A l'aide de matlab, donner les valeurs numériques de ces coecients. Pour cela, il
sut d'écrire cette matrice sous Matlab, sans point virgule à la n ; les coecients
s'inscrivent dans la fenêtre courante de Matlab.
 Représenter l'image de ces coecients : subplot(2,2,2) imagesc(A) colormap(gray) ;
 Exprimer de la même façon la matrice transposée de D : DT = D' et la représenter
(changer le n° dans l'ordre subplot).
 Sous forme matricielle, la DCT s'exprime de la façon suivante : C = D x A x DT
Réaliser cette opération. Arrondir les coecients par l'ordre : DCT = round( C
)
 Donner l'image et les coecients de cette matrice. Commentez les résultats.

7. L'étape suivante de cette compression est la quantication. On choisit la table de


quantication suivante, construite avec les commandes suivantes :

Créer une gure(4) qui sera divisée, elle aussi en quatre.


 Donnez l'image représentant la matrice de quantication ainsi que les coecients
la caractérisant.
 L'opération de quantication est une division terme à terme qui dans Matlab se
note : DCTQ = round(DCT./Q) Les coecients sont arrondis dans le même
ordre.
 Visualiser l'image de cette nouvelle transformation et donner les coecients asso-
ciés.
 Quels commentaires pouvez-vous faire sur cette nouvelle image ?

8. La scrutation des coecients AC de la matrice DCTQ va donner une suite de valeurs


qui contient de nombreux zéros en n de balayage. Nous allons utiliser le balayage
zig-zag pour les coecients AC.

5
 Donner la valeur du coecient DC de la DCT.
 Donner la suite des coecients AC après balayage.

9. Sur cette suite, eectuer un codage RLC, puis ensuite un codage de Human. Pour
chaque codage donner votre démarche et le résultat.

 Le compte rendu doit être disposé sur l'espace de dépôt (E-Learning du module) en
chier zippé ainsi que tous les scripts et fonctions sous le nom :
nom_prénom_et nom_prénom_groupe_TP1.rar . La date limite
de remise du compte rendu du TP doit être respectée , aucun retard n'est toléré .

Vous aimerez peut-être aussi