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 !)