La compression JPEG
Objectifs:
-
Les donnees video et audio coutent souvent cher en termes de stockage et
de debit sur un reseau. Ainsi en TVNUM on a un debit initial de 216Mb/s.
Le taux de compression des methodes entropiques (ou sans pertes:
Huffman, Arithmetic, LZW) n'est pas suffisant pour repondre a ces problemes,
en particulier lorsque l'image n'est pas trop "plate", i.e. a des niveaux
de gris avec des probabilites partagees, n'a pas trop de plages uniformes...
1. Qu'est-ce que JPEG?
-
"Joint Photographic Expert Group". Adoptee comme norme internationale en
1992.
-
Peut traiter des images en couleurs ou en niveaux de gris, de types divers:
imagerie medicale, satellite, etc.
2. Principe de la norme JPEG
-
Codage
-
Decodage -- Ordre inverse
3. Les etapes principales
-
DCT (Discrete Cosine Transformation, Transformee en Cosinus Discret)
-
Quantification
-
Lecture Zigzag
-
Codage direct de la composante DC (~ moyenne du bloc 8x8)
-
RLE sur les composants AC (Run Length Encoding: on associe les n-uplets
de coefficients nuls avec le premier coefficient non nul suivant)
-
Codage entropique de type VLC (Variable Length Coding)
3a. Transformee en Cosinus Discret (DCT)
-
Principe:
-
Definition (DCT 8 point):
-
Composantes DC and AC (pour Direct et Alternative)
-
Composante DC
-
F(0,0)
-
C'est la valeur moyenne des niveaux du bloc
-
Composantes AC
-
Il reste 63 composantes de ce type
-
Cela represente les amplitudes des frequences spatiales horizontales et
verticales dans le bloc. Plus on va vers les dernieres composantes, plus
cela concerne des frequences elevees.
3b. Quantification
-
Pourquoi? -- Pour comprimer
-
Exemple: 8 bits codent 256 niveaux
Quantification sur 4 bits: 16 niveaux.
Quantification sur 3 bits: 8 niveaux.
-
C'est la raison principale de la compression et des pertes!
Quantification uniforme
-
On divise par la constante N et on arrondit le resultat.
Tables de quantification
-
Dans JPEG, chaque F[u,v] est divise par une constante q(u,v), le pas de
quantification du niveau DCT correspondant.
-
La table des q(u,v) est appelee matrice de quantification.
----------------------------------
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
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
----------------------------------
Exemple de matrice de quantification
L'oeil est plus sensible aux basses frequences (coin en haut a gauche)
qu'aux hautes frequences (coin en bas a droite).
La norme definit deux tables de quantification utilisable par defaut, une
pour la luminance (ci-dessus), l'autre pour la chrominance.
On peut neanmoins personnaliser les tables de quantification et le signaler
dans l'en-tete de l'image.
3c. Lecture Zigzag
-
Pourquoi? -- Pour rassembler les faibles niveaux DCT.
-
Transforme un bloc 8x8 en un bloc 1x64
3d. Differential Pulse Code Modulation (DPCM) sur la composante DC
-
La composante DC peut varier souvent et dans de grands intervalles, mais
elle est souvent proche de la valeur DC du bloc precedent.
-
On code la difference par rapport au bloc 8x8 precedent -- DPCM
3e. Run Length Encode (RLE) sur les composantes AC
-
Le vecteur 1x64 contient beaucoup de zeros (c'est le but!).
-
On code des paires (skip, value), ou skip est le nombre de
zeros et ou value est la valeur de la composante AC non nulle suivant
immediatement la chaine de zeros dans l'ordre de lecture Zigzag.
-
Pour les derniers 0 du bloc, non suivis d'une valeur non nulle, on envoie
un End Of Block.
3f. Codage Entropique (sans perte)
-
Apres l'encodage DPCM et RLE, on code les valeurs obtenues a l'aide d'un
Variable Length Code: Huffman.
4. Organisation du flux binaire JPEG
-
"Frame" = image, "scan" = une passe sur tous les pixels (par exemple la
composante rouge de l'image), "segment" = groupe de blocs, "block" = bloc
8x8 de pixels.
-
Frame header:
precision echantillonnage
(largeur, hauteur) de l'image
nombre de composantes
ID unique (pour chaque composante)
facteurs horizontal et vertical d'echantillonnage (pour chaque composante)
table de quantification a utiliser (pour chaque composante)
-
Scan header:
nombre de composantes dans le scan
ID composante (pour chaque composante)
table de Huffman utilisee (pour chaque composante)
5. Differents modes JPEG
-
Baseline/Sequential -- celui presente precedemment
-
Lossless - cas particulier de codage sans perte
-
Progressive Mode
-
Objectif: afficher des images basse qualite et les ameliorer par etapes.
-
Deux facons d'ameliorer des images par etapes:
-
Spectral selection: On envoie en premier la composante DC, puis
quelques premiers coefficients AC, un peu plus de coefficients AC, etc.
-
Successive approximation: On envoie en premier les MSB des coefficients
de la DCT (Most Significant Bit) jusqu'aux LSB en dernier (Least Significant
Bit).
-
"Motion JPEG, MJPEG" -- JPEG Baseline applique a chaque image d'une video.
C'est un standard et non une norme (a la difference de MPEG2). Utilise
en production TV.