Transcript Introduction à la compression des données
Slide 1
Introduction à la compression
des données
•
•
La quantité d’information augmente plus
vite que la capacité de stockage.
On a besoin de compresser les données
aussi durant le transfert ! (flot vidéo,
acquisition des données scientifiques,
médicales, industrielles, téléphonie, etc.)
Donc, le domaine a une longue vie devant soi.
Des nouveaux importants algorithmes naissent
tous les ans.
1
Slide 2
Méthodes idéales (universelles et sans pertes) n’existent pas.
Supposons l’existence d’une technique capable de comprimer
tous les fichiers de taille N (bits).
Il existe exactement 2N fichiers de cette taille.
Le résultat de compression est une collection de fichiers de taille
0, 1, 2, 3, …, (N-1). Dans cette collection on peut donc avoir au
total :
n 1
1 2 4 8... 2
fichiers différents. Mais cette somme vaut 2N-1 – 1, donc au
moins un fichier ne subira aucun rétrécissement. Des mauvaises
surprises sont donc toujours possibles.
Cependant, les usagers d’habitude n’en ont pas peur.
Une règle pratique est considérée comme universellement valide:
2
Slide 3
Ce, qui ne se comprime pas (ou très mal) c’est le chaos, une
« structure sans structure », un document aléatoire, sans
régularités, sans redondances. Or, de tels documents sont
rarement comprimés, voire même utiles…
Ceci dit, il faut faire attention ! Plusieurs documents possèdent
une certaine aléatoirité, ils sont bruités, ou leur structure même
implique l’existence des formes irrégulières (ceci par exemple
est pertinent à la plupart des documents visuels – images du
monde réel…)
Rien de fabuleux… Mais c’est un fragment d’une image dont le
contenu a plus de sémantique…
3
Slide 4
De telles images peuvent également se comprimer mal. Parfois
un peu de « nettoyage » préalable peut être utile.
Toute compression cherche à éliminer la redondance, soit par une
structuration différente, mais réversible, permettant de restaurer
l’original (compression sans pertes), soit en supprimant une
partie d’information considérée inutile, ou sans importance
(méthodes avec pertes, irréversibles).
Les méthodes irréversibles offrent un taux de compression
beaucoup plus élevé que méthodes sans pertes ! Bien sûr, parfois
il est hors de question de perdre l’information.
Ceci dit, les critères d’évaluation des techniques de compression
sont très variés, on ne peut se baser uniquement sur le taux.
4
Slide 5
Critères de classification des techniques de
compression :
1.
2.
3.
4.
5.
6.
7.
8.
Taux de compression.
Vitesse de compression.
Vitesse de décompression.
Usage des ressources (en moyenne et maximal).
Rapport qualité/taux (pour les méthodes avec pertes).
Sécurité et robustesse.
Universalité, adaptativité.
Finalement — c’est carrément idiot, mais inéluctable : le coût
d’implémentation/usage dû à la présence de très nombreux
brevets…
Parfois le choix est dicté par les contraintes économiques et assimilées
5
Slide 6
1. Des petits systèmes sans buffers demandent parfois une
grande vitesse de compression/décompression. Systèmes
d'acquisition des données embarqués sur les satellites :
compression. Téléphones portables : les deux… Flots vidéo –
d'habitude – décompression (réception en temps réel, tandis
que l'émetteur peut mettre tout dans les tampons).
2. Il ne faut pas oublier quelques aspects légaux. Cryptage,
l'ajout des segments d'identification, augmentation de la sécurité via CRC, tout cela ajoute de la redondance et diminue la
compression.
3. Parfois les données sont critiques sur le plan physique ou
juridique. Alors, même si 99.9% de l'information est qualitative, dans l'imagerie médicale on est obligé souvent d'utiliser les méthodes sans pertes.
4. Malgré l'existence des méthodes dédiées, l'usage des universelles est populaire à cause de maintenance.
6
Slide 7
Classification des méthodes
1. Techniques statistiques, basées sur le fait que les éléments
(caractères, pixels, valeurs numériques) ne sont pas équiprobables [leurs séquences non plus…]. On verra les méthodes
de Huffman, le codage arithmétique, etc. Ce sont les dispositifs de codage sans pertes. Souvent elles complémentent
d’autres méthodes, plus puissantes, car elles ne sont pas
chères.
2. Techniques structurales. Ici on élimine les redondances par un
changement de représentation plus pointu. Par exemple, une
plage de pixels de même couleurs est remplacée par le code
du pixel et un compteur. Il existent des variantes
différentielles de cette technique, des techniques prédictives,
etc., populaires pour compresser les sons.
7
Slide 8
3. Techniques basées sur des dictionnaires. C’est une variante
« structurale » des méthodes statistiques. Les items fréquents
sont remplacés par leur références. LZ77, LZW, etc.
4. Techniques sémantiques. On essaie de « comprendre » le
document, de trouver son modèle. Techniques difficiles à
implémenter universellement, mais très efficaces dans des
contextes spécifiques. Parfois permettent de remplacer
beaucoup de donnés par leur générateur. Les techniques de
compression fractale peuvent – cum grano salis – être
assimilées à ces méthodes.
5. Techniques spectrales : Fourier, ondelettes, etc. Une variante
de techniques structurales, adaptée aux données numériques
(en particulier aux images) mesurables, où on peut décomposer l’image en une collection de fonctions de base. Un bon
choix de ces fonctions permet de représenter le document par
un petit nombre de coefficients.
8
Slide 9
Méthodes statistiques, survol.
Les deux plus répandues : Huffman et arithmétique. Il faut
commencer par la question : comment mesurer l’information
contenue dans un document, et introduire
L’entropie de Shannon
qui permet d’évaluer le nombre de bits par caractère, nécessaire
pour coder le document. Ce sujet sera abordé par d’autres
enseignants.
Supposons que le document est composé de caractères appartenant à l’alphabet de taille L. L’information (par caractère ; pour
le document entier il est naturel d’exiger que l’information soit
additive et qu’il faut multiplier le résultat par N, la taille du
document…) est le nombre de questions oui/non nécessaires
pour identifier l’objet.
9
Slide 10
Pour l’alphabet de taille L=2K, le nombre de questions est K, et
en général on assigne : S = log2(L). Ou, si on définit p – la
probabilité d’une occurrence, égale à 1/L pour les caractères
équiprobables, S = -log2(p). 8 bits si L a 256 éléments.
Si les caractères ne sont pas équiprobables (p. ex. un d’eux est
beaucoup plus fréquent que les autres), pour identifier le
caractère on peut faire mieux que de diviser l’alphabet en deux
moitiés identiques ; on doit insister d’abord sur l’hypothèse que
c’est le plus fréquent qui est tiré du document. L’additivité, plus
un peu de math permet de dériver la formule générale
S p jlog 2( p j)
j
Ceci est la longueur moyenne (en bits) d’un caractère. Ils sont
toujours considérés non-corrélés !
10
Slide 11
Prenons p. ex., l’alphabet {A,B,C,D,E} avec des probabilités
p:
A
0.4
B
0.2
C
0.15
D
0.15
E
0.1
L’entropie S vaut 2.14644, ce qui est inférieur à log2(5)=2.322.
Et, en utilisant le codage classique, sachant que 5>4, il faudra
quand même prévoir 3 bits pour le code…
Méthode de Huffman.
On construit d’abord une arborescence, dont les feuilles sont les
caractères individuels appariés avec leur probabilités. Ensuite on
groupe les caractères en groupes en sommant les probabilités –
en commençant par les moins probables – et on groupe les
groupes jusqu’à la réduction finale. Ici on aura :
11
Slide 12
A
0.4
B
C
0.2
0
0.1 5
D
1
0
0.3 5
0
0
0.1 5
E
0.1
1
0.2 5
1
0.6
1
1.0
À présent, chaque caractère est codé en suivant les lignes qui le
connectent à la racine (depuis la racine). A=0; B=100; C=101;
D=110; E=111. La longueur moyenne par caractère dans un
document conforme à la statistique a priori est 0.4*1+(0.6)*3 =
2.2.
12
Slide 13
Ceci est mieux que le codage régulier, mais pire que le minimum
théorique, car le cas n’est pas favorable.
Il y a des problèmes. D’habitude on ne connaît pas les fréquences
a priori dans un document arbitraire, et il faut coder la technique
de Huffman adaptative, plus coûteuse.
Répétons que la technique de Huffman souvent accompagne les
autres, par exemple la compression spectrale JPEG se termine
par l’étape statistique.
Compression arithmétique
On va commencer par une histoire de science-fiction.
Un extra-terrestre a visité notre belle Terre.
Nos représentants élus lui ont montré toutes les merveilles :
13
Slide 14
Le Mont St. Michel, les photos d’Estelle Hallyday à poil, un
Livarot hors d’age, la collection de cigares de Bill Clinton, etc.
Et le gars est reparti dans sa soucoupe
volante.
Les élus du Peuple étaient surpris :
« mais, comment M. le ET, ou Thor,
ou quiconque, vous n’allez pas
prendre des photos, écrire un rapport,
ou mémoriser autrement nos
merveilles? »
Et il répondit : « ne craignez rien, j’ai mémorisé tout : le héroïsme des agents de la SNCF dans leur bataille pour la retraite à
35 ans, et le nombre de bourses à l’Université de Caen, etc. ».
Et, il a montré une petite baguette en diamant extragalactique,
avec une petite marque au milieu.
14
Slide 15
Le secret était là.
La marque correspondait à un nombre réel (disons, une fraction
entre 0 et 1) avec beaucoup de chiffres significatifs. On a pu
coder ainsi un document très long, contenant tous les détails sur
les vacances des politiciens Français pendant la canicule.
Les questions à présent sont :
• Comment coder et décoder un document « normal »?
• Comment le faire de manière efficace, incrémentale.
Et, naturellement, comment convaincre les gens que cela marche.
(La technique est bonne, et elle a été brevetée, c’était une option
pour JPEG, et continue à progresser, car les restrictions du brevet
ne sont pas éternels.
15
Slide 16
On commence par représenter l’alphabet par une « baguette »
divisée en segments, dont les longueurs correspondent aux
probabilités de chaque caractère. Le codage marche comme suit :
Si le premier caractère est, disons, C, ceci correspond à
l’intervalle [0.6 – 0.75]. Cet intervalle représente le document.
On « gonfle » cet intervalle, et on lit le second caractère. Disons :
A. L’intervalle est raffiné à [0.6 – 0.66] (0.06 = 0.4*0.15).
A
B
C
D
E
16
Slide 17
Ainsi, la position et la largeur de l’intervalle correspondant à
chaque caractère lu, se transforme en « mapping » qui augmente
la précision du résultat. Après avoir lu 100000 caractères, la
précision sera énorme, le nombre final (quelque part dans
l’intervalle résultant) aura plusieurs chiffres significatifs.
Ceci n’est pas encore l’algorithme du codage, puisqu’il est
difficilement imaginable le stockage d’un tel nombre. Les
compresseurs ne marchent pas comme ça !
On procède de manière suivante. Si un, ou plusieurs chiffres
(notre présentation utilise la base décimale, mais naturellement
l’implémentation se fait en binaire) sont figés, p. ex. ici, si
l’intervalle est devenu [0.6 – 0.66], le premier chiffre ne bougera
plus. On peut écrire « 6 » sur le flot de sortie, « renormaliser »
l’intervalle restant, et continuer la procédure, jusqu’à la fin.
17
Slide 18
Le décodage est similaire. Supposons que le premier chiffre reçu
par le décodeur est « 5 ». Ceci signifie une fraction 0.5…
Le premier caractère est forcément B.
Si on sait que la fraction est F=0.528…, ceci implique : F = 0.4 +
0.128. Mais la renormalisation donne 0.128/0.2 (la longueur de
B) = 0.64.
Ce reste tombe dans l’intervalle « C », donc le début du
document est BC… Ensuite 0.64-0.6=0.04. 0.04/0.15=0.267,
c’est-à-dire, le caractère A.
Les détails mathématiques ne sont donc pas difficiles, mais le
codage doit être très soigneux.
Si les fréquences sont bien connues, la technique arithmétique
peut donner des résultats meilleurs que Huffman ; l’implémentation est un peu plus lente.
18
Slide 19
Techniques structurelles, RLE, LPC, et autre
bazar…
La méthode RLE (Run-Length encoding) est adaptée aux images
style bandes dessinées (ou illustrations pas trop ambitieuses),
éventuellement aux images de synthèse, là où on peut trouver des
« plages » de couleurs conséquentes et fréquentes.
Si une couleur est codée comme, disons, 165, et on trouve une
séquence de 80 pixels identiques, on code (80,165). Le gain est
évident. Il est évident aussi que la technique ne convient pas à la
compression des photos, où il a beaucoup de transitions douces,
mais pas de plages.
On peut cependant généraliser l’approche, et contituer plusieurs
variantes de LPC (Linear predictive Coding).
19
Slide 20
L’instance la plus simple est le codage différentiel. Si l’image
contient un gradient liéaire, une séquence : 45, 47, 49, 51, 53, …
les différences Δi = Ci+1 – Ci sont toutes égales à 2, et RLE
marche. (Il faut préserver le premier item tel quel).
Dans un cas plus complexe, p. ex. pour la séquence 46, 50, 52,
49, 56, 54, … on obtient Δ = {4, 2, -3, 7, -2, …} et rien n’est
évident. Cependant, on voit deux choses :
1. En moyenne la séquence d’origine est croissante, les
différences oscillent autour de zéro.
2. Elles sont plutôt petites ; on peut les coder sur un nombre
moindre de bits.
Sur un plan plus général, on peut – ayant les caractères C1, C2, …
Cn, extrapoler (p. ex. par un polynôme) la valeur suivante, et en
coder seulement la différence. Ceci est le LPC.
20
Slide 21
On peut aussi utiliser une prédiction 2-dimensionnelle, par
exemple déduire la valeur d’un pixel en fonction de ses voisins :
Bien sûr, la généralisation 3D est aussi possible (pour la
compression des images volumiques).
On voit clairement qu’ici ce qui compte ce n’est pas la fréquence
d’un caractère ou pixel, mais sa relation aux autres, les possibles
corrélations. Des techniques statistiques qui s’appuient sur le
fait que la probabilité d’un caractère dépend de son prédécesseur(s) existent aussi. On parle de méthodes Markoviennes. Elles
ont besoin de mémoire pour stocker les probabilités
conditionnelles, et ceci peut être assez onéreux.
21
Slide 22
Méthodes basées sur les dictionnaires
La structure/redondance résultante d’occurrence répétitive des
séquences d’items (des mots, des éléments des motifs géométriques, etc.) peut être éliminée grâce aux dictionnaires, qui
stockent les motifs les plus fréquents, et permettent de remplacer
un « mot » fréquent par son « indice ». Les plus populaires sont
basées sur les variantes de LZW [Lempel-Ziv-Welsh] (Unix
compress, GIF, etc.) et LZ77 (Images PNG, gzip, etc.).
La méthode LZ77 utilise le document même comme son
« dictionnaire ». On prévoit une zone assez longue, disons, de
32K qui précède le point de lecture, comme une zone de
recherche. Si dans son intérieur on trouve un motif (mot)
identique avec le courant, on code son décalage (offset) et sa
longueur. Cette fenêtre « glisse » avec la lecture.
22
Slide 23
Le bon fonctionnement de la méthode est basée sur le fait que les
répétitions sont souvent locales, un mot est fréquent non pas dans
le document entier et dispersé, mais dans une de ces parties. Les
combinaisons de pixels (gradients spécifiques) dans des images
aussi.
La méthode LZW construit et utilise un dictionnaire spécial, de
taille variable. Toute information émise par le codeur ce sont les
indices, mais d’abord on place l’alphabet en début du dictionnaire .
Quand on trouve dans le document codé une séquence de M
lettres, le préfixe (M-1) a été déjà vu et figure dans le dictionnaire. Donc, on stocke la nouvelle séquence de manière
économique. On ne sort pas directement son indice, on reste
toujours « un pas en arrière ».
23
Slide 24
Quand le codeur trouve une séquence déjà vue, il continue la
lecture, car la séquence connue peut être plus longue ; rien ne
sort du codeur. Seulement quand la séquence devient « neuve »,
le codage a lieu.
Le dictionnaire croît. Si au début 258 éléms suffisaient (l’alphabet, le EOF et un caractère spéciale : « casser le dictionnaire »),
et donc 9 bits par item, on aura besoin de 10, 11, etc. bits plus
tard pour chaque indice. Donc, le code est de taille variable.
Ceci n’est pas grave. Le décodeur sait quand l’allocation
courante ainsi que le codage débordent, car il construit le dictionnaire « en synchronie » avec le codeur. Si la taille du dictionnaire dépasse les bornes du protocole établi (p. ex. 12 bits pour
GIF), on supprime le dictionnaire, et on recommence. Ceci
correspond à la localité des références.
24
Slide 25
Compression spectrale
Les photos, ou, plus généralement, les séquences numériques
relativement régulières, où le passage entre les voisins est
rarement abrupt, peuvent être considérées comme des fonctions
régulières sur un support fini. Pour des images en niveau de gris,
ce niveau est la valeur de la fonction, sinon il faut choisir un
espace de couleurs, et travailler 3 plans séparément. On peut
donc effectuer leur développement en série de Fourier.
En fait, pour des raisons pratiques, on utilise un autre procédé, la
transformation cosinus discrète, qui est une variante réelle de la
méthode de Fourier.
On obtiendra ainsi le nombre de coefficients égal à la taille du
document. Aucune information n’est perdue.
25
Slide 26
Voici un petit fragment d’une image, où on voit la douceur des
transitions (absence des fréquences très hautes). Le résultat de la
transformée, à droite, dûment normalisé, est beaucoup moins
structuré !
On peut espérer que cette représentation rend la redondance plus
explicite. On commence donc par un peu de math :
26
Slide 27
Mais on espère qu’il soit possible de « décapiter » le résultat, de
supprimer un certain nombre de coefficients (en les remplaçant
par zéro), sans changer le contenu informationnel de manière
significative.
Plus généralement on effectue un seuillage (quantisation ou
quantification) du résultat. Un tel procédé constitue la base de
presque toutes les techniques de compression avec pertes.
On stocke le résultat, mais avant on améliore légèrement le taux,
en comprimant le résultat avec Huffman (ou cod. arith.). Le
décodeur doit exécuter la transformée inverse, la IDCT :
27
Slide 28
Dans JPEG on ne transforme pas l’image entière. Le résultat
d’une telle transformation aurait accumulé des informations sur
les corrélations entre les parties très distantes de l’image, ce qui
n’a pas beaucoup de sens, et apporte des difficultés numériques.
On coupe l’image en blocs de 8*8 pixels, la DCT et seuillage
concernent un bloc. Voici la visualisation du sens des fonctions
de base :
28
Slide 29
Le seuillage est sélectif, on n’enlève tout simplement pas les
coeffs les plus petits, mais on ajoute de la pondération :
fluctuations « denses » (coefficients loin du coin supérieur
gauche) sont moins importantes visuellement.
Donc, la sérialisation (le document est 1-dim
même si l’image est 2-dimensionnelle) suit la
règle visualisée à droite. C’est l’ordre de stockage, et aussi un peu, l’ordre de la décroissance des facteurs de pondération avant le
seuillage.
La compression finale, statistique est globale.
Mot final. En cas de transitions « dures » fréquentes, JPEG soit
est inefficace, soit produit des artefacts. Ne jamais comprimez
avec JPEG des documents visuels contenant des textes !
29
Slide 30
Voici une image – original, et quelques compressions JPEG. La
matrice occupe 150kB. Les JPGs : 19 et 12K. En bas, avec le
taux de compression plus impressionant : 5 et 3K. Un PNG
occupe 65K, mais en 16 millions de couleurs! En 256 : 29K.
30
Slide 31
On voit que la cohérence entre les zones voisines est très
importante. Passons donc au sujet de cohérence temporelle :
Compression MPEG des images animées.
Une séquence animée est composée de « cadres » (frames)
similaires, qui visualisent une scène contiguë. À l’intérieur du
chaque cadre on peut, et on effectue une compression intraframe (typiquement une variante du JPEG), mais des gains plus
importants sont possibles grâce à la relation entre les images
voisines dans le temps.
On choisit d’abord un percentage (typiquement 1/12) de cadres
comprimés uniquement spatiellement, ce sont les cadres « I ». Le
reste est transformée spécialement, une partie ce sont les cadres
« P » (comme prévision). Il y aura aussi « B » pour prévision bidirectionnelle.
31
Slide 32
Pour construire un cadre « P » à partir d’un original il ne suffit
pas calculer les différences, car tout mouvement écrase toute
correspondance géométrique.
On divise l’image en blocs (8*8, 16*16 ; la luminance est plus
importante que les canaux de chrominance [teintes]). Pour
chaque bloc on cherche sur le prédécesseur (un frame I ou P) le
bloc correspondant le plus adéquat possible. On code le offset (le
décalage) par rapport à sa nouvelle position, éventuellement la
différence entre les deux blocs compactée par des techniques
déjà mentionnées.
Un bloc B résulte de la comparaison de l’image avec le prédécesseur et avec le successeur. On choisit le meilleur, mais on
peut également choisir la moyenne, et aussi exploiter la méthode
différentielle.
32
Slide 33
On peut donc décoder la séquence temporelle « virtuelle »
IBBPBBPBBPBBIBBPBBPB... , mais le codeur envoie les
frames dans un ordre différent, le premier P doit sortir avant les
premiers B (sinon, l’anticipation n’est pas possible).
Les modules du décodeur peuvent travailler en parallèle, et
décoder les frames dans un ordre tordu.
Le nom MPEG n’est pas synonymique avec les protocoles de
compression ; les standards MPEG 4 et MPEG 7 sont infiniment
plus riches.
En particulier, la célèbre technique MP3 de compression de la
musique appartient également au domaine MPEG.
Quelques mots à son sujet :
33
Slide 34
Compression MP3 des flots acoustiques.
On profite de quelques propriétés du système auditif humain, pas
seulement des redondances structurelles, statistiques, etc.
1. Nous ne pouvons entendre des sons de fréquence > 20 kHz.
Donc, on peut commencer par le filtrage qui élimine des
fréquences trop hautes. Ceci diminue déjà l’information
contenue dans le flot.
Mais il ne faut pas faire cela trop bêtement… Le flot
acoustique analogue est discrétisé. Pour éviter des alias
(fréquences écho, mauvaises), il ne faut pas descendre en
dessous de la fréquence limite de Nyquist, égale à 2 × la
fréquence maximale rendue. On utilise souvent 44 kHz.
2. On sait que la sensibilité de l’oreille dépend de la fréquence,
on entend moins bien les sons aigus.
34
Slide 35
La courbe de sensibilité normale :
35
Slide 36
3. Ensuite, il existe un phénomène de masquage. Si un son très
fort coexiste avec un autre, plus faible, de fréquence pas trop
éloignée, ce second son peut devenir inaudible. On effectue
donc l’analyse spectrale fenêtrée du signal, on le divise en
quelques dizaines de bandes, et dans chaque bande on
élimine les contributions trop faibles ou masquées.
4. On sait qu’après avoir entendu un bruit très fort, l’inertie de
notre appareil auditif nous empêche d’entendre pendant
quelques dizaines de milisecondes un son comparable. On
élimine de telles contributions.
Curieusement, on a découvert que les signaux plus forts reçus
par l’oreille, sont plus rapides dans la partie neurologique de
l’appareil, que les signaux plus faibles. Ceci casse la causalité triviale, et ensemble avec les particularités de la neuropsychologie de notre mémoire fait que l’on « oublie » un
signal faible, si dans 4 msec on entend un plus fort !
36
Slide 37
Tout ensemble, complété par des techniques statistiques, etc.,
donne une excellente technique de compression. Taux 1/10 par
rapport à un fichier .wav sont typiques. Cependant, tout dépend
de ce que l’on veut faire avec. Pour écouter quelque fois une
chanson, le taux d’échantillonnage 64 kbits/sec est suffisant. Si
on veut graver un CD, il faut prévoir le double…
Tout ceci montre que les spécialistes du domaine ne peuvent pas
être recrutés parmi les « purs algorithmiciens », ou purs ingénieurs du son. Tout le domaine de compression est une affaire
multidisciplinaire.
L’analyse spectrale classique, avec les transformées de Fourier
commence depuis quelques années à exploiter très intensement
une autre base de fonctions que les sinus et les cosinus. Il faut
donc savoir un peu sur :
37
Slide 38
Compression par ondelettes
La technologie des ondelettes est une catégorie très riche, il y a
plusieurs bases d’ondelettes, et les gens inventent toujours des
nouvelles fonctions, mieux adaptées au problème.
En général, une ondelette est une fonction qui oscille (comme
cosinus), mais qui possède un support fini (ou décroissant très
rapidement en dehors d’un certain intervalle). (D’ailleurs, cette
propriété permet de ne pas utiliser les blocs, comme en JPEG ;
l’image entière subit la transformation.
L’idée générale est simple : on développe le document – un flot
numérique, une image, etc. en ondelettes, on quantise et par
seuillage on élimine un certain nombre de coefficients, et c’est
tout. Le décodeur renverse la transformée.
38
Slide 39
Comment ça fonctionne?
Imaginez une séquence numérique et son graphique :
15
20
25
20
05
30
40
20
15
10
15
25
35
20
10
05
45
40
35
30
25
20
15
Fct.
10
5
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Le graphique est une « fonction », en apparence représentée par
une ligne contiguë, même si nous savons qu’en fait ce n’est
qu’un ensemble discret de points.
39
Slide 40
On peut la représenter autrement, par exemple :
45
40
35
30
25
20
15
10
5
0
Fct.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Comme fonction mathématique,
notre objet est une somme de
fonctions à droite, des seuils
égaux à 1 entre n et n+1 et zéro
ailleurs, pondérées par des valeurs
appropriées (pour l’histogramme).
1,2
1
0,8
0,6
0,4
0,2
0
40
Slide 41
Un seuil de base : la fonction égale à 1 entre 0 et 1, et zéro
ailleurs, s’appelle la fonction de base de Haar. Il en faut deux,
entre 0 et 1, et décalée : entre 1 et 2, pour avoir deux pixels, entre
0 et 2.
Mais nous pouvons changer de représentation. Construire un
« macro-pixel » égal à la moyenne de deux, entre 0 et 2 :
c=(p0+p1)/2, et compléter l’information par la différence :
d=p0-c. Pour la manipulation cela suffit, pour la visualisation on
peut supposer, que l’on combine l’original en prenant le
« macropixel » deux fois plus large, et une fonction oscillante :
1,5
1
0,5
0
-0,5
-1
-1,5
41
Slide 42
Cette fonction, égale à 1 entre 0 et 1 et –1 entre 1 et 2 (ou
normalisée différemment : 1 entre 0 et 0.5 et –1 entre 0.5 et 1)
c’est une ondelette (de Haar). La séquence de 16 nombres subit
la transformation suivante : on calcule 8 moyennes : 17,5, 22,5,
etc., et 8 « fluctuations »: -2,5, +2,5,.... Ensuite on répète la
même procédure avec les moyennes : 4 moyennes de 4 pixels,
plus 4 fluctuations. On continue encore deux fois, jusqu’à la
moyenne finale. C’est la représentation en ondelettes. On garde
une seule moyenne, plus les contributions oscillantes.
Le reste est évident : seuillage, et suppression d’un certain
nombre de coefficients.
Dans la pratique on utilise la base de Haar rarement, elle est un
peu misérabiliste… Souvent il faut calculer les moyennes
pondérées de 4, 6, 8 etc. pixels, et les ondelettes sont des
fonctions très complexes. Mais on ne les regarde pas !
42
Slide 43
Les ondelettes de degré supérieur, par exemple celles conçues
par Ingrid Daubechies, où on combine quatre éléments pour
obtenir la moyenne sont des fonctions fractales, assez épouvantables…
43
Slide 44
Bien sûr, pour les images il faut effectuer les transformées
« horizontale » et « verticale ». Il faut décider quel espace de
couleurs utiliser, etc.
La technique est adaptative, et très efficace. Elle constitue la base
du JPEG 2000. Son implémentation n’est pas difficile, mais
demande une certaine expérience dans le domaine numérique.
Commentaire
La quantisation (seuillage) peut intervenir dans plusieurs contextes. On peut p. ex. diminuer le nombre de couleurs, en utilisant une palette restreinte. Ceci est également une compression.
Parfois on essaie de « bricoler » les couleurs intermédiaires par
dithering, on remplace une plage orange par une mixture de
pixels jaunes et rouges. Attention, ceci complexifie la structure,
et rend les méthodes structurales moins efficaces !!
44
Slide 45
Compression fractale
C’est une technique un peu bizarre… Elle a eu une mauvaise
presse à cause du fait que son inventeur, Michael Barnsley, s’est
com-porté de manière pas très ouverte, et les promesses sans
justifica-tion ont précédé l’analyse (et les premières réalisations
pratiques faites par Arnaud Jacquin, un étudiant de Barnsley). La
technique a été un peu oubliée aujourd’hui, mais conceptuellement elle reste assez intéressante/intrigante. On commence par
la synthèse d’une image, non pas par son traitement.
45
Slide 46
Ce n’est pas une image quelconque, mais un objet auto-similaire.
On peut faire des images de ce genre en utilisant une « photocopieuse retrécissante » avec plusieurs lentilles: plusieurs copies de
l’original, mais plus petites et transformées (translation et rotation). Voici ce qui se passe si on itère plusieurs fois cette
manipulation :
46
Slide 47
Quelle que soit l’image d’origine, si sa copie multiple est passée
par la photocopieuse, le résultat aussi, etc., l’image finale n’a
rien à voir avec l’original, et est conditionnée seulement par les
paramètres de la copieuse. Le résultat final, le triangle de
Sierpinski est l’attracteur de cette collection de 3 transformations consistant d’un facteur d’échelle et 2 paramètres de
translation. Au total : 9 paramètres, 9 nombres…
Ainsi, quelques paramètres à peine (plus un programme universel) définissent une image de complexité conséquente !
Avec plus de paramètres (5 transformations, ou une dizaine…)
on peut arriver à créer des images assez impressionnantes. Par
Exemple, 5 tranformations suffisent pour créer l’image de l’arbre
sur la page suivante :
47
Slide 48
48
Slide 49
(L’algorithme de création de telles images peuvent utiliser la
technique de « copieuse », mais plus souvent on profite d’une
technique aléatoire : on commence par un point, et on applique
aléatoirement une des transformations. On fait cela un certain
nombre de fois sans rien afficher, et ensuite, quand les points
convergent vers l’attracteur, on les dessine).
Mais qu’est-ce que tout cela à voir avec la compression d’images? Les vraies images ne sont pas autosimilaires !
Oui, et non… Certes, la technique est différente, mais les
concepts sont similaires. Observons qu’une image peut posséder
des zones similaires modulo retrécissement (parfois aussi :
rotation ou changement du contraste des couleurs), et – bien sûr
– translation.
49
Slide 50
Voici une vielle amie : Lena.
50
Slide 51
La description qualitative de l’algorithme de compression est
dont la suivante :
On parcourt l’image et on la divise en blocs (disons, de 8x8
pixels).
Pour chaque bloc on cherche un macro-bloc, 2 fois plus grand,
et similaire (modulo rotation de multiple de 90°, et
éventuellement avec la luminosité et contraste différents).
On stocke les paramètres des opérations qui transformeraient le
macro-bloc, en bloc d’origine.
Donc, 2 nombres qui décrivent le positionnement, deux nombres
responsables du changement de contenu-couleur (si image en
niveaux du gris ; pour des images couleur c’est plus compliqué),
et les paramètres discrètes décrivant la rotation.
Le problème est que trouver des macro-blocs très similaires est
difficile, parfois impossible…
51
Slide 52
L’essentiel pour la compression est cette recherche des macroblocs. Plusieurs variantes ont vu le jour, afin d’accélérer la recherche, ou l’évaluation de la qualité de l’approximation. La
compression fractale est une méthode très lente…
On a exploité la division en triangles déformables, et aussi les
quadtrees. De temps en temps quelqu’un propose une nouvelle
technique, mais le progrès est lent. Plusieurs chercheurs ont
concentré leurs investigations sur les ondelettes, et les techniques
fractales ne sont plus à la mode..
Après le codage – compression, il faut préciser comment on
décompresse le fichier contenant la description des paramètres
des transformations des blocs. Cette procédure est rapide. On
commence par une image quelconque, et on lance itérativement
la « copieuse ».
52
Slide 53
Voici les itérations zéro, un, deux et dix, avec Lena comme
l’original comprimé.
53
Slide 54
La représentation compressée d’une image ne contient pas – en
principe - sa taille physique, on peut décompresser l’image plus
grande ou plus petite (un peu étonnant…). Et alors, ce qui se
passe n’a rien à voir avec la manifestation des « blocs » carrés,
ou « macro-pixels ». Comparons le cas fractal avec un simple
changement d’échelle du chapeau de Lena :
Ainsi la décompression fractale peut « ajouter des détails », ce
qui peut être utile pour rendre une forêt, une pelouse, etc.
54
Slide 55
Actuellement les techniques basées sur les IFS (Iterated function
systems) trouvent aussi quelques applications dans la re-synthèse
des textures, où on représente des textures – décorations surfaciques des modèles 3D non pas par des images (bitmaps), mais
on les engendre procéduralement.
Les programmes de génération sont pilotés par des paramètres
extraits des textures réelles (forêt lointaine, sable, pelouse, relief
des montagnes, une surface métallique rouillée, etc.). Le résultat
n’est pas identique à l’original, mais il possède les mêmes
propriétés statistiques : répartition des couleurs, « rugosité », etc.
On peut considérer que ceci est également une compression.
À présent vous allez souffrir une bonne dose de théorie…
55
Slide 56
56
Introduction à la compression
des données
•
•
La quantité d’information augmente plus
vite que la capacité de stockage.
On a besoin de compresser les données
aussi durant le transfert ! (flot vidéo,
acquisition des données scientifiques,
médicales, industrielles, téléphonie, etc.)
Donc, le domaine a une longue vie devant soi.
Des nouveaux importants algorithmes naissent
tous les ans.
1
Slide 2
Méthodes idéales (universelles et sans pertes) n’existent pas.
Supposons l’existence d’une technique capable de comprimer
tous les fichiers de taille N (bits).
Il existe exactement 2N fichiers de cette taille.
Le résultat de compression est une collection de fichiers de taille
0, 1, 2, 3, …, (N-1). Dans cette collection on peut donc avoir au
total :
n 1
1 2 4 8... 2
fichiers différents. Mais cette somme vaut 2N-1 – 1, donc au
moins un fichier ne subira aucun rétrécissement. Des mauvaises
surprises sont donc toujours possibles.
Cependant, les usagers d’habitude n’en ont pas peur.
Une règle pratique est considérée comme universellement valide:
2
Slide 3
Ce, qui ne se comprime pas (ou très mal) c’est le chaos, une
« structure sans structure », un document aléatoire, sans
régularités, sans redondances. Or, de tels documents sont
rarement comprimés, voire même utiles…
Ceci dit, il faut faire attention ! Plusieurs documents possèdent
une certaine aléatoirité, ils sont bruités, ou leur structure même
implique l’existence des formes irrégulières (ceci par exemple
est pertinent à la plupart des documents visuels – images du
monde réel…)
Rien de fabuleux… Mais c’est un fragment d’une image dont le
contenu a plus de sémantique…
3
Slide 4
De telles images peuvent également se comprimer mal. Parfois
un peu de « nettoyage » préalable peut être utile.
Toute compression cherche à éliminer la redondance, soit par une
structuration différente, mais réversible, permettant de restaurer
l’original (compression sans pertes), soit en supprimant une
partie d’information considérée inutile, ou sans importance
(méthodes avec pertes, irréversibles).
Les méthodes irréversibles offrent un taux de compression
beaucoup plus élevé que méthodes sans pertes ! Bien sûr, parfois
il est hors de question de perdre l’information.
Ceci dit, les critères d’évaluation des techniques de compression
sont très variés, on ne peut se baser uniquement sur le taux.
4
Slide 5
Critères de classification des techniques de
compression :
1.
2.
3.
4.
5.
6.
7.
8.
Taux de compression.
Vitesse de compression.
Vitesse de décompression.
Usage des ressources (en moyenne et maximal).
Rapport qualité/taux (pour les méthodes avec pertes).
Sécurité et robustesse.
Universalité, adaptativité.
Finalement — c’est carrément idiot, mais inéluctable : le coût
d’implémentation/usage dû à la présence de très nombreux
brevets…
Parfois le choix est dicté par les contraintes économiques et assimilées
5
Slide 6
1. Des petits systèmes sans buffers demandent parfois une
grande vitesse de compression/décompression. Systèmes
d'acquisition des données embarqués sur les satellites :
compression. Téléphones portables : les deux… Flots vidéo –
d'habitude – décompression (réception en temps réel, tandis
que l'émetteur peut mettre tout dans les tampons).
2. Il ne faut pas oublier quelques aspects légaux. Cryptage,
l'ajout des segments d'identification, augmentation de la sécurité via CRC, tout cela ajoute de la redondance et diminue la
compression.
3. Parfois les données sont critiques sur le plan physique ou
juridique. Alors, même si 99.9% de l'information est qualitative, dans l'imagerie médicale on est obligé souvent d'utiliser les méthodes sans pertes.
4. Malgré l'existence des méthodes dédiées, l'usage des universelles est populaire à cause de maintenance.
6
Slide 7
Classification des méthodes
1. Techniques statistiques, basées sur le fait que les éléments
(caractères, pixels, valeurs numériques) ne sont pas équiprobables [leurs séquences non plus…]. On verra les méthodes
de Huffman, le codage arithmétique, etc. Ce sont les dispositifs de codage sans pertes. Souvent elles complémentent
d’autres méthodes, plus puissantes, car elles ne sont pas
chères.
2. Techniques structurales. Ici on élimine les redondances par un
changement de représentation plus pointu. Par exemple, une
plage de pixels de même couleurs est remplacée par le code
du pixel et un compteur. Il existent des variantes
différentielles de cette technique, des techniques prédictives,
etc., populaires pour compresser les sons.
7
Slide 8
3. Techniques basées sur des dictionnaires. C’est une variante
« structurale » des méthodes statistiques. Les items fréquents
sont remplacés par leur références. LZ77, LZW, etc.
4. Techniques sémantiques. On essaie de « comprendre » le
document, de trouver son modèle. Techniques difficiles à
implémenter universellement, mais très efficaces dans des
contextes spécifiques. Parfois permettent de remplacer
beaucoup de donnés par leur générateur. Les techniques de
compression fractale peuvent – cum grano salis – être
assimilées à ces méthodes.
5. Techniques spectrales : Fourier, ondelettes, etc. Une variante
de techniques structurales, adaptée aux données numériques
(en particulier aux images) mesurables, où on peut décomposer l’image en une collection de fonctions de base. Un bon
choix de ces fonctions permet de représenter le document par
un petit nombre de coefficients.
8
Slide 9
Méthodes statistiques, survol.
Les deux plus répandues : Huffman et arithmétique. Il faut
commencer par la question : comment mesurer l’information
contenue dans un document, et introduire
L’entropie de Shannon
qui permet d’évaluer le nombre de bits par caractère, nécessaire
pour coder le document. Ce sujet sera abordé par d’autres
enseignants.
Supposons que le document est composé de caractères appartenant à l’alphabet de taille L. L’information (par caractère ; pour
le document entier il est naturel d’exiger que l’information soit
additive et qu’il faut multiplier le résultat par N, la taille du
document…) est le nombre de questions oui/non nécessaires
pour identifier l’objet.
9
Slide 10
Pour l’alphabet de taille L=2K, le nombre de questions est K, et
en général on assigne : S = log2(L). Ou, si on définit p – la
probabilité d’une occurrence, égale à 1/L pour les caractères
équiprobables, S = -log2(p). 8 bits si L a 256 éléments.
Si les caractères ne sont pas équiprobables (p. ex. un d’eux est
beaucoup plus fréquent que les autres), pour identifier le
caractère on peut faire mieux que de diviser l’alphabet en deux
moitiés identiques ; on doit insister d’abord sur l’hypothèse que
c’est le plus fréquent qui est tiré du document. L’additivité, plus
un peu de math permet de dériver la formule générale
S p jlog 2( p j)
j
Ceci est la longueur moyenne (en bits) d’un caractère. Ils sont
toujours considérés non-corrélés !
10
Slide 11
Prenons p. ex., l’alphabet {A,B,C,D,E} avec des probabilités
p:
A
0.4
B
0.2
C
0.15
D
0.15
E
0.1
L’entropie S vaut 2.14644, ce qui est inférieur à log2(5)=2.322.
Et, en utilisant le codage classique, sachant que 5>4, il faudra
quand même prévoir 3 bits pour le code…
Méthode de Huffman.
On construit d’abord une arborescence, dont les feuilles sont les
caractères individuels appariés avec leur probabilités. Ensuite on
groupe les caractères en groupes en sommant les probabilités –
en commençant par les moins probables – et on groupe les
groupes jusqu’à la réduction finale. Ici on aura :
11
Slide 12
A
0.4
B
C
0.2
0
0.1 5
D
1
0
0.3 5
0
0
0.1 5
E
0.1
1
0.2 5
1
0.6
1
1.0
À présent, chaque caractère est codé en suivant les lignes qui le
connectent à la racine (depuis la racine). A=0; B=100; C=101;
D=110; E=111. La longueur moyenne par caractère dans un
document conforme à la statistique a priori est 0.4*1+(0.6)*3 =
2.2.
12
Slide 13
Ceci est mieux que le codage régulier, mais pire que le minimum
théorique, car le cas n’est pas favorable.
Il y a des problèmes. D’habitude on ne connaît pas les fréquences
a priori dans un document arbitraire, et il faut coder la technique
de Huffman adaptative, plus coûteuse.
Répétons que la technique de Huffman souvent accompagne les
autres, par exemple la compression spectrale JPEG se termine
par l’étape statistique.
Compression arithmétique
On va commencer par une histoire de science-fiction.
Un extra-terrestre a visité notre belle Terre.
Nos représentants élus lui ont montré toutes les merveilles :
13
Slide 14
Le Mont St. Michel, les photos d’Estelle Hallyday à poil, un
Livarot hors d’age, la collection de cigares de Bill Clinton, etc.
Et le gars est reparti dans sa soucoupe
volante.
Les élus du Peuple étaient surpris :
« mais, comment M. le ET, ou Thor,
ou quiconque, vous n’allez pas
prendre des photos, écrire un rapport,
ou mémoriser autrement nos
merveilles? »
Et il répondit : « ne craignez rien, j’ai mémorisé tout : le héroïsme des agents de la SNCF dans leur bataille pour la retraite à
35 ans, et le nombre de bourses à l’Université de Caen, etc. ».
Et, il a montré une petite baguette en diamant extragalactique,
avec une petite marque au milieu.
14
Slide 15
Le secret était là.
La marque correspondait à un nombre réel (disons, une fraction
entre 0 et 1) avec beaucoup de chiffres significatifs. On a pu
coder ainsi un document très long, contenant tous les détails sur
les vacances des politiciens Français pendant la canicule.
Les questions à présent sont :
• Comment coder et décoder un document « normal »?
• Comment le faire de manière efficace, incrémentale.
Et, naturellement, comment convaincre les gens que cela marche.
(La technique est bonne, et elle a été brevetée, c’était une option
pour JPEG, et continue à progresser, car les restrictions du brevet
ne sont pas éternels.
15
Slide 16
On commence par représenter l’alphabet par une « baguette »
divisée en segments, dont les longueurs correspondent aux
probabilités de chaque caractère. Le codage marche comme suit :
Si le premier caractère est, disons, C, ceci correspond à
l’intervalle [0.6 – 0.75]. Cet intervalle représente le document.
On « gonfle » cet intervalle, et on lit le second caractère. Disons :
A. L’intervalle est raffiné à [0.6 – 0.66] (0.06 = 0.4*0.15).
A
B
C
D
E
16
Slide 17
Ainsi, la position et la largeur de l’intervalle correspondant à
chaque caractère lu, se transforme en « mapping » qui augmente
la précision du résultat. Après avoir lu 100000 caractères, la
précision sera énorme, le nombre final (quelque part dans
l’intervalle résultant) aura plusieurs chiffres significatifs.
Ceci n’est pas encore l’algorithme du codage, puisqu’il est
difficilement imaginable le stockage d’un tel nombre. Les
compresseurs ne marchent pas comme ça !
On procède de manière suivante. Si un, ou plusieurs chiffres
(notre présentation utilise la base décimale, mais naturellement
l’implémentation se fait en binaire) sont figés, p. ex. ici, si
l’intervalle est devenu [0.6 – 0.66], le premier chiffre ne bougera
plus. On peut écrire « 6 » sur le flot de sortie, « renormaliser »
l’intervalle restant, et continuer la procédure, jusqu’à la fin.
17
Slide 18
Le décodage est similaire. Supposons que le premier chiffre reçu
par le décodeur est « 5 ». Ceci signifie une fraction 0.5…
Le premier caractère est forcément B.
Si on sait que la fraction est F=0.528…, ceci implique : F = 0.4 +
0.128. Mais la renormalisation donne 0.128/0.2 (la longueur de
B) = 0.64.
Ce reste tombe dans l’intervalle « C », donc le début du
document est BC… Ensuite 0.64-0.6=0.04. 0.04/0.15=0.267,
c’est-à-dire, le caractère A.
Les détails mathématiques ne sont donc pas difficiles, mais le
codage doit être très soigneux.
Si les fréquences sont bien connues, la technique arithmétique
peut donner des résultats meilleurs que Huffman ; l’implémentation est un peu plus lente.
18
Slide 19
Techniques structurelles, RLE, LPC, et autre
bazar…
La méthode RLE (Run-Length encoding) est adaptée aux images
style bandes dessinées (ou illustrations pas trop ambitieuses),
éventuellement aux images de synthèse, là où on peut trouver des
« plages » de couleurs conséquentes et fréquentes.
Si une couleur est codée comme, disons, 165, et on trouve une
séquence de 80 pixels identiques, on code (80,165). Le gain est
évident. Il est évident aussi que la technique ne convient pas à la
compression des photos, où il a beaucoup de transitions douces,
mais pas de plages.
On peut cependant généraliser l’approche, et contituer plusieurs
variantes de LPC (Linear predictive Coding).
19
Slide 20
L’instance la plus simple est le codage différentiel. Si l’image
contient un gradient liéaire, une séquence : 45, 47, 49, 51, 53, …
les différences Δi = Ci+1 – Ci sont toutes égales à 2, et RLE
marche. (Il faut préserver le premier item tel quel).
Dans un cas plus complexe, p. ex. pour la séquence 46, 50, 52,
49, 56, 54, … on obtient Δ = {4, 2, -3, 7, -2, …} et rien n’est
évident. Cependant, on voit deux choses :
1. En moyenne la séquence d’origine est croissante, les
différences oscillent autour de zéro.
2. Elles sont plutôt petites ; on peut les coder sur un nombre
moindre de bits.
Sur un plan plus général, on peut – ayant les caractères C1, C2, …
Cn, extrapoler (p. ex. par un polynôme) la valeur suivante, et en
coder seulement la différence. Ceci est le LPC.
20
Slide 21
On peut aussi utiliser une prédiction 2-dimensionnelle, par
exemple déduire la valeur d’un pixel en fonction de ses voisins :
Bien sûr, la généralisation 3D est aussi possible (pour la
compression des images volumiques).
On voit clairement qu’ici ce qui compte ce n’est pas la fréquence
d’un caractère ou pixel, mais sa relation aux autres, les possibles
corrélations. Des techniques statistiques qui s’appuient sur le
fait que la probabilité d’un caractère dépend de son prédécesseur(s) existent aussi. On parle de méthodes Markoviennes. Elles
ont besoin de mémoire pour stocker les probabilités
conditionnelles, et ceci peut être assez onéreux.
21
Slide 22
Méthodes basées sur les dictionnaires
La structure/redondance résultante d’occurrence répétitive des
séquences d’items (des mots, des éléments des motifs géométriques, etc.) peut être éliminée grâce aux dictionnaires, qui
stockent les motifs les plus fréquents, et permettent de remplacer
un « mot » fréquent par son « indice ». Les plus populaires sont
basées sur les variantes de LZW [Lempel-Ziv-Welsh] (Unix
compress, GIF, etc.) et LZ77 (Images PNG, gzip, etc.).
La méthode LZ77 utilise le document même comme son
« dictionnaire ». On prévoit une zone assez longue, disons, de
32K qui précède le point de lecture, comme une zone de
recherche. Si dans son intérieur on trouve un motif (mot)
identique avec le courant, on code son décalage (offset) et sa
longueur. Cette fenêtre « glisse » avec la lecture.
22
Slide 23
Le bon fonctionnement de la méthode est basée sur le fait que les
répétitions sont souvent locales, un mot est fréquent non pas dans
le document entier et dispersé, mais dans une de ces parties. Les
combinaisons de pixels (gradients spécifiques) dans des images
aussi.
La méthode LZW construit et utilise un dictionnaire spécial, de
taille variable. Toute information émise par le codeur ce sont les
indices, mais d’abord on place l’alphabet en début du dictionnaire .
Quand on trouve dans le document codé une séquence de M
lettres, le préfixe (M-1) a été déjà vu et figure dans le dictionnaire. Donc, on stocke la nouvelle séquence de manière
économique. On ne sort pas directement son indice, on reste
toujours « un pas en arrière ».
23
Slide 24
Quand le codeur trouve une séquence déjà vue, il continue la
lecture, car la séquence connue peut être plus longue ; rien ne
sort du codeur. Seulement quand la séquence devient « neuve »,
le codage a lieu.
Le dictionnaire croît. Si au début 258 éléms suffisaient (l’alphabet, le EOF et un caractère spéciale : « casser le dictionnaire »),
et donc 9 bits par item, on aura besoin de 10, 11, etc. bits plus
tard pour chaque indice. Donc, le code est de taille variable.
Ceci n’est pas grave. Le décodeur sait quand l’allocation
courante ainsi que le codage débordent, car il construit le dictionnaire « en synchronie » avec le codeur. Si la taille du dictionnaire dépasse les bornes du protocole établi (p. ex. 12 bits pour
GIF), on supprime le dictionnaire, et on recommence. Ceci
correspond à la localité des références.
24
Slide 25
Compression spectrale
Les photos, ou, plus généralement, les séquences numériques
relativement régulières, où le passage entre les voisins est
rarement abrupt, peuvent être considérées comme des fonctions
régulières sur un support fini. Pour des images en niveau de gris,
ce niveau est la valeur de la fonction, sinon il faut choisir un
espace de couleurs, et travailler 3 plans séparément. On peut
donc effectuer leur développement en série de Fourier.
En fait, pour des raisons pratiques, on utilise un autre procédé, la
transformation cosinus discrète, qui est une variante réelle de la
méthode de Fourier.
On obtiendra ainsi le nombre de coefficients égal à la taille du
document. Aucune information n’est perdue.
25
Slide 26
Voici un petit fragment d’une image, où on voit la douceur des
transitions (absence des fréquences très hautes). Le résultat de la
transformée, à droite, dûment normalisé, est beaucoup moins
structuré !
On peut espérer que cette représentation rend la redondance plus
explicite. On commence donc par un peu de math :
26
Slide 27
Mais on espère qu’il soit possible de « décapiter » le résultat, de
supprimer un certain nombre de coefficients (en les remplaçant
par zéro), sans changer le contenu informationnel de manière
significative.
Plus généralement on effectue un seuillage (quantisation ou
quantification) du résultat. Un tel procédé constitue la base de
presque toutes les techniques de compression avec pertes.
On stocke le résultat, mais avant on améliore légèrement le taux,
en comprimant le résultat avec Huffman (ou cod. arith.). Le
décodeur doit exécuter la transformée inverse, la IDCT :
27
Slide 28
Dans JPEG on ne transforme pas l’image entière. Le résultat
d’une telle transformation aurait accumulé des informations sur
les corrélations entre les parties très distantes de l’image, ce qui
n’a pas beaucoup de sens, et apporte des difficultés numériques.
On coupe l’image en blocs de 8*8 pixels, la DCT et seuillage
concernent un bloc. Voici la visualisation du sens des fonctions
de base :
28
Slide 29
Le seuillage est sélectif, on n’enlève tout simplement pas les
coeffs les plus petits, mais on ajoute de la pondération :
fluctuations « denses » (coefficients loin du coin supérieur
gauche) sont moins importantes visuellement.
Donc, la sérialisation (le document est 1-dim
même si l’image est 2-dimensionnelle) suit la
règle visualisée à droite. C’est l’ordre de stockage, et aussi un peu, l’ordre de la décroissance des facteurs de pondération avant le
seuillage.
La compression finale, statistique est globale.
Mot final. En cas de transitions « dures » fréquentes, JPEG soit
est inefficace, soit produit des artefacts. Ne jamais comprimez
avec JPEG des documents visuels contenant des textes !
29
Slide 30
Voici une image – original, et quelques compressions JPEG. La
matrice occupe 150kB. Les JPGs : 19 et 12K. En bas, avec le
taux de compression plus impressionant : 5 et 3K. Un PNG
occupe 65K, mais en 16 millions de couleurs! En 256 : 29K.
30
Slide 31
On voit que la cohérence entre les zones voisines est très
importante. Passons donc au sujet de cohérence temporelle :
Compression MPEG des images animées.
Une séquence animée est composée de « cadres » (frames)
similaires, qui visualisent une scène contiguë. À l’intérieur du
chaque cadre on peut, et on effectue une compression intraframe (typiquement une variante du JPEG), mais des gains plus
importants sont possibles grâce à la relation entre les images
voisines dans le temps.
On choisit d’abord un percentage (typiquement 1/12) de cadres
comprimés uniquement spatiellement, ce sont les cadres « I ». Le
reste est transformée spécialement, une partie ce sont les cadres
« P » (comme prévision). Il y aura aussi « B » pour prévision bidirectionnelle.
31
Slide 32
Pour construire un cadre « P » à partir d’un original il ne suffit
pas calculer les différences, car tout mouvement écrase toute
correspondance géométrique.
On divise l’image en blocs (8*8, 16*16 ; la luminance est plus
importante que les canaux de chrominance [teintes]). Pour
chaque bloc on cherche sur le prédécesseur (un frame I ou P) le
bloc correspondant le plus adéquat possible. On code le offset (le
décalage) par rapport à sa nouvelle position, éventuellement la
différence entre les deux blocs compactée par des techniques
déjà mentionnées.
Un bloc B résulte de la comparaison de l’image avec le prédécesseur et avec le successeur. On choisit le meilleur, mais on
peut également choisir la moyenne, et aussi exploiter la méthode
différentielle.
32
Slide 33
On peut donc décoder la séquence temporelle « virtuelle »
IBBPBBPBBPBBIBBPBBPB... , mais le codeur envoie les
frames dans un ordre différent, le premier P doit sortir avant les
premiers B (sinon, l’anticipation n’est pas possible).
Les modules du décodeur peuvent travailler en parallèle, et
décoder les frames dans un ordre tordu.
Le nom MPEG n’est pas synonymique avec les protocoles de
compression ; les standards MPEG 4 et MPEG 7 sont infiniment
plus riches.
En particulier, la célèbre technique MP3 de compression de la
musique appartient également au domaine MPEG.
Quelques mots à son sujet :
33
Slide 34
Compression MP3 des flots acoustiques.
On profite de quelques propriétés du système auditif humain, pas
seulement des redondances structurelles, statistiques, etc.
1. Nous ne pouvons entendre des sons de fréquence > 20 kHz.
Donc, on peut commencer par le filtrage qui élimine des
fréquences trop hautes. Ceci diminue déjà l’information
contenue dans le flot.
Mais il ne faut pas faire cela trop bêtement… Le flot
acoustique analogue est discrétisé. Pour éviter des alias
(fréquences écho, mauvaises), il ne faut pas descendre en
dessous de la fréquence limite de Nyquist, égale à 2 × la
fréquence maximale rendue. On utilise souvent 44 kHz.
2. On sait que la sensibilité de l’oreille dépend de la fréquence,
on entend moins bien les sons aigus.
34
Slide 35
La courbe de sensibilité normale :
35
Slide 36
3. Ensuite, il existe un phénomène de masquage. Si un son très
fort coexiste avec un autre, plus faible, de fréquence pas trop
éloignée, ce second son peut devenir inaudible. On effectue
donc l’analyse spectrale fenêtrée du signal, on le divise en
quelques dizaines de bandes, et dans chaque bande on
élimine les contributions trop faibles ou masquées.
4. On sait qu’après avoir entendu un bruit très fort, l’inertie de
notre appareil auditif nous empêche d’entendre pendant
quelques dizaines de milisecondes un son comparable. On
élimine de telles contributions.
Curieusement, on a découvert que les signaux plus forts reçus
par l’oreille, sont plus rapides dans la partie neurologique de
l’appareil, que les signaux plus faibles. Ceci casse la causalité triviale, et ensemble avec les particularités de la neuropsychologie de notre mémoire fait que l’on « oublie » un
signal faible, si dans 4 msec on entend un plus fort !
36
Slide 37
Tout ensemble, complété par des techniques statistiques, etc.,
donne une excellente technique de compression. Taux 1/10 par
rapport à un fichier .wav sont typiques. Cependant, tout dépend
de ce que l’on veut faire avec. Pour écouter quelque fois une
chanson, le taux d’échantillonnage 64 kbits/sec est suffisant. Si
on veut graver un CD, il faut prévoir le double…
Tout ceci montre que les spécialistes du domaine ne peuvent pas
être recrutés parmi les « purs algorithmiciens », ou purs ingénieurs du son. Tout le domaine de compression est une affaire
multidisciplinaire.
L’analyse spectrale classique, avec les transformées de Fourier
commence depuis quelques années à exploiter très intensement
une autre base de fonctions que les sinus et les cosinus. Il faut
donc savoir un peu sur :
37
Slide 38
Compression par ondelettes
La technologie des ondelettes est une catégorie très riche, il y a
plusieurs bases d’ondelettes, et les gens inventent toujours des
nouvelles fonctions, mieux adaptées au problème.
En général, une ondelette est une fonction qui oscille (comme
cosinus), mais qui possède un support fini (ou décroissant très
rapidement en dehors d’un certain intervalle). (D’ailleurs, cette
propriété permet de ne pas utiliser les blocs, comme en JPEG ;
l’image entière subit la transformation.
L’idée générale est simple : on développe le document – un flot
numérique, une image, etc. en ondelettes, on quantise et par
seuillage on élimine un certain nombre de coefficients, et c’est
tout. Le décodeur renverse la transformée.
38
Slide 39
Comment ça fonctionne?
Imaginez une séquence numérique et son graphique :
15
20
25
20
05
30
40
20
15
10
15
25
35
20
10
05
45
40
35
30
25
20
15
Fct.
10
5
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Le graphique est une « fonction », en apparence représentée par
une ligne contiguë, même si nous savons qu’en fait ce n’est
qu’un ensemble discret de points.
39
Slide 40
On peut la représenter autrement, par exemple :
45
40
35
30
25
20
15
10
5
0
Fct.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Comme fonction mathématique,
notre objet est une somme de
fonctions à droite, des seuils
égaux à 1 entre n et n+1 et zéro
ailleurs, pondérées par des valeurs
appropriées (pour l’histogramme).
1,2
1
0,8
0,6
0,4
0,2
0
40
Slide 41
Un seuil de base : la fonction égale à 1 entre 0 et 1, et zéro
ailleurs, s’appelle la fonction de base de Haar. Il en faut deux,
entre 0 et 1, et décalée : entre 1 et 2, pour avoir deux pixels, entre
0 et 2.
Mais nous pouvons changer de représentation. Construire un
« macro-pixel » égal à la moyenne de deux, entre 0 et 2 :
c=(p0+p1)/2, et compléter l’information par la différence :
d=p0-c. Pour la manipulation cela suffit, pour la visualisation on
peut supposer, que l’on combine l’original en prenant le
« macropixel » deux fois plus large, et une fonction oscillante :
1,5
1
0,5
0
-0,5
-1
-1,5
41
Slide 42
Cette fonction, égale à 1 entre 0 et 1 et –1 entre 1 et 2 (ou
normalisée différemment : 1 entre 0 et 0.5 et –1 entre 0.5 et 1)
c’est une ondelette (de Haar). La séquence de 16 nombres subit
la transformation suivante : on calcule 8 moyennes : 17,5, 22,5,
etc., et 8 « fluctuations »: -2,5, +2,5,.... Ensuite on répète la
même procédure avec les moyennes : 4 moyennes de 4 pixels,
plus 4 fluctuations. On continue encore deux fois, jusqu’à la
moyenne finale. C’est la représentation en ondelettes. On garde
une seule moyenne, plus les contributions oscillantes.
Le reste est évident : seuillage, et suppression d’un certain
nombre de coefficients.
Dans la pratique on utilise la base de Haar rarement, elle est un
peu misérabiliste… Souvent il faut calculer les moyennes
pondérées de 4, 6, 8 etc. pixels, et les ondelettes sont des
fonctions très complexes. Mais on ne les regarde pas !
42
Slide 43
Les ondelettes de degré supérieur, par exemple celles conçues
par Ingrid Daubechies, où on combine quatre éléments pour
obtenir la moyenne sont des fonctions fractales, assez épouvantables…
43
Slide 44
Bien sûr, pour les images il faut effectuer les transformées
« horizontale » et « verticale ». Il faut décider quel espace de
couleurs utiliser, etc.
La technique est adaptative, et très efficace. Elle constitue la base
du JPEG 2000. Son implémentation n’est pas difficile, mais
demande une certaine expérience dans le domaine numérique.
Commentaire
La quantisation (seuillage) peut intervenir dans plusieurs contextes. On peut p. ex. diminuer le nombre de couleurs, en utilisant une palette restreinte. Ceci est également une compression.
Parfois on essaie de « bricoler » les couleurs intermédiaires par
dithering, on remplace une plage orange par une mixture de
pixels jaunes et rouges. Attention, ceci complexifie la structure,
et rend les méthodes structurales moins efficaces !!
44
Slide 45
Compression fractale
C’est une technique un peu bizarre… Elle a eu une mauvaise
presse à cause du fait que son inventeur, Michael Barnsley, s’est
com-porté de manière pas très ouverte, et les promesses sans
justifica-tion ont précédé l’analyse (et les premières réalisations
pratiques faites par Arnaud Jacquin, un étudiant de Barnsley). La
technique a été un peu oubliée aujourd’hui, mais conceptuellement elle reste assez intéressante/intrigante. On commence par
la synthèse d’une image, non pas par son traitement.
45
Slide 46
Ce n’est pas une image quelconque, mais un objet auto-similaire.
On peut faire des images de ce genre en utilisant une « photocopieuse retrécissante » avec plusieurs lentilles: plusieurs copies de
l’original, mais plus petites et transformées (translation et rotation). Voici ce qui se passe si on itère plusieurs fois cette
manipulation :
46
Slide 47
Quelle que soit l’image d’origine, si sa copie multiple est passée
par la photocopieuse, le résultat aussi, etc., l’image finale n’a
rien à voir avec l’original, et est conditionnée seulement par les
paramètres de la copieuse. Le résultat final, le triangle de
Sierpinski est l’attracteur de cette collection de 3 transformations consistant d’un facteur d’échelle et 2 paramètres de
translation. Au total : 9 paramètres, 9 nombres…
Ainsi, quelques paramètres à peine (plus un programme universel) définissent une image de complexité conséquente !
Avec plus de paramètres (5 transformations, ou une dizaine…)
on peut arriver à créer des images assez impressionnantes. Par
Exemple, 5 tranformations suffisent pour créer l’image de l’arbre
sur la page suivante :
47
Slide 48
48
Slide 49
(L’algorithme de création de telles images peuvent utiliser la
technique de « copieuse », mais plus souvent on profite d’une
technique aléatoire : on commence par un point, et on applique
aléatoirement une des transformations. On fait cela un certain
nombre de fois sans rien afficher, et ensuite, quand les points
convergent vers l’attracteur, on les dessine).
Mais qu’est-ce que tout cela à voir avec la compression d’images? Les vraies images ne sont pas autosimilaires !
Oui, et non… Certes, la technique est différente, mais les
concepts sont similaires. Observons qu’une image peut posséder
des zones similaires modulo retrécissement (parfois aussi :
rotation ou changement du contraste des couleurs), et – bien sûr
– translation.
49
Slide 50
Voici une vielle amie : Lena.
50
Slide 51
La description qualitative de l’algorithme de compression est
dont la suivante :
On parcourt l’image et on la divise en blocs (disons, de 8x8
pixels).
Pour chaque bloc on cherche un macro-bloc, 2 fois plus grand,
et similaire (modulo rotation de multiple de 90°, et
éventuellement avec la luminosité et contraste différents).
On stocke les paramètres des opérations qui transformeraient le
macro-bloc, en bloc d’origine.
Donc, 2 nombres qui décrivent le positionnement, deux nombres
responsables du changement de contenu-couleur (si image en
niveaux du gris ; pour des images couleur c’est plus compliqué),
et les paramètres discrètes décrivant la rotation.
Le problème est que trouver des macro-blocs très similaires est
difficile, parfois impossible…
51
Slide 52
L’essentiel pour la compression est cette recherche des macroblocs. Plusieurs variantes ont vu le jour, afin d’accélérer la recherche, ou l’évaluation de la qualité de l’approximation. La
compression fractale est une méthode très lente…
On a exploité la division en triangles déformables, et aussi les
quadtrees. De temps en temps quelqu’un propose une nouvelle
technique, mais le progrès est lent. Plusieurs chercheurs ont
concentré leurs investigations sur les ondelettes, et les techniques
fractales ne sont plus à la mode..
Après le codage – compression, il faut préciser comment on
décompresse le fichier contenant la description des paramètres
des transformations des blocs. Cette procédure est rapide. On
commence par une image quelconque, et on lance itérativement
la « copieuse ».
52
Slide 53
Voici les itérations zéro, un, deux et dix, avec Lena comme
l’original comprimé.
53
Slide 54
La représentation compressée d’une image ne contient pas – en
principe - sa taille physique, on peut décompresser l’image plus
grande ou plus petite (un peu étonnant…). Et alors, ce qui se
passe n’a rien à voir avec la manifestation des « blocs » carrés,
ou « macro-pixels ». Comparons le cas fractal avec un simple
changement d’échelle du chapeau de Lena :
Ainsi la décompression fractale peut « ajouter des détails », ce
qui peut être utile pour rendre une forêt, une pelouse, etc.
54
Slide 55
Actuellement les techniques basées sur les IFS (Iterated function
systems) trouvent aussi quelques applications dans la re-synthèse
des textures, où on représente des textures – décorations surfaciques des modèles 3D non pas par des images (bitmaps), mais
on les engendre procéduralement.
Les programmes de génération sont pilotés par des paramètres
extraits des textures réelles (forêt lointaine, sable, pelouse, relief
des montagnes, une surface métallique rouillée, etc.). Le résultat
n’est pas identique à l’original, mais il possède les mêmes
propriétés statistiques : répartition des couleurs, « rugosité », etc.
On peut considérer que ceci est également une compression.
À présent vous allez souffrir une bonne dose de théorie…
55
Slide 56
56