chap6 : Compression d`images

Transcription

chap6 : Compression d`images
Notions sur la compression des images
dernière modification : 25 mars 2000
Les encyclopédies les plus complètes comportent environ 25 000 pages contenant du texte et des
images . On peut considérer chaque page comme une image qui, numérisée à 300 dpi, occupe un volume
de 1 Mo. Au total, la numérisation de l'ouvrage conduit à 25 Go. Il est clair que ce volume est
impossible à stocker sur des supports actuels à accès convenable. Il faut donc effectuer une
"compression" des données afin d'en réduire le volume .
1 - Généralités
Une information I codée en binaire peut l'être de diverses manières : description I1 ( n1 bits),
description I2( n2 bits), description I3 (n3 bits), ...... Parmi toutes ces descriptions "équivalentes", il y
en a une qui est moins volumineuse que les autres .Par rapport à celle-ci, les autres descriptions
contiennent des données redondantes . Imaginons deux descriptions I1 et I2, respectivement de n1
bits et de n2 bits. On définit les caractéristiques suivantes :
●
●
■
■
■
rapport de compression de I1 par rapport à I2 : C=n1/n2
redondance relative de I1 par rapport à I2 : R=1-1/C
Si n1 = n2, alors C = 1 et R = 0 ; la description I1 ne contient pas de données redondantes par
rapport à la description I2.
Si n2 << n1, alors C tend vers l'infini et R --> 1 ; la description I1 contient une forte redondance
par rapport à la description I2.
Si n1 << n2, alors C --> 0 et R tend vers l'infini ; la description I2 contient une forte redondance
par rapport à la description I1 .
Il existe trois types de redondance que nous allons examiner ci-dessous : la redondance de codage, la
redondance interpixel, la redondance psychovisuelle.
1.1 - Redondance de codage
Soit une image à niveaux de gris numérotés de 0 à N-1 . On désigne par nk le nombre de pixels
possédant le niveau k et par n le nombre total de pixels. Compte tenu du grand nombre de pixels, on
définira la probabilité pour qu'un pixel possède le niveau k par
p(k)=nk/n
k = 0, 1, 2, ..........N-1
On effectue le codage de chaque niveau k par un nombre binaire de longueur l(k). La longueur moyenne
du codage d'un pixel est donc
La valeur de < l > influe nécessairement sur le volume de la description.
exemple : soit 8 niveaux de gris notés de 0 à 7 . Admettons que nous ayons les probabilités suivantes :
p(0) = 0,19
= 0,02
p(1) = 0,25
p(2) = 0,21
p(3) = 0,16
p(4) = 0,08
p(5) = 0,06
p(6) = 0,03
a) effectuons un premier codage I1 : simple codage en binaire de longueur fixe 3 : < l > = 3
k
code 1
l(k)
0
000
3
1
001
3
2
010
3
3
011
3
4
100
3
5
101
3
6
110
3
7
111
3
b) effectuons un second codage I2 ( de longueur variable) : < l > = 2,7
k
code 2
l(k)
0
11
2
1
01
2
2
10
2
3
001
3
4
0001
4
5
00001
5
6
000001
6
p(7)
7
000000
6
Le rapport de compression et la redondance relative de I1 par rapport à I2 sont
R = 0,099
C = 3/2.7 = 1,11
On notera que dans le 2ème codage, les mots courts correspondent aux niveaux les plus fréquents
tandis que les mots longs correspondent aux niveaux les plus rares .
1.2 - Redondance interpixel
La redondance interpixel porte sur le constat suivant : bien souvent, le niveau d'un pixel peut être
prédit à partir des niveaux des pixels environnants. Pour " mesurer " cette redondance, on calcule des
coefficients d'autocorrélation entre des pixels distants de Dn ; par exemple, le long d'une ligne on
posera
où n est le nombre de pixels d'une ligne, x et y les coordonnées d'un pixel et I(x,y) le niveau de gris ou
de couleur du pixel. En général, les valeurs de g pour les faibles valeurs de Dn indiquent une forte
corrélation impliquant que l'information portée par un pixel particulier peut être souvent prédite par
l'information portée par les pixels voisins. .
1.3 - Redondance psychovisuelle
L'oeil humain perçoit une image de manière particulière; il sait reconnaître des détails qui portent plus
d'information que d'autres. Par suite, on peut éliminer les détails qui ont très peu d'importance sans
dégrader de manière significative la qualité de l'image; cette opération est une quantification (
opération irréversible).
La codification IGS (Improved Gray Scale) est une méthode de codage permettant de prendre en
compte le préoccupations développées ci-dessus. Supposons que l'on ait une image originale à 256
niveaux de gris. On peut réduire le volume de l'image en codant sur 16 niveaux par des méthodes
développées au chapitre sur le traitement d'image; malheureusement ces méthodes appliquées
brutalement font apparaître des effets quelquefois inesthétiques ou purement artificiels (passages
brusques d'un niveau de gris à un autre, faux contours notamment). La codification IGS est un moyen
d'adoucir le procédé. Le principe est le suivant : le codage à 256 niveaux s'effectue sur 8 bits
séparables en poids forts (4 bits) et poids faibles (4 bits); pour des pixels successifs, le codage IGS à
16 niveaux (donc sur 4 bits) s'obtient en tenant compte du codage sur 8 bits des pixels précédents et
en ne retenant que les bits de poids forts. La figure ci-dessous donne l'algorithme précis
correspondant.
1.4 - Critères de confiance
Etant donné une image originale dont le niveau d'un pixel (x,y) est noté I(x,y) et une image compressée
puis décompressée dont le niveau d'un pixel (x,y) est noté I'(x,y), on peut définir deux types de
critères permettant de juger la qualité de la compression:
●
des critères objectifs, basés sur le calcul de l'erreur quadratique moyenne e et du rapport
signal/bruit r :
où l'image est prise ici de dimension MxN.
●
des critères subjectifs qui peuvent se résumer à une échelle d'appréciation effectuée par un
échantillon d'usagers :
1 = excellent
inutilisable
2 = bien
3 = passable
4 = limite
5 = mauvais
6=
1.5 - Modélisation de la compression d'image
Un système de compression comporte un encodeur à une extrémité du processus (source)et un
décodeur à l'autre extrémité du processus (utilisation). Entre le codage de l'information source et le
décodage pour utilisation existe un canal qui est la cause principale de l'opération de compression; par
exemple, le canal pourra être un réseau de transmission de données ou tout simplement un dispositif
de stockage. La figure ci-dessous précise la chaîne d'opérations relatives à la
compression/décompression d'informations.
L'encodeur est double; il consiste en un encodeur de source et en un encodeur de canal. L'encodeur de
source comprend trois étages :
●
●
●
le mapping qui effectue la transformation des données dans un format permettant de réduire
les redondances interpixels
la quantification qui réduit les redondances psychovisuelles
le codage qui réduit précisément les redondances de .....codage.
De ces trois opérations, seule la quantification est une opération irréversible ( puisque des données
sont abandonnées).
L'encodeur de canal est nécessaire quand le canal est " bruiteux "; il s'agit alors de coder les données
dans un format permettant de réduire au maximum les erreurs dûes au passage de l'information dans
le canal, c'est à dire d'accroître l'immunité au bruit ; pour les canaux du type réseau de transmission
de données les codes de Hamming sont les plus connus et les plus utilisés; ils permettent de détecter
les erreurs et de les auto-corriger.
A l'autre extrémité de la chaîne, on trouve tout d'abord le décodeur de canal qui effectue l'opération
inverse de l'encodeur de canal, puis le décodeur de source qui ne se compose que de deux étages
●
●
le décodage qui rétablit les redondances de codage
le mapping inverse qui rétablit les redondances interpixel
La quantification inverse évidemment n'a pas de sens, puisque l'opération directe est irréversible.
Les systèmes de compression utilisés réellement ne comportent pas nécessairement tous les blocs
fonctionnels de la figure précédente. On peut d'ailleurs distinguer 2 catégories de systèmes de
compression
●
●
Si I'(x,y) = I(x,y), le système de compression est idéal ; il correspond à la compression sans
pertes appelée quelquefois compactage.
Si I'(x,y) <> I(x,y), le système de compression admet une distorsion; il correspond à la
compression avec pertes.
2 - Compression sans pertes ou compactage
Certaines applications nécessitent une compression sans perte d'information (domaine médical). Dans
ce cas, l'opération de quantification n'interviendra pas et seules les opérations réversibles de mapping
et de codage seront utilisées.
Plusieurs méthodes sont employées parmi lesquelles le codage à longueur variable, le codage en plans de
bits et le codage prédictif.
2.1 - Codage à longueur variable.
La philosophie de base de cette méthode est la réduction de la redondance de codage par affectation
de codes " longs " pour les items rares et de codes " courts " pour les items fréquents.
Le codage de Huffman est un code appartenant à la famille des codages à longueur variable. Son
principe réside en trois étapes :
●
●
●
1ère étape : les symboles de l'information à coder sont comptabilisés puis classés par ordre de
probabilité décroissante.
2ème étape : on effectue des réductions de source en sommant les deux probabilités les plus
basses ce qui donne la probabilité d'un symbole " composé "; les autres probabilités restant
inchangées, on réordonne la liste ans l'ordre des probabilités décroissantes. On continue ainsi
de manière dichotomique jusqu'à obtenir 2 seules probabilités.
3ème étape : on procède au codage en faisant en sens inverse le cheminement précédent.
La figure ci-dessous indique les trois étapes sur un exemple simple.
Le code une fois créé, une table définit simplement l'encodeur comme le décodeur.
On remarquera que la construction du code de Huffman peut être laborieuse : 256 niveaux de gris
correspondent à 254 réductions de source, puis à 254 définitions de codes. On est alors amené à faire
sur la méthode précédente un certain nombre de modifications simplificatrices :
●
●
●
code de Huffman tronqué : les m symboles les plus fréquents sont codés avec la méthode
Huffman; pour les autres symboles, on utilise un codage constitué d'un préfixe ( par exemple
10) suivi d'un numéro binaire à partir de 0.
B-code : ce code est constitué de bits appelés bits de continuation ( notés ici C) et de p bits
d'information (p fixé) représentant un numéro binaire. Tous les p bits, on aura évidemment un
groupe C mais quand on change de symbole les bits de C changent. La figure ci-dessous indique,
pour l'exemple déjà traité , le code résultant.
séparation en blocs : les symboles sont divisés en s groupes. Un symbole est codé par son
numéro binaire dans le groupe précédé par le drapeau de groupe. La numérotation suit les
probabilités décroissantes. Une variante de cette méthode consiste à coder chaque symbole
dans un groupe donné par le code de Huffman correspondant au lieu du numéro binaire.
Une autre famille de codages est celle des codages arithmétiques. Ses caractéristiques sont les
suivantes :
1) il n'y a pas de correspondance biunivoque entre les symboles et les codes;
2) un message est une séquence de symboles sources correspondant à un mot de code unique;
3) le mot de code définit un intervalle de nombres réels compris entre 0 et 1;
4) quand le nombre de symboles d'un message s'accroît, l'intervalle devient plus petit et le nombre de
bits décrivant l'intervalle est plus grand.
La figure ci-dessous explicite le procédé de codage.
Le procédé a toutefois des limites : l'emploi d'un caractère de fin ( ici m4) limitant le message et la
précision des calculs (n'importe quel nombre dans l'intervalle [ 0,33288, 0,33360[ représente le
message).
2.2. Codage en plans de bits
Il s'agit ici de réduire la redondance interpixel. Le principe d'un codage en plans de bits consiste en la
décomposition d'un image à plusieurs niveaux en une série d'images binaires, puis chaque image binaire
est compressée.
Codé sur m bits, le niveau d'un pixel s'exprime comme un nombre binaire compris entre 0 et 2m-1. On
peut donc exprimer ce niveau sous forme d'un polynôme
am-12m-1 + am-22m-2 + ........ + a121 + a020
(m niveaux)
Chaque coefficient du polynôme( 0 ou 1) correspond à la présence d'un point noir ou blanc dans un plan
de niveau p :
Ceci permet donc la décomposition de l'image en m images binaires.
Il y a toutefois un inconvénient à la méthode : si un léger changement de niveau de gris se présente, il
peut entraîner un changement sur toutes les images binaires de la décomposition. Ainsi le niveau 127 =
(0111111)2 et le niveau 128 = (10000000)2 sont des niveaux très voisins; pourtant leurs bits de codage
sont tous différents. On remédie à cette difficulté en employant un code Gray qui à tout code am-1 am2 ..... a1 a0 fait correspondre le code gm-1 gm-2 ..... g1 g0 tel que gm-1 = am-1 et gi = ou exclusif(ai ,ai+1
) pour 0 <= i <= m-2.
Ainsi 127 = (0100000)Gray et 128 = (11000000)Gray et un seul bit change.
Il reste maintenant à coder de manière compressée les images binaires. La méthode CAC ( Constant
Area Coding) consiste à diviser l'image binaire en blocs de taille mxn pixels; un bloc sera soit tout noir,
soit tout blanc, soit mixte. On affecte le code 0 pour le type le plus fréquent, 10 et 11 pour les deux
autres; bien entendu, si le bloc est mixte ce code est un préfixe qui doit être suivi du codage des mn
bits.
Une autre méthode populaire est le RLC ( Run Length Coding) : chaque ligne d'image est découpée en
blocs de bits successifs de même niveau (appelés runs); un code est affecté à chaque bloc , par
exemple un code en longueur variable. Comme il s'agit d'images binaires, il suffit de spécifier la valeur
(noir ou blanc) du premier bloc de la ligne ou supposer que chaque ligne commence avec un bloc " blanc "
de longueur éventuellement nulle.
2.3. Codage prédictif
Le codage prédictif est utilisé pour réduire la redondance interpixel : le niveau du pixel à coder est
calculé (" prédit ") à partir des n pixels précédents, mais seule la différence entre le niveau réel et la
prédiction est codée. La figure ci-dessous montre le diagramme fonctionnel d'un système de codage et
de décodage prédictifs ; l'indice n correspond au rang d'un pixel.
La prédiction J(x,y) est donnée usuellement par une expression de la forme
où les coefficients réels aij sont des poids statistiques affectés aux pixels précédents. Une application
simple de cette formule est le codage prédictif d'un pixel à partir du pixel situé juste au dessus :
J(x,y) = I(x,y-1)
Il est bien évident que les premiers pixels doivent être codés en absolu.
3.
Compression avec pertes
Les méthodes de compression avec pertes incluent une quantification par rapport aux méthodes de
compression sans pertes. On distingue principalement les méthodes à codage prédictifs, extensions
des méthodes vues précédemment, et les méthodes par transformation.
3.1. Codages prédictifs
La figure i-dessous explicite le dispositif de compression où l'indice n est relatif au rang d'un pixel. On
notera que la quantification s'applique à la différence entre le niveau réel et le niveau prédit et que ce
résultat est codé.
>
Une application illustrative du procédé est la modulation Delta définie par :
Si l'on applique cet algorithme avec α = 1 et ξ = 3,5 à la suite de pixels de niveaux 21, 25, 21, 24, 22,
22 on aura successivement
pixel 0 : niveau I0 = 21;
pixel 1 : niveau I1 = 25
pixel 2 : niveau I2 = 21
pixel 3 : niveau I3 = 24
pixel 4 : niveau I4 = 22
pixel 5 : niveau I5 = 22
initialisation à K0 = 21
J1 =K0 = 21
e1 = I1 - J1 = 4 > 0
e1 = 3,5
K1 = J1 + e1 = 24,5
J2 = K1 =24,5 e2 = I2 - J2 = -3,5 < 0
e2 = -3,5
K2 = J2 + e2 = 21
J3 = K2 = 21
e3 = I3 - J3 = 3 > 0
e3 = 3,5
K3 = J3+ e3 = 24,5
J4 = K3 = 24,5 e4 = I4 - J4 = -2,5 < 0
e4 = -3,5
K4 = J4 + e4 = 21
J5 = K4 = 21
e5 = I5 - J5 = 1 > 0
e5 = 3,5
K5 = J5 + e5 = 24,5
La suite 21 3,5 -3,5
3,5 -3,5 3,5 sera ensuite envoyée dans le codeur réduisant la
redondance de codage (certainement importante ici).
Les prédicteurs employés ci-dessus sont assez arbitraires; dans la réalité on peut trouver des
prédicteurs " optimaux " minimisant la différence en. On ne développera pas cet aspect ici.
3.2. Codage par transformation
Contrairement au codage prédictif qui agit directement sur la géométrie de l'image, le codage par
transformation effectue une transformation de l'image du domaine spatial dans un autre domaine que
l'on pourrait appeler fréquentiel; plus précisément la transformation appliquée à l'image convertit
l'ensemble des pixels en un ensemble de coefficients. La figure suivante montre la chaîne d'opérations
nécessaires pour compresser et décompresser une image.
L'image supposée carrée et comportant NxN pixels est divisée en (N/n)2 sous-images de taille nxn.
Sur chacune de ces sous-images, on applique une transformation linéaire qui fournit une série de
coefficients. I(x,y) désignant un pixel d'une sous-image nxn et J(u,v) représentant sa transformée par
une transformation h, on a la relation linéaire suivante
On peut aussi écrire, puisque l'ensemble des pixels de l'image initiale correspond à une matrice carrée
nxn I de niveaux I(x,y)
avec
>
On peut donc considérer l'image initiale I comme une superposition coefficientée d'images de base
Huv. Toutefois, le nombre de ces images étant généralement important, il peut être utile de faire une
approximation et de supprimer les images de base pour lesquelles la contribution est très faible.
Introduisons à cet effet un masque w(u,v) égal à 0 si le coefficient J(u,v) satisfait un critère de
troncature et égal à 1 sinon. On obtient alors l'approximation
Les transformations h utilisées sont principalement la transformation de Karhunen-Loeve, la
transformation de Fourier discrète, la transformation en cosinus discrète (DCT); cette dernière est la
plus populaire ( mais non la plus performante); elle est définie ci-dessous :
Le critère de troncature est issu de deux méthodes principales : la méthode du codage zonal qui est
basée sur l'examen des variances s2(J(u,v) et la méthode du codage à seuil qui est basée sur l'emploi
d'un seuil de grandeur des coefficient J(u,v); on verra plus loin dans l'étude de JPEG un exemple
concret d'application de cette dernière méthode.
4. Standards de compression d'image - JPEG
Des méthodes de compression d'images sont standardisées et obéissent donc à un processus
clairement défini et connu. Les deux principaux standards sont à l'heure actuelle JPEG pour les images
fixes et MPEG pour les images animées. Nous n'examinerons ici, mais avec assez de détails, que le cas
de JPEG.
Le Joint Photographic Expert Group (JPEG) correspond à la succession de trois opérations : application
d'une transformation DCT; quantification; codage. Le décodeur effectue exactement en sens inverse
ces opérations. Des circuits intégrés existent qui effectuent automatiquement les opérations de
codage et de décodage.
Pour comprendre le processus de compression JPEG, étudions un exemple. Une image quelconque est
tout d'abord divisée en sous-images correspondant à des blocs 8x8 de pixels. La figure (a) donne un
exemple d'une telle sous-image I où chaque pixel est représenté par un niveau de gris de 0 à 255.
Chaque niveau est diminué de 27 = 128 (b) ce qui fournit une image I'. Puis on applique une
transformation par DCT (c) d'où le tableau de coefficients J.
La quantification ou troncature est appliquée en suivant la méthode du codage à seuil :
où Z(u,v) est une matrice de normalisation. La matrice Z employée est donnée à la figure (d). Le
résultat (e) est donné par une suite obtenue par balayage zig-zag de la matrice J* (f) :
-25
2 0
-2
0 0
0
0
-3
0 -1
-2
-1
-5
EOB
2
-4
1
-4
1
1
5
0
2
0
0
-1
où EOB est le caractère de fin de bloc.
La suite des opérations est plus complexe : on effectue un codage particulier pour le coefficient le
plus important (coefficient DC), puis un autre codage pour les autres coefficients (coefficients AC):
1) On calcule la différence entre le coefficient DC ( premier coefficient) de J* et celui de la sousimage précédemment traitée ( par exemple -15); le résultat, -10, permet de déterminer, à partir de la
table JPEG des catégories (a), la catégorie à prendre en compte (4) pour obtenir, dans la table JPEG
de luminance (b), le code de base (101) et la longueur totale du code (7). Il faut donc compléter le code
de base à 3 bits par 4 bits complémentaires; ceux-ci sont générés par la règle suivante : si la
différence DCl - DC l-1 est positive, on prend les K bits (où K est la catégorie précédemment
déterminée) les moins significatifs de DCl ; si la différence DCl - DCl-1 est négative, on prend le K bits
les moins significatifs de DCl et on retranche 1. Nous sommes ici dans le second cas : -11 = (0101)2. On
a donc finalement pour le code de DC : 1010101.
2) Pour le codage des coefficients AC, on utilise les tables données en (a) et (c) où cette dernière
table est donnée partiellement. On notera sur (c) que le nombre de " 0 " devant un coefficient AC non
nul est pris en considération. On peut ainsi, pour chaque coefficient AC, déterminer sa catégorie, puis
son code de base et sa longueur; les bits complémentaires sont obtenus avec la règle suivante : si le
coefficient est positif, on prend les bits les moins significatifs; si le coefficient AC est négatif, on
retranche 1 et on prend les bits les moins significatifs. Ainsi :
-2 ---------> catégorie 2 --------->code de base 01 et longueur 4 -------------> code 0101
-3 ---------> catégorie 2 --------->code de base 111001 et longueur 8 --------> code
11100100
etc.....
En définitive, on obtient la suite codée :
1010101 0101 11100100 0101 1000010 0110 100011 001 100011 001 001 100101 11100110 110110 0110
11110100 000 1010
Il est intéressant de calculer le gain en compression ainsi obtenu. La sous-image 8x8 était codée sur
256 niveaux, donc elle représente, non compressée, un volume de 8x8x8 = 512 bits; Le nombre de bits
de la sous-image compressée est 94 bits. Le rapport de compression est donc 5,45.
Bibliographie
R.C.GONZALES, R.E.WOODS
Digital Image Processing
Addison Wesley
M.KUNT,G.GRANDLUND,M.KOCHER
Traitement numérique des
images
Presses Polytechniques et
Universitaires Romandes
Compression des images - Exercices
dernière modification : 21/03/2000
Exercice 1
On considère l'image suivante en 4 couleurs 0 (noir), 1, 2, 3 (blanc) :
1) Si on utilise un codage de l'image initiale défini par la table ci-dessous, quelle est la
taille du fichier correspondant en bits ?
couleur code
0
00
1
01
2
10
3
11
2) On utilise une technique de compression d'image basée sur l'utilisation du code
suivant :
couleur code
0
11
1
01
2
10
3
001
Quelle est la taille du fichier avec cette compression ? En déduire le rapport de
compression.
Compression d'images - Solution des
Exercices
dernière modification : 21/03/2000
Exercice 1
1) taille : 512 bits
2) taille : 619 bits
C = 1,2 (il s'agit d'une très mauvaise compression !)