Solution:
compression avec pertes (donc taux de compression plus importants) JPEG : compression jusqu environ 25:1 enlever linformation dans les zones o on ne peut pas la voir
Standard JPEG
Spcification par le Joint Photographic Expert Group en 1990 Standard de facto pour les images en millions de couleurs La spcification sert de base lnonc du TP
Modes de compression
Sequential
La mthode dcrite dans le cours (bloc 8x8)
Progressive
Limage saffiche par approximation successives (dabord flou, puis net) Utilis pour le transfert sur rseau
Lossless
Sans pertes Na rien voir avec la compression JPEG (plutt un genre de RLE) Peu utilis
Fonctionnement gnral
image
RGB->YCbCr
Sous-echantillonnage
Blocs 8x8
DCT
Requantification
Rordonancement zig-zag
Codage
fichier jpeg
Matlab : rgb2ycbcr
Fonctionnement (1)
Transformation RGB->YCbCr
Y = 0.299 R + 0.587 G + 0.114 B Cb = -0.1687 R - 0.3313 G + 0.5 B Cr = 0.5 R - 0.4187 G - 0.0813 B original
luminance (Y)
chrominance 1 (Cb)
chrominance 2 (Cr)
Matlab : imresize
Fonctionnement (2)
Sous-chantillonnage
Pourquoi? Gagner de la place bien sr Efficace? En principe non (cf TP3), sauf si on prend des prcautions Que sous-chantilloner ? Cb et Cr mais pas Y (lil davantage sensible la luminance qu la chrominance, cf cours I.2.5.1) Paramtres usuels ( choix de limplmenteur) et utiliss pour le TP :
Y : 1x1 (pas de sous-chantillonnage) Cb : 2x2 Cr : 2x2
Matlab : blkproc
Fonctionnement (3)
Dcoupage des plans de limage en blocs de 8x8 pixels
8x8 = taille de bloc peu prs optimale pour la DCT chaque bloc contient donc 8x8=64 valeurs codes sur 8 bits
Matlab : dct2
Fonctionnement (4)
Calculer la DCT de chaque bloc
DCT( ) = bloc 8x8 contenant les composantes frquentielles du bloc
Le bloc contient une combinaison linaire des images de la base Vecteurs de la base :
Frq horiz
Frq vert
Fonctionnement (5)
Requantification
Chaque valeur du bloc est requantifie (=divise par une constante choisie dans une table prdfinie, cf itu-t81 p.147) Une table de requantification pour la luminance et une pour les chrominances Les table de requantification utilises seront incluses dans le fichier JPEG
10
Codage
Parcours zig-zag Ordre de parcours des plans pour le stockage dans le fichier Mthode de compression sans pertes
11
Zig-zag
Rordonancement zig-zag
La requantification a coup une partie des hautes frquences
8x8
Le parcours zig-zag permet de corriger a (pas mal de valeurs identiques sont donc voisines aprs)
12
Plan Cb
nbr_blocs_horiz = 4 nbr_blocs_par_array_horiz = 1
Plan Cb
nbr_blocs_horiz = 4 nbr_blocs_par_array_horiz = 1
Lgende:
sens de parcours on ne peut pas utiliser blkproc pour le parcours cause de lordre de parcours du plan Y et de lentrelacement des plans
nbr_blocs_horiz =
nbr_blocs_par_array_horiz =
Ordre de parcours : un array of data unit la fois, avec entrelacement des plans
Y Cb Cr
Y Cb Cr
...
13
DC
AC
Composante DC
Codage prdictif
calcul de la diffrence DIFF = coef_DC_courant - coef_DC_precedent un coefficient DC prcdent par plan!
Codage de Huffman
catgorie damplitude (SSSS) pour chaque valeur correspondant au nombre de bits sur lequel on peut coder cette valeur SSSS bits codage :
SSSS DIFF Codage de Huffman :
len = table(SSSS+1, colN) code = table(SSSS+1, colV) write_bits(len, code, file_handle) SSSS 0 1 2 3 4 ... Nbr bits 2 3 3 4 5 ...
colN et colV dsignent les indices des colonnes Nbr bits et Valeur les indices commencent 1 en Matlab (do SSSS+1) 12 catgories damplitude => table de Huffman 12 entres une table de Huffman pour la luminance DC et une pour la chrominance DC il y a 2 write_bits faire : 1 pour SSSS avec Huffman et 1 pour DIFF sans Huffman
15
Composante AC
RLE
calcul du nombre de 0 conscutifs (=0..63) = RRRR
Huffman
calcul de la catgorie damplitude (SSSS) 4 bits 4 bits du coefficient AC suivant une plage de 0 index dans la table de Huffman : 8 bits => 256 entres RRRR SSSS RRRRSSSS = 16 RRRR + SSSS colN et colV dsignent les indices des colonnes codage :
SSSS bits RRRRSSSS Coef. AC
Nbr bits et Valeur les indices commencent 1 en Matlab (do SSSS+1) RRRR cod sur 4 bits => max 15 zros conscutifs en RLE index RRRRSSSS spciaux : 0x00 = tous les coefficients AC suivant sont 0 0xF0 = une plage de 15 coefficients AC 0 avec un coef de 0 bits aprs (donc 16 coefs zro!!!) une table de Huffman pour la luminance AC et une pour la chrominance AC il y a 2 write_bits faire : 1 pour RRRRSSSS avec Huffman et 1 pour le coef AC sans Huffman 16
Codage de Huffman :
len = table(RRRRSSSS+1, colN) code = table(RRRRSSSS+1, colV) write_bits(len, code, file_h)
DC AC
coef=-56 => diff=-56-(-56)=0 diff=0 => SSSS=0 => Huffman : len=2, code=0b00 (0) diff sur SSSS bits= 0b (0 bits)
0b00