• Aucun résultat trouvé

3.2 Les diverses méthodes de compression

3.2.3 Méthodes avec distorsion des données

Ces méthodes permettent de retrouver une approximation de l’image numérique. Les pertes sont généralement indécelables à l’œil nu.

Quantification vectorielle

Les techniques de compression d’images exploitent généralement la redondance statistique présente dans l’image. La quantification scalaire qui associe à une variable continue une variable discrète pouvant prendre un nombre plus faible, et fini de valeurs. Ces valeurs ne sont jamais tota-

lement décorrélées, ou indépendantes. Shannon a montré qu’il était toujours possible d’améliorer la compression de données en codant des vecteurs plutôt que des scalaires [20].

La Quantification Vectorielle (QV), développée par Gersho et Gray [93] a pris une place très importante dans le domaine de la compression d’image que ce soit dans le but de transmission ou d’archivage.

Principe de la quantification vectorielle

La quantification vectorielle, dans son sens le plus général, est l’approximation d’un signal d’amplitude continue par un signal d’amplitude discrète [16]. Elle peut être vue comme une application Q associant à chaque vecteur d’entrée x de dimension K, un vecteur y = Q(x) de même dimension appartenant à un ensemble fini Y appelé DICTIONNAIRE de taille finie N, Y

= (yj , j = 1...N). Elle se décompose en deux applications : codeur, décodeur [93].

Codeur

Le rôle du codeur consiste, pour tout vecteur x du signal en entrée, à rechercher dans le

dictionnaire Y le code vecteur yj le plus proche du vecteur source x. C’est uniquement l’adresse

du code vecteur yj ainsi sélectionnée qui sera transmise ou stockée. C’est à ce niveau donc que

s’effectue la compression. Décodeur

Il dispose d’une réplique du dictionnaire et consulte celui-ci pour fournir le code vecteur d’indice correspondant à l’adresse reçue. Le décodeur réalise l’opération de décompression.

Fig. 3.3 – Principe du quantificateur vectoriel.

Méthodes par transformée

Dans ces méthodes, l’image de dimension NxN est subdivisée en sous images ou blocs de taille réduite (la quantité de calcul demandée pour effectuer la transformation sur l’image entière est très élevée) [23]. Chaque bloc subit une transformation mathématique orthogonale inversible linéaire du domaine spatial vers le domaine fréquentiel, indépendamment des autres blocs (trans- formée en un ensemble de cœfficients plus ou moins indépendants). Les cœfficients obtenus sont alors quantifiés et codés en vue de leur transmission ou de leur stockage. Pour retrouver l’inten- sité des pixels initiaux, on applique sur ces cœfficients la transformation inverse [22]. Parmi les transformations linéaires existantes :

– Transformation de Karhunen-Loeve (KLT). – Transformation de Fourrier discrète (DFT). – Transformation de Hadamard (HT).

– Transformation en ondelettes (WT). – Transformation en cosinus discrète (DCT).

Le principe d’un système de codage par transformation est le suivant :

Fig. 3.4 – Principe d’un système de codage par transformation.

Transformation en Cosinus Discrète (DCT) :

C’est une transformation mathématique qui transforme un ensemble de données d’un do- maine spatial en un spectre de fréquence et inversement(IDCT). C’est la plus utilisée parmi les

transformations citées.

Elle permet schématiquement de changer l’échelle de mesure, en passant d’une échelle défi- nissant un pixel en fonction de sa position en x et en y à une échelle définissant la fréquence d’apparition de ce pixel dans un bloc de pixels, en effet, il est dés lors possible de supprimer des informations sans pour autant altérer le résultat final, contrairement à un bloc de pixels où la disparition brute de plusieurs éléments est immédiatement visible [40].

La DCT est effectuée sur une matrice carrée N × N de valeurs de pixels et donne une matrice carrée N × N de cœfficients de fréquence. Le temps de calcul requis pour chaque élément dans la DCT dépend de la taille de la matrice.

Vu la difficulté d’appliquer la DCT sur la matrice entière, celle-ci est décomposée en blocs de taille 8 × 8 pixels.

A la sortie de la matrice de la DCT, la valeur de la position (0,0) est appelée le cœfficient continu, cette valeur représente une moyenne de la grandeur d’ensemble de la matrice d’entrée, ce cœfficient est plus grand d’un ordre de grandeur à toute valeur dans la matrice de la DCT, par convention, les 64 valeurs transformées (de chaque bloc) sont positionnées d’une certaine manière, ainsi la valeur moyenne de tous ces cœfficients est placée en haut à gauche de ce bloc. Plus on s’éloigne des cœfficients continus plus leur grandeurs tendent à diminuer. Ce qui signifie que la DCT concentre la représentation de l’image en haut à gauche de la matrice de sortie. Les cœfficients en bas et à droite de cette matrice contient moins d’information utile [19].

