0% ont trouvé ce document utile (0 vote)
8 vues6 pages

Compression d'images avec JPEG

Transféré par

mallemhala23
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues6 pages

Compression d'images avec JPEG

Transféré par

mallemhala23
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd

TP.

2
Compression des données
Objectifs du TP
 Comprendre le principe de compression d’une image par la norme JPEG.

Rappels
Selon le type de la transformée utilisée et suivant le codage, on distingue quelques algorithmes. Parmi
lesquels on va citer le standard JPEG.
Standard JPEG
JPEG est Joint Photographic Expert Group. Ce standard utilise un protocole en trois étapes principales:
 Transformation en cosinus discrète (DCT).
 Quantification.
 Codage de Huffman.
Le principe de l’algorithme JPEG pour une image au niveaux de gris (une image couleur est
décomposée en un plan de luminance et deux plans chromatiques qui sont traités de manière identique)
est le suivant : La matrice des pixels de l’image est décomposée séquentiellement de gauche à droite et
de haut en bas en blocs de 8×8 pixels. Tous les blocs subissent le même traitement. Une transformée en
cosinus discret bidimensionnel (DCT 2D) est réalisée sur chaque bloc. Cette transformation concentre
l’information de l’image en haut et à gauche de la matrice, correspondant aux basses fréquences. Les
coefficients de la transformée sont ensuite quantifiés à l’aide d’une table de 64 éléments correspondant à
un facteur de qualité.
La perte de qualité se situé principalement dans l’étape de quantification et le sous échantillonnage des
chrominances (image RVB).
La phase finale est codages sans perte (algorithme de Huffman) sont ensuite réalisés en utilisant les
propriétés statistiques des images. Pour cela, on commence par ordonner les coefficients suivant un
balayage en zigzag pour placer d’abord les coefficients correspondant aux fréquences les plus basses,
qui donne une suite de symboles. Les codes les plus fréquents seront remplacés par d’autres codes
comportant un nombre de bits le plus petit possible.

Image Découpage Codage sans perte Image


Quantification
initiale en blocs 8×8 DCT Zigzag JPEG

Compression réversible
Figure 1 Principe de la compression de la Table
norme JPEG.
Algorithme JPEG
Compression
non réversible

TP5 Codage et Compression 1/6


Transformée en cosinus discrète
Chaque composante de l’image Img(i, j) est découpée en blocs de 8x8 pixels, auxquels on
applique la DCT pour obtenir les coefficients fréquentiels F(u, v). L’étape de DCT permet de
représenter l’image dans une nouvelle base plus adapté à la compression. Dans cette
représentation, l’information est plus concentrée.

Calcul de la DCT et de l’IDCT


Chaque bloc 8×8 est soumis à une transformation par DCT (Discrete Cosine Transform). Le
premier coefficient de la DCT est le DC (Direct Component), est proportionnel à la moyenne
des valeurs du bloc. Les 63 autres coefficients sont appelés AC (Alternative Component). Ce
nouveau domaine transformé permet une décorrélation très forte de l’information. Sur ce
bloc de coefficients, les énergies sont groupées en basse, moyenne et haute fréquences.
Par l’application de la DCT, chaque colonne est une fonction cosinus de fréquence différente.
L’énergie est alors concentrée sur les composantes de basse fréquence, et les composantes de
haute fréquence seront annulées par la quantification.
Les formules de la DCT et IDCT (la transformation en cosinus discrète inverse) sont données
ci-dessous :
, (1)

(2)

si i=0
 1

avec c(i )  2
1

Quantification
La quantification est la phase non réversible du processus de compression JPEG (un arrondi est
effectué). Elle réduire le nombre de bits nécessaires au stockage. Pour cela, elle réduit chaque valeur
de la matrice DCT en la divisant par un nombre (quantum) fixé par une table (matrice 8×8) (figure 2, 3)
de quantification suivant l’équation (3) :

Valeur DCT (i,j )


Valeur qua ntifiée(i,j )  , (3)
quantum(i,j )

Cette valeur est arrondie à l’entier le plus proche. Ultérieurement, lors de la reconstruction de l’image,
il suffira d’effectuer l’opération inverse ou la déquantification, en multipliant chaque valeur de la
matrice quantifiée par le quantum correspondant, pour retrouver une matrice DCT déquantifiée, à partir
de laquelle sera établie la matrice des pixels de l’image reconstruite.

