Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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 :
Il existe trois types de redondance que nous allons examiner ci-dessous : la redondance de codage, la
redondance interpixel, la redondance psychovisuelle.
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
exemple : soit 8 niveaux de gris notés de 0 à 7 . Admettons que nous ayons les probabilités suivantes :
p(0) = 0,19 p(1) = 0,25 p(2) = 0,21 p(3) = 0,16 p(4) = 0,08 p(5) = 0,06 p(6) = 0,03 p(7)
= 0,02
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
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
7 000000 6
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 .
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. .
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 :
● des critères subjectifs qui peuvent se résumer à une échelle d'appréciation effectuée par un
échantillon d'usagers :
● 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
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
Plusieurs méthodes sont employées parmi lesquelles le codage à longueur variable, le codage en plans de
bits et le codage prédictif.
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.
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 :
2) un message est une séquence de symboles sources correspondant à un mot de code unique;
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.
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
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 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.
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.
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.
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.
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é.
>
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
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.
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.
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 -3 -2 -5 2 -4 1 -4 1 1 5 0 2 0 0 -1
2 0 0 0 0 0 -1 -1 EOB
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 sous-
image 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 :
etc.....
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
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
couleur code
0 11
1 01
2 10
3 001
Exercice 1