Académique Documents
Professionnel Documents
Culture Documents
TP N° : 01
Compression des Images Fixes
JPEG (Joint Photographic Expert Group)
Objectifs :
Dans ce TP, nous allons travailler sur les images niveau de gris. Nous utiliserons ici
principalement des fonctions de la bibliothèque OpenCV. L’objectif de ce TP est de comprendre les
étapes de compression JPEG avec perte
Outils :
- OpenCV.
- Python, C++ , Java, MatLab.
Le travail demandé :
1ere Partie : compression
1ère étape : On divise l'image niveau de gris en blocs de 8x8 pixels.
[100 98 98 99 102 102 102 103]
Bloc [ 98 98 97 99 100 100 101 101]
8X8 [ 97 98 98 98 99 100 100 101]
[ 97 96 96 96 97 98 99 99]
Image originale [ 97 95 94 95 96 96 99 98]
[ 97 96 95 95 97 98 97 97]
[ 96 97 96 96 98 98 96 97]
[ 96 97 97 97 97 97 96 96]
2ème étape : On applique une Transformée en Cosinus Discrète à chacun des blocs. On obtient alors
des coefficients représentant les différentes fréquences de l'image. En haut à gauche se trouve les
basses fréquences, en bas à droite les hautes fréquences.
La fonction de transformation est :
Page 1/3
3ème étape : On quantifie différemment les coefficients suivant la fréquence, Cette technique a pour
but de supprimer les hautes fréquences, qui sont moins visibles par l'oeil humain, vous devez choisir
l'un des trois types de quantification, Dans la norme JPEG, il existe 4 tables de quantification
différentes suivant la compression voulue.
[16, 11, 10, 16, 24, 40, 51, 61]
[12, 12, 14, 19, 26, 58, 60, 55]
[14, 13, 16, 24, 40, 57, 69, 56]
matrice_quantification = [14, 17, 22, 29, 51, 87, 80, 62]
[18, 22, 37, 56, 68, 109, 103, 77]
[24, 35, 55, 64, 81, 104, 113, 92]
[49, 64, 78, 87, 103, 121, 120, 101]
[72, 92, 95, 98, 112, 100, 103, 99]
Chaque valeur du Bloc DCT est divisée par un nombre, puis arrondie à l’entier le plus proche
5ème étape: On procède au codage entropique, c'est à dire que l'on passe d'une suite de coefficients à une
suite de zéros et de uns:
1- On code le coefficient DC du bloc traité en le soustrayant au coefficient DC du bloc précédent. On
appelle ça un codage différentiel.
Pour une image de taille 512 X 512, on trouve 4096 blocs
- Exemple : 49, 50, 53, 54, 56, 58, 60, 58, 62, 57,
- La différence : 49, 1, 3, 1 ,2 , 2,2,-2,4,-5,
- À partir de la table 1, la séquence est écrite comme suit :
49 ligne 6 (6,49) Codes de HUFFMAN des coefficients Diff DC
1 ligne 1 (1,1)
-5 ligne 3 (3,-5) Cat Code
Ce qui implique la séquence est déventée : 0 010
(6, 49),(1, 1),( 2, 3), (1, 1),( 2, 2),( 2, 2),( 2, 2), (2, -2), (3, 4),( 3, -5). 1 011
2 100
- A partir de la table de code huffman pour les coefficient DC 3 00
o 6 = 11110 4 101
5 1110
o 1 = 011 6 11110
o 2 = 100 7 111110
o 3 = 101 8 1111110
- Code final : 111101100010111100110111100101001010010 9 11111110
10001101100101010 10 111111110
11 1111111110
Page 2/3
2- On code les coefficients AC, pour éliminer les coefficients à zéro on regarde dans la table
d'Huffman ci-dessous le nombre de zéros avant un coefficient non nul ainsi que la catégorie du
coefficient non nul, on obtient alors un premier code, auquel on ajoute le code donnant la position
du nombre dans la catégorie.
La séquence : -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
S'écrite comme suit : (0,-1)(0,1)(EOB) Table -1-
À partir de la table 1 :
-1 ligne 1 nombre de bit = 1 code = 0
1 ligne 1 nombre de bit = 1 code = 1
Ce qui implique : (0,1)[0](0,1)[0](EOB)
À partir de la table de Huffman pour les coefficient AC :
(0,-1) code = 00
(0,1) code = 01
(EOB) =(0,0) code = 1010
- Fusionner les blocs après la transformation inverse pour avoir l'image originale
3ème partie : évaluation
1- Calculer le rapport de signal bruit (PNSR)
Écrire un programme qui nous permet de calculer le rapport signal à bruit, Le PSNR est donné par la
formule :
Remarque :
Page 3/3