TP5 Codage et Compression 2/6


Les nombreux tests réalisés ont conduit à retenir en pratique des facteurs de qualité compris entre 1
(l’image reste excellente) et 25 (dégradation encore acceptable).
L’organisme de standardisation ISO à développé un ensemble standard de valeurs de quantifications
utilisables par les programmeurs de code JPEG.
Voici les matrices de quantification par la norme JPEG (Figure 2 pour la luminance et Figure 3 pour les
chrominances) :

Figure 2 Matrice de quantification pour la Figure 3 Matrice de quantification pour


luminance (recommandation JPEG). les chrominances (recommandation JPEG).

La matrice de quantification Q est obtenue à partir de formules plus ou moins simples, permettant de
‘‘choisir’’ la perte de qualité. La formule suivante est un exemple qui donne de bons résultats :
Q q (i, j ) avec q (i, j ) 1  K (1  m(i  j ))
Avec i (i=0,1,…, N-1) l’indice de ligne, j (j=0,1,…, N-1) l’indice de colonne, m une constante (souvent
égale à 1) et K le facteur de qualité (choisi entre 1 et 25).
Manipulation: (Compression d’une image)
À partir d’un bloc de 8x8 pixels qui représente un bloc de la luminance de l’image couleur, nous
effectuerons toutes ces transformations en nous aidant du logiciel Matlab. Soit la matrice 8x8 de
coefficients compris entre 0 et 255 qui représente cette image:
A = [43 42 41 40 39 38 37 64
44 21 20 19 18 17 36 63
45 22 7 6 5 16 35 62
46 23 8 1 4 15 34 61
47 24 9 2 3 14 33 60
48 25 10 11 12 13 32 59
49 26 27 28 29 30 31 58
50 51 52 53 54 55 56 57];
1) Ouvrir une feuille de travail Matlab. Le fichier sera appelé ‘script_compression_image’.
Commencer par taper clear all;clc ;close all ; afin d’effacer toutes les données à chaque nouvelle
simulation.
2) Copier la matrice A ci-dessus.
3) visualiser l’image A par les instructions : figure(1) ; imagesc(A);
4) Cette image est en couleur. Nous allons travailler sur une image au niveau de gris, pour ne traiter que
la luminance. Cette image est visualisée par : figure(2); colormap(gray); imagesc(A);

TP5 Codage et Compression 3/6


ou on utilise les instructions : figure(3);imshow(uint8(A)) ;
5) Puis ouvrir une nouvelle figure que l’on va partager en 4 afin d’observer plusieurs images à la fois :
figure(4) ;subplot(2,2,1) ;imagesc(A) ;colormap(gray) ;
6) Un développement optimisé de la transformée de la DCT pour le cas N=8 (utilisé dans JPEG) est
obtenu en réécrivant la transformée sous la forme matricielle, en suivre les étapes suivantes :
-Avant d’effectuer une DCT, nous allons représenter la matrice D des coefficients de cette DCT,
pour N=8. Elle est donnée par:

-A l’aide de matlab, donner les valeurs numériques de ces coefficients. Pour cela, il suffit d’écrire
cette matrice sous Matlab, sans point virgule à la fin; les coefficients s’inscrivent dans la fenêtre
courante de Matlab.
-Utiliser la fonction Matlab D=dctmtx(8) , que remarquez-vous ?
-Représenter l’image de ces coefficients : subplot(2,2,2) ; imagesc(D) ; 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’instruction subplot).
-Sous forme matricielle, la DCT s’exprime de la façon suivante : C=DxAxDT Réaliser cette
opération.
-Utiliser la fonction MATLAB DCTm = dct2(A), que remarquez-vous ?
-Arrondir les coefficients de C par l’instruction : DCT=round(C)
-Donner l’image et les coefficients de cette matrice. Commentez les résultats.
7) L’étape suivante de cette compression est la quantification. On choisit la table de quantification
suivante, construite avec les instructions suivantes :
K = 4;
for i=1:8
for j=1:8
Q(i,j) = 1+K*(1+(i-1)+(j-1));
end
end
Q
-Créer une figure(5) qui sera divisée en deux sous image.
-Donnez l’image représentant la matrice de quantification ainsi que les coefficients caractérisant.
-L’opération de quantification est une division point par point qui représente dans le logiciel
Matlab comme: DCTQ = round(DCT./Q) Les coefficients de quantification sont arrondis dans la
même instruction.