Les équations qui suivent, donnent respectivement la transformée en cosinus discrète directe et inverse.

Transformée Directe

Pour u, v = 0, 1, 2,...,N-1. Transformée Inverse

f(x,y) représente une valeur de l’image initiale pour x et y données. F(u,v) représente les cœfficients de la DCT.

N représente la taille d’un bloc.

La compression JPEG Avec perte

Historique :

L’histoire commence à la fin des années 80, lorsque deux importants groupes de normalisation, le CCITT (Commission Consultative Internationale de la Télégraphie et de la Téléphonie) et l’ISO (Organisation Internationale de Standardisation) ont décidé de créer, appuyés par divers groupes industriels et universitaires, une norme internationale pour la compression d’images fixes [107]. La mise en place d’un standard international était devenue nécessaire pour archiver ou pour faciliter l’échange des images dans des domaines aussi variés que les photos satellites, l’imagerie médicale, la télécopie couleur, ou la cartographie [52]. C’est ainsi que fut créé le groupe JPEG (Joint Photgraphic Experts Group) à l’origine de la norme qui porte son nom. Cette norme comprend des spécifications pour les codages conservateurs (l’image est restituée identique à elle-même à la suite du codage) et non conservateurs (l’image est légèrement modifiée pendant le cycle de compression mais cette modification reste imperceptible pour l’œil) de l’image. Le JPEG est aujourd’hui largement utilisé dans les secteurs de l’informatique et de la communication (appareils photo numériques, scanners, imprimantes, télécopieurs,...) [14].

Principe général :

Le principe de l’algorithme JPEG pour une image à niveaux de gris (étant donné qu’une image couleur est la somme de 3 images de ce même type, dans la suite nous ne considérerons plus que ce genre d’images) est le suivant. La matrice des pixels de l’image numérique est décom- posée en blocs de 8×8 pixels qui vont tous subir le même traitement. Une transformation linéaire, le plus souvent du type FFT (Fast Fourier Transform) ou DCT (Discret consine Transform) est réalisée sur chaque bloc. Ces transformations complexes concentrent l’information sur l’image

en haut et à gauche de la matrice [68]. Les cœfficients de la transformée sont ensuite quantifiés à l’aide d’une table de 64 éléments définissant les pas de quantification. Cette table permet de choisir un pas de quantification important pour certaines composantes jugées peu significatives visuellement. On introduit ainsi un critère perceptif qui peut être rendu dépendant des caracté- ristiques de l’image et de l’application (taille du document). Des codages (prédictif, entropique, l’algorithme de Huffmann ou arithmétique), sans distorsion, sont ensuite réalisés en utilisant les propriétés statistiques des images. Ces compressions seront suivies d’une transformation inverse de la transformation initiale, conduisant à la restitution de l’image [54].

Approfondissons un peu...

Soit un bloc de 8 × 8 pixels à 256 niveaux de gris. Remarque

Si l’on avait pris une image 24 bits, on aurait eu trois matrices différentes ; l’une codant pour le rouge, l’une codant pour le vert et l’une codant pour le bleu. On peut aussi ajouter une matrice pour la chrominance ou pour la luminance. Mais alors l’image sera codée sur 32 bits...

Matrice de pixels d’entrée :

La DCT

L’image est découpée en bloc de 8 × 8 pixels. Ensuite la Transformée en Cosinus Discrète (DCT) est appliqué sur les pixels de chaque bloc. Cette transformation numérique est une variété de la transformée de Fourier. Elle permet de décrire chaque bloc en un graphique de fréquences (correspondant à l’importance et à la rapidité d’un changement de couleur) et en amplitudes (qui est l’écart associé à chaque changement de couleur) plutôt qu’en pixels et qu’en couleurs comme c’est le cas normalement. La DCT étant un procédé très complexe nous ne pouvons aller plus loin dans notre développement et une longue formule que l’on ne comprend pas n’apporterait rien... A ce niveau-ci il n’y a pas encore de pertes de données [68].

Matrice DCT :

