Chapitre 3 : NORME JPEG

Exemple complet

Soit l’image suivante (512x512)  :

lena zoom bloc

Cette image est en noir et blanc (nuances de gris) , c'est-à-dire qu’on ne va travailler qu’avec une seule matrice au lieu de trois (mode RVB), on a dans ce cas R=V=B.

La matrice de pixels du bloc :

 

matrice bloc

Dans ce cas (nuances de gris), on pas besoin de passer au mode YCbCr puisque Y=G, et donc les matrices Cb et Cr prendront de l’espace inutilement.

 

Puisqu’on n’est pas passé au mode YCbCr, on ne va pas effectuer le sous-échantillonnage qui s’applique sur les composantes Cb et Cr. (Chrominance).

Avant d’appliquer la DCT on va retrancher 128 :
G_128 = G – 128   (avec G en mode « double (pour les nombres négatifs)  »):

                                                G_128

Application de la DCT sur G_128 :

                                            application DCT

Quantification :

Puisque la composante Y est équivalente à la matrice de pixels, dans ce cas, on va utiliser une table de quantification basée sur la table de quantification de luminance :
(Si l’image est en couleurs RVB, dans ce cas on va utiliser une table de quantification de luminance pour Y et une table de chrominance pour CB et CR. Ces tables changent bien sûr en fonction de la qualité).

La table de luminance par défaut (pour qualité=50) :

                                               table de luminace

Pour cet exemple, on va prendre qualité=15, ce qui donne la table suivante :

                                              table qualité 15

Calcul de la matrice quantifiée :

                                          matrice quantifié

Parcours en zigzag :

parcours en zigzag

Encodage RLE :

RLE

Le caractère ‘e’ est un simple marqueur de fin du bloc.

Comparaisons :

Taille de l’image brute : 8x64 = 512 bits (Si on suppose qu’elle est codée en mode nuances de gris (grayscale), sinon sa taille en mode RVB = 3x8x64= 1536 bits).

Taille du code RLE :  33*8 = 246 bits ! Soit une réduction de 52% (84% si on suppose que l’image brute est en mode RVB).

Codage de HUFFMAN (version améliorée):

Matrice d’occurrences :

matrice des occurences

(On ne compte pas le ‘e’ qui marque la fin du code RLE du bloc puisqu’on va appliquer juste après le codage de HUFFMAN, on va l’ajouter à la fin du code HUFFMAN)

Modification de la matrice d’occurrences :

Algorithme :
taille2=arrondir(taille/2)  % Dans ce cas taille=12 dans taille2=arrondir(6)=6
pour i=1:2:taille2-1  % Pas de 2
var=mat_occ{1,taille2+1-i};          % Echanges pour la première ligne  
mat_occ{1,taille2+1-i}=mat_occ{1,taille-i};
mat_occ{1,taille-i}= var;
var=mat_occ{2,taille2+1-i};          % Echanges pour la deuxième ligne   
mat_occ{2,taille2+1-i}=mat_occ{2,taille-i};       
mat_occ{2,taille-i}=var;
fin

Matrice d’occurrences modifiée :

occurrence modifié

Tri des deux parties du tableau :

Maintenant on va trier le tableau de 1 jusqu’à taille2 et de taille2+1 jusqu’à taille :

tri matrices d'occ

Arbre de Huffman

arbre de huffman

Code Huffman et dictionnaire

                            dico code huffman

Ce qui donne :  84 +12*8 +50 + 8 = 238 bits  (84: le nombres de bits dans le code huffman, 12*8 : car on a 8 caractère codé chacun sur 1 octet; 54 :pour la somme des représentation de ces caractères;le 8 ajouté est réservé pour l’octet de fin de code) ce qui équivaut à une réduction de 54%  (84,5% si on suppose que l’image brute est en mode RVB).

Remarque : Le codage de HUFFMAN n’a pas été très performant dans ce cas car le codage RLE a été performant et ce parce que la matrice de quantification est grande (qualité faible de l’image).

Codage inspiré de HUFFMAN (HUFFMAN2) :

Ce type de codage qu’on a réalisé s’inspire du codage de HUFFMAN. En effet, on va associer à chaque élément (qui est codé sur 1 octet) un code binaire mais cette fois sans arbre de HUFFMAN. L’idée est d’exploiter les codes binaires donnés pour les nœuds de l’arbre de HUFFMAN et donc inutilisable par les éléments. Pour avoir un code optimal, il suffit de donner à l’élément qui se répète le plus le code binaire ‘0’ et puis on incrémente ‘1’ pour les éléments qui se répètent le moins.

 Matrice d’occurrences :

matrice d'occurrence 2

Inversement de l’ordre:

matrice inverse

Code:

dico code 2

Ce qui donne : 59 + 12*8 + 34 + 8 = 197  soit une réduction de 61.5%  (87.17% si on suppose que l’image brute est en mode RVB).

RESULTATS

Image

Statistiques

lena image brute

Image brute:

Taille (grayscale) :  262 ko

Taille (RVB) : 786 ko

 

lena compre qual = 15

Image compressée : Qualité=15

RLE :
   42.8 ko
  (-83.7% grayscale,, -94.6% rvb)

Huffman 1:
   36.2 ko
  (-86.2% grayscale,  -95.4% rvb)

Huffman 2:
   33.3 ko
   (-87.3% grayscale,  -95.7% rvb)

lena comp qual = 10

Image compressée : Qualité=10

RLE :
   35.5 ko
  (-86.5% grayscale, -95.5% rvb )

Huffman 1:
   31.5 ko
  (-88% grayscale,  -96% rvb )

Huffman 2:
   29.6 ko 
  (-88.7% grayscale, -96.2% rvb)

lena couleur comp qual = 10

Image brute : 786 ko

Image compressée : Qualité=10

RLE :
   75ko   (-90.5%)

Huffman 1 :
   76 ko (-90.33%)

Huffman 2 :  

74.2 ko (- 90.6%)

lena comp photoshop

Image compressée avec Photoshop CS4                   (Qualité=0):

                32.3ko

lena comp matlab

Image compressée avec Matlab  R2009a                 (Qualité=60):

                24.8 ko