TP5 Codage et Compression 4/6


-Faire varier le coefficient de qualité K (0, 4, 10, 20, 25), et visualisez l’image transformée
et quantifie (DCTQ). Concluez-vous sur la qualité d’image après la quantification, et est-
ce que c’est un codage réversible ou non réversible avec interprétation des résultats
obtenus?
-Fixé K=4, Visualiser l’image de cette nouvelle transformation et donner les coefficients associés.
-Quels commentaires pouvez-vous faire sur cette nouvelle image ?
8) Les coefficients AC de la matrice DCTQ donner une suite de valeurs qui contient de nombreux
zéros en fin de balayage. Nous allons utiliser le balayage zig-zag pour les coefficients AC.

-Donner la valeur du coefficient DC de la matrice transformée et quantifie.


-Donner la suite des coefficients AC après le balayage zig-zag (voir script).
-Sur cette suite, effectuer un codage RLC, ensuite un codage de Huffman. Pour chaque codage
donner votre démarche et le résultat.
9) Refaire les questions précédente (7, 8) avec l’utilisation de quantificateur recommander par la norme
JPEG. Quels commentaires pouvez-vous faire sur cette nouvelle quantification ?
10) Utiliser l’image nommée: [Link] disponible dans la bibliothèque Matlab. Refaire les
étapes de compression sur cette image (transformation, quantification, codage sans perte).
- Utiliser la fonction blkproc qui permet de travailler bloc par bloc (Taper help blkproc pour
plus de détails).

Le compte-rendu est à envoyer au format pdf à [Link]@[Link] avant la prochaine séance de TP.

Scripts MATLAB
clear;clc;close all;
%questions 1)-5)

TP5 Codage et Compression 5/6


A = [43 42 41 40 39 38 37 64
44 21 20 19 18 17 36 63
45 22 7 6 5 16 35 62
46 23 8 1 4 15 34 61
47 24 9 2 3 14 33 60
48 25 10 11 12 13 32 59
49 26 27 28 29 30 31 58
50 51 52 53 54 55 56 57];

figure(1) ; imagesc(A);
figure(2); colormap(gray); imagesc(A);
figure(3);imshow(uint8(A)) ;
figure(4) ;subplot(2,2,1) ;imagesc(A) ;colormap(gray) ;
%6)
DD(1,:) = [1/sqrt(8) 0.5*cos((1:7).*pi/16)];
DD(2,:) = [1/sqrt(8) 0.5*cos(3*(1:7).*pi/16)];
DD(3,:) = [1/sqrt(8) 0.5*cos(5*(1:7).*pi/16)];
DD(4,:) = [1/sqrt(8) 0.5*cos(7*(1:7).*pi/16)];
DD(5,:) = [1/sqrt(8) 0.5*cos(9*(1:7).*pi/16)];
DD(6,:) = [1/sqrt(8) 0.5*cos(11*(1:7).*pi/16)];
DD(7,:) = [1/sqrt(8) 0.5*cos(13*(1:7).*pi/16)];
DD(8,:) = [1/sqrt(8) 0.5*cos(15*(1:7).*pi/16)]

D=dctmtx(8)

subplot(2,2,2) ; imagesc(D) ; colormap(gray) ;


Dt = D'
subplot(2,2,3) ; imagesc(Dt) ; colormap(gray) ;
C=D*A*Dt
DCT=round(C)
subplot(2,2,4) ; imagesc(DCT) ; colormap(gray) ;
DCTm = dct2(A)
%7) quantification
K = 4;
for i=1:8
for j=1:8
Q(i,j) = 1+K*(1+(i-1)+(j-1));
end
end
Q
figure(5); subplot(1,2,1); imagesc(Q); colormap(gray) ;
DCTQ = round(DCT./Q)
subplot(1,2,2); imagesc(DCTQ); colormap(gray) ;
%8)
zigzag = [9 2 3 10 17 25 18 11 4 5 12 19 26 33 ...
41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 ...
43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 ...
45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 ...
62 63 56 64];

y = im2col(DCTQ, [8 8], 'distinct')'; % Break 8x8 blocks into columns


y = y(:,zigzag)

TP5 Codage et Compression 6/6

Vous aimerez peut-être aussi