Les valeurs de la matrice DCT ont été arrondies à l’entier le plus proche. Le cœfficient continu 1210 sur la composante (0,0) représente " la moyenne " de la grandeur d’ensemble de la matrice d’entrée. Cette moyenne n’est pas une moyenne statique mais un nombre proportionnel à la somme de toutes les valeurs du signal. Les autres valeurs de la DCT sont les " écarts " par rapport à cette moyenne. Lorsque l’on monte dans les hautes fréquences, les valeurs de la matrice ont tendance à s’approcher de 0 quand on s’éloigne du coin supérieur gauche de la matrice. L’étape de la quantification de chaque bloc regroupe les ensembles de valeurs proches [68].

Ensuite, chaque amplitude originale sera remplacée par la valeur moyenne de l’intervalle, c’est à dire l’étape de quantification est de diminuer la précision du stockage des entiers de la matrice DCT pour diminuer le nombre de bits occupés par chaque entier. C’est la partie non conservative de la méthode. Les basses fréquences sont conservées, la précision des hautes fréquences est diminuée. La perte de précision est plus grande lorsqu’on s’éloigne de la position (0,0). Les valeurs de la matrice DCT sera divisée par la matrice de quantification [68].

La quantification

Supposons qu’une variable puisse prendre les valeurs 1, 2, 3, 4, 5... Si l’on prend un pas de quantification de 4 on garde le quotient de la division euclidienne de la valeur par le pas de quantification. Pour cela on utilise d’abord les congruences pour trouver le reste de la division euclidienne, cette division est de la forme a = bq + r avec 0 < r < b donc q = (a − r)/b Donc pour trouver le reste il faut d’abord le calculer avec une congruences de la forme a congru à r modulo b.

Donc si on prend un pas de quantification de 4 on va remplacer : 0, 1, 2, 3 par 0

4, 5, 6, 7 par 1 8, 9, 10, 11 par 2 12, 13, 14, 15 par 3

C’est à cette étape que nous allons perdre de l’information et nous allons la perdre d’une manière " astucieuse " parce que le pas de quantification dont dépend la précision de l’image restituée, va dépendre de la position de la valeur dans la matrice. Nous allons prendre un pas relativement petit pour les valeurs importantes (en haut à gauche) et prendre un pas de plus en plus grand au fur et à mesure qu’on descend vers le bas et la droite de la matrice. L’ensemble des pas qui vont être utilisés constituent ce que l’on appelle une matrice de quantification. Une matrice peut être fabriquée grâce une petite formule :

Q(i, j) = 1 + (1 + i + j) × F q, F q est le facteur de qualité.

Si l’on prend ici un facteur de qualité de 2 nous obtenons après calcul la matrice qui va suivre. Le calcul est très simple, on prend la position de chaque pixel dans la matrice DCT, la valeur du pixel n’intervient pas dans le calcul, puis on met le résultat dans la matrice de quantification aux mêmes coordonnées que dans la matrice DCT.

Matrice de quantification :

Matrice DCT quantifiée :

Pour cela on divise juste comme expliqué ci-dessus la matrice DCT par la matrice de quan- tification. Et cela nous donne :

Lors de la décompression, il suffira de multiplier la valeur de la matrice DCT quantifiée par l’élément correspondant de la matrice de quantification pour obtenir une approximation de la DCT. La matrice obtenue est appelée matrice DCT déquantifiée.

L’encodage :

Le codage de la matrice DCT quantifiée se fait en parcourant les éléments dans l’ordre imposé par une séquence appelée Séquence zigzag (voir figure ci-dessous). Les éléments sont parcourus en commençant par les basses fréquences puis ensuite en traitant les fréquences de plus en plus élevées. Etant donné qu’il y a beaucoup de composantes de hautes fréquences qui sont nulles dans la matrice DCT, la séquence zigzag engendre de longues suites de 0 consécutifs. D’une part, les suites de valeurs nulles sont simplement codées en donnant le nombre de 0 successifs. D’autre part, les valeurs non nulles seront codées en utilisant une méthode statistique de type Huffman [68].

Remarque : Les fréquences les plus hautes se situent en bas à droite et les fréquences les plus basses se situent en haut à gauche.

Fig. 3.5 – Séquence ZigZag.

Compression par ondelettes :

Historique :

La théorie sur laquelle repose la technologie des ondelettes est récente : début des années 1980. Bien que plusieurs scientifiques aient contribué à ce projet, le géophysicien français Jean Morlet est généralement reconnu comme étant le père de cette méthode de compression [55].

Dans un premier temps, nous allons nous intéresser à l’analyse multirésolution, elle conduit directement à la transformée en ondelettes. La modification de la résolution d’un signal permet de traiter les détails pour une échelle choisie. L’aspect théorique de l’analyse multirésolution est exposé en reprenant la présentation faite par S. Mallat [111] et Y. Meyer [112]. La présentation décrit un algorithme pyramidal de calcul rapide de la transformée en ondelettes utilisée dans JPEG2000.

Décomposition par ondelettes et Analyse multirésolution :

Cette partie a pour but de présenter la décomposition par ondelettes et l’Analyse MultiRé- solution (AMR). La compression adaptative développé, est basée sur l’analyse par ondelettes de Haar. Les ondelettes permettent de représenter une image, comme le font les fonctions sinus et cosinus dans l’analyse de Fourier. Les ondelettes améliorent l’étude des signaux par rapport aux cosinus et sinus. Elles autorisent une bonne localisation en temps et en fréquence, toute l’infor- mation se concentre sur très peu de cœfficients. La décomposition se fait à partir d’un ensemble d’ondelettes de base obtenu à partir d’une ondelette ’mère’ notée : ψ(x). Cette base d’ondelettes est obtenue par translations et dilatations. L’analyse par ondelettes découle de l’AMR.

Introduction :

L’analyse d’une image à une seule échelle est inefficace. Les objets formant une image sont de nature fréquentielle différente, apparaissant à une échelle (résolution) puis disparaissant à une autre. Une étude hiérarchique de l’image fait coïncider le contenu spectral pour une résolution. Burt et Adelson [110] ont défini une pyramide multirésolution afin de traiter une image en basse résolution puis de l’augmenter si nécessaire. Ici, nous voulons connaître la composition spectrale d’un signal à toutes ses résolutions. L’analyse temps-fréquence par transformation d’un signal dans la base de Fourier est limitée (principe d’incertitude de Heisenberg). Il est impossible d’avoir une bonne localisation en temps et en fréquence, même en utilisant des méthodes à base de fenêtres glissantes à cause de la taille de la fenêtre d’analyse. L’AMR permet de s’affranchir de ces

problèmes, le signal sera projeté sur des fonctions analysantes pour toutes les résolutions 2−j qui

composent le signal de longueur 2j échantillons, avec j ∈ Z . En effet, comme nous le verrons par

la suite, le signal d’approximation de résolution 2−j sera ensuite décomposé pour la construction

du signal d’approximation et de détails de résolution 2−(j+1).L’itération de ce processus conduit

à un pavage temps-fréquence. Cette décomposition joue le rôle d’un " zoom mathématique ". L’analyse étant réversible sous certaines conditions, on peut reconstruire l’approximation du niveau i à partir des sous-bandes du niveau i+1. Après plusieurs itérations le signal original

peut-être reconstruit. L’approximation d’une fonction à une résolution 2−jest déterminée par des

moyennes locales sur 2j échantillons. D’une façon plus formelle, l’approximation d’une fonction à

la résolution 2−j est définie comme sa projection orthogonale sur un espace Vj ⊂ L2(R). L’espace

Vj regroupe toutes les approximations possibles à l’échelle 2j. La projection orthogonale de f sur

Vj est la fonction fj ∈ Vj qui minimise la distance k fj− f k. La transformée en ondelettes offre

une étude pyramidale. L’analyse se fait à partir de dilatés et de translatés de l’ondelette mère. Cette transformation décrit les détails d’une image pour chaque niveau de résolution. Ces détails correspondent à la différence d’informations entre deux niveaux de résolution successifs.

Après cette présentation, nous allons étudier le concept d’analyse multirésolution qui est sous- jacent à la transformée en ondelettes tel que l’a introduit S. Mallat. On se limite à l’étude d’une analyse dyadique, c’est-à-dire à des facteurs d’échelle égale à 2 sur des signaux de longueur égale

à 2j échantillons. Nous commençons par les signaux mono-dimensionnels puis nous généraliserons

facilement pour les signaux bidimensionnelles (images). Aspects mathématiques

L’AMR et la transformée en ondelettes ont fait l’objet de nombreux travaux et diverses adaptations. Le but ici est de présenter aux lecteurs les fondements mathématiques sur lesquels reposent ces méthodes, afin de comprendre les intérêts d’une telle analyse. Voici la définition des

espaces multirésolution telle que l’ont énoncé S. Mallat [111]et Y. Meyer [112].

Rappel

Le facteur d’échelle 2j est l’inverse de la résolution 2−j.

La Multirésolution

Une suite de sous-espaces fermés {Vj}j∈Z de L2(R) est une suite d’approximations multiré-

solution si elle vérifie les six propriétés suivantes :

– ∀(j, k) ∈ Z2, f (x) ∈ Vj ⇔ f (x − 2jk) ∈ Vj.

Vj est invariant pour toute translation de longueur proportionnelle à l’échelle 2j . Il existe

une grille spatiale ou temporelle sous-jacente par pas de 2j.

– ∀j ∈ Z, Vj+1 ⊂ Vj

Une approximation à la résolution 2−jcontient toute l’information nécessaire à la construc-

tion d’une résolution plus grossière 2−(j+1), c’est une propriété de causalité.

– ∀j ∈ Z, f (x) ∈ Vj ⇔ f (x/2) ∈ Vj+1

La dilatation par un facteur de 2 agrandit les détails d’un facteur de 2, on a bien une approximation à une résolution plus grossière. Il existe une grille fréquentielle sous-jacente en progression géométrique.

– lim Vj =T Vj={0}, avec j allant de −∞ à +∞.

L’intersection des Vj est réduite à 0 dans L2(R). Si la résolution est trop faible, c’est-à-dire

que 2−j tend vers 0, on perd tous les détails. A résolution minimale, on perd toute l’image.

– lim Vj= Adhérence(S Vj) = L2(R) (ou dense dans L2), avec j allant de +∞ à −∞.

L’adhérence d’un espace désigne le plus petit espace fermé contenant cet espace. D’un

autre côté, si la résolution 2−j tend vers +∞, l’approximation converge vers le signal. A

résolution infinie, on reproduit parfaitement tous les signaux.

– ∃ une fonction θ / {θ(x − n)}n∈Z soit une base de Riesz de V0.

Cette existence fournit un théorème de discrétisation. Chaque résolution est engendrée par

une base d’atomes (boîte d’Heisenberg) translatés de 2j. Une base de Riesz est une frame

de vecteurs indépendants [35].

L’opération de base de l’AMR est la décomposition du signal en deux parties : une ap- proximation et les détails du signal. L’approximation est obtenue en projetant le signal sur les translatées d’une fonction basse fréquence appelée fonction échelle. Cette projection isole les va- riations lentes par un filtrage passe-bas. Les détails du signal sont obtenus par projection sur un filtre passe-haut appelé ondelette. La réponse de ce filtre donne les variations rapides du signal : les détails [34].

Les espaces des approximations se construisent par AMR. La construction nécessite une

fonction que nous allons définir. Une fonction nomée, φ0(x) ∈ V0, où l’ensemble de ses translatées

est une base de V0 : φ0(x − k) avec k ∈ Z.

La fonction φ0(x) est une fonction d’échelle si elle vérifie les deux conditions suivantes :

– Les fonctions φj,k(x) = 2−j/2φ0(2−jx − k) avec j, k ∈ Z constituent une base de Vj.

– φ1(x) = (1/√2)φ0(x/2) est compris dans V0. Elle représente une combinaison linéaire des

fonctions de base (φ0(x − k)) de V0.

Voici l’équation reliant deux échelles :

φ1(x) = Pkukφ0(x − k) = (u ∗ φ0)(x). Avec uk la séquence génératrice (le filtre) de la

fonction d’échelle. Elle décrit la multirésolution en permettant d’engendrer la famille des

fonctions d’échelles aux différentes résolutions. Les fonctions d’échelles φj,k engendrent

pour k ∈] − ∞, +∞[ l’espace des approximations à l’échelle j [66].

Espace des détails

L’espace des détails est complémentaire à l’espace des approximations pour chaque échelle j.

La construction de cet espace se fait à partir de la fonction d’échelle φ0 qui génère une ondelette

mère ψ0. L’espace des détails à l’échelle j est engendré par une famille d’ondelettes obtenues par

changement d’échelle et par translation de l’ondelette mère : ψj,k(x) = 2−j/2ψ0(2−jx − k).

L’ondelette ψ1(x) est une combinaison linéaire des fonctions d’échelle translatées :

ψ1(x) =Pkvkφ0(x − k) = (v ∗ φ0)(x)

On peut écrire cette relation en utilisant φj,k : ψ0(x) =√2P

kvkφ0(2x − k).

Comme les fonctions d’échelle, les ondelettes sont engendrées par une séquence génératrice

(un filtre), vk , qui définit l’AMR [105].

Définie en 1910, l’ondelette de Haar représente la première fonction d’analyse. La figure ci- dessous illustre les constructions de la fonction d’échelle et de l’ondelette de Haar. La fonction d’échelle se construit à partir de fonctions portes. L’ondelette se déduit ensuite de la fonction d’échelle. L’ondelette de Haar présente une discontinuité en temps. Depuis, pour améliorer les performances de l’AMR, d’autres ondelettes ont vu le jour (Daubechies, Battle-Lemarié...).

Fig. 3.6 – Construction de la fonction d’échelle et de l’ondelette de Haar.