Vous êtes sur la page 1sur 79

Mastère professionnel : Bio Médical

Cours : Codage et compression de l’information médicale

normes et recommandations

quantification scalaire et vectorielle

les codeurs

méthodes de compression

cas des signaux biomédicaux

1. les notions de base sur la compression

2. la norme DICOM

3. la quantification

- scalaire, calcul d'erreur, cas des signaux biomedicaux

- vectorielle

4. les techniques de compression

- RLE, HUFMANN, LZW, JPEG, fractales

5. la compression video

- la norme H264

1
INTRODUCTION A LA COMPRESSION
Des données et des images
I. Définition
La compression consiste à réduire la taille physique de blocs d'informations. Un
compresseur utilise un algorithme qui sert à optimiser les données en utilisant des considérations
propres au type de données à compresser; un décompresseur est donc nécessaire pour reconstruire
les données d’origines grâce à l'algorithme inverse de celui utilisé pour la compression.

La méthode de compression dépend intrinsèquement du type de données à compresser : on ne


compressera pas de la même façon une image qu'un fichier audio...

La compression peut se définir par le quotient de compression, c'est-à-dire le quotient du nombre de


bits dans l'image compressée par le nombre de bits dans l'image d’origine. Le taux de compression,
souvent utilisé, est l'inverse du quotient de compression. Enfin le gain de compression,
généralement exprimé en pourcentage, est le complément à 1 du quotient de compression :

nombre de bits dans l ' imagecompressée


quotient de compression=
nombre de bits dans l ' imaged ' origine

1
taux de compression=
quotient de compression

nombre de bits dans l ' imaged ' origine


'
nombre de bits dans l ima gecompressée

gain en compression=( 1− quotient de compression ) ∗ 100

II. Types de compressions


1. Compression physique et compression logique

La compression physique agit directement sur les données; il s'agit ainsi de voir les données
redondantes d'un train de bits à un autre.

La compression logique par contre est effectuée par un raisonnement logique en substituant une
information par une autre qui lui est équivalente.

2
2. Compression symétrique et compression asymétrique

Dans le cas de la compression symétrique, la même méthode est utilisée pour compresser et
décompresser l'information, il faut donc la même quantité de travail pour chacune de ces opérations.
C'est ce type de compression qui est généralement utilisée dans les transmissions de données.

La compression asymétrique demande plus de travail pour l'une des deux opérations, on recherche
souvent des algorithmes pour lesquels la compression est plus lente que la décompression. Des
algorithmes plus rapides en compression qu'en décompression peuvent être nécessaires lorsque l'on
archive des données auxquelles on n'accède peu souvent (pour des raisons de sécurité par exemple),
car cela crée des fichiers compacts.

3. Compression avec pertes

La compression avec pertes (en anglais lossy compression), par opposition à la compression sans
pertes (lossless compression), se permet d'éliminer quelques informations afin d’avoir le meilleur
taux de compression possible, tout en gardant un résultat qui soit le plus proche possible des
données origines (c'est le cas par exemple de certaines compressions d'images ou de sons).

Etant donné que ce type de compression supprime des informations contenues dans les données à
compresser, on parle généralement de méthodes de compression irréversibles. Les fichiers
exécutables par exemple ont notamment besoin de conserver leur intégrité pour fonctionner, en effet
il n'est pas concevable de reconstruire à l'à-peu-près un programme en omettant parfois des bits et
en en ajoutant là oû il n'en faut pas.

4. Encodage adaptatif, semi adaptatif et non adaptatif

Certains algorithmes de compression sont basés sur des dictionnaires spécifiques à un type de
données : ce sont des encodeurs non adaptatifs. Les occurrences de lettres dans un fichier texte par
exemple dépendent de la langue dans laquelle celui-ci est écrit.

Un encodeur adaptatif s'adapte aux données qu'il va devoir compresser, il n’utilise pas un
dictionnaire déjà préparé pour un type de données.

Enfin un encodeur semi-adaptatif construit le dictionnaire en parcourant le fichier, puis compresse


ce dernier.

3
4
NORME DICOM
I. Définition
La norme DICOM Digital Imaging and Communication in Medecine est un document qui définit une
méthode de communication pour les différents équipements d'imagerie médicale numérique.
L’objectif est d'obtenir les images du patient englobant toutes les informations associées dans un
format identique.

Cette norme est maintenant utilisée par la plupart des fabricants de matériel d'imagerie médicale.
Elle permet de prédire la possibilité de l'interconnexion des appareils à partir d'un Document de
Conformité émis par chacune des machines. Ainsi la norme permet aux équipements de
communiquer localement, à distance ou au travers un média en assurant la compatibilité des
équipements et en éliminant les formats propriétaires.

II. Format
Le format n'est pas rigide, il contient des informations obligatoires et d'autres optionnelles sous la
forme d'une suite de champs, les pixels n'étant qu'un champ particulier. Plusieurs numéros
d'identification uniques UID ("Unique Identifier") sont générés automatiquement par les machines
DICOM et obligatoirement présents dans chaque image DICOM. Il ne peut pas exister deux UID
identiques pour désigner des informations différentes, ceci quelque soit la machine et sa
localisation, ainsi l'UID d'une série d'images est spécifique à une date, un patient, une étude, un
hôpital et une machine donnée. Cette identification est nécessaire non seulement pour des raisons
médicales et médico-légales, mais aussi pour permettre aux machines la formation et la gestion de
bases de données.
DICOM : Digital Imaging and COmmunication in Medicine

5
Définition des champs :

 pour les encodages explicites :

o étiquette (tag)

o représentation de valeur (VR - Value Representation) encodée par deux caractères

o longueur de la valeur

o valeur

 pour les encodages implicites :

o étiquette (tag)

o longueur de la valeur

o valeur

Une étiquette est constituée de

 numéro de groupe (group number) encodé par deux octets

 numéro d'élément (element number) encodé par deux octets

Elle est représentée sous la forme hexadécimale (DEAD, BEEF) où DEAD est le numéro de groupe
et BEEF le numéro d'élément. Pour plus d'informations, voir la partie 5 du standard.

L'organisation de l'information contenue dans les fichiers DICOM est organisée sous une forme
séquentielle.

Ainsi une information élémentaire est formée par 3 champs de données successifs :

1. Premier champs: 4 octets : correspondant aux balises du dictionnaire ( exemple âge du


patient : 0x0010 1010 en hexadécimal )

2. Deuxième champs : 4 octets correspondants la longueur en octet du champs suivant


( exemple âge codé sur 1 octet : 0x0000 0002 )

3. Troisième champs de longueur variable , déterminé par le champs précédant correspondant à


l'information identifiée par le premier champs.

Exemple : Codage de l'identification du patient :

Si on rencontre dans un flux de données DICOM les éléments suivants en hexadécimal:

00 10 00 20 00 00 00 0A 4A 6F 68 6E 5E 48 65 6E 72 79 ,

Ce flux se décompose ainsi :

6
8 quartets
4 quartets 4 quartets Longueur variable l,
longueur l du
balise groupe balise élément information :
champs suivant

4A 6F 68 6E 5E 48 65 6E 72 79
0010 0020 0000000A
(ici l = 10 )

où : ici signification = ASCII

0x0010 correspond 0x0010 0010, Indique la longueur


dans le dictionnaire balise du du champs suivant. 4 6 6 6 5 4 6 6 7 7
au code dictionnaire (ici A en AF8EE8 5E2 9
hexadécimal du indiquant que hexadécimal
groupe de données l'information sera correspond à 10 en
codant le nom du patient décimal )
l'information du J o h n ^ He n r y
patient.

Ces informations se succèdent à la suite les unes des autres dans un ordre de balises croissant, il est
ainsi possible d'ignorer certaines informations contenues dans des champs d'information et de
passer à la balise suivante , ce qui permet de " sauter " une balise dont on ne connaît pas la
signification.

CODE ASCII :

Char Code Char Code Char Code Char Code Char Code Cha Code
ASCII ASCII ASCII ASCII ASCII r ASCII

20 0 30 @ 40 P 50 ` 60 p 70

! 21 1 31 A 41 Q 51 a 61 q 71

" 22 2 32 B 42 R 52 b 62 r 72

# 23 3 33 C 43 S 53 c 63 s 73

$ 24 4 34 D 44 T 54 d 64 t 74

% 25 5 35 E 45 U 55 e 65 u 75

& 26 6 36 F 46 V 56 f 66 v 76

' 27 7 37 G 47 W 57 g 67 w 77

( 28 8 38 H 48 X 58 h 68 x 78

Y 59 i 69 y 79
7
- 29 9 39 I 49 Z 5A j 6A z 7A

* 2A : 3A J 4A [ 5B k 6B { 7B

+ 2B ; 3B K 4B \ 5C l 6C | 7C

, 2C < 3C L 4C ] 5D m 6D } 7D

- 2D = 3D M 4D ^ 5E n 6E ~ 7E

. 2E > 3E N 4E _ 5F o 6F

/ 2F ? 3F O 4F

8
Organisation du Flux de Données :

on trouve ainsi les données suivantes dans le flux DICOM

 Date d'examen

 Type d'examen

 Fabricant de la machine
L'identification de la machine
 Hôpital ou institution

 Identification de la machine (numéro,


type )

 Nom

 Identification
Les informations sur le patient :
 Date de naissance

 Sexe

 Bolus

 Kilovolts
Les informations sur l'acquisition de
 Inclinaison du statif
l'information :
 Epaisseur de coupe

 etc.. variable suivant le type d'examen

 Série,

 Orientation du patient

Les informations en rapport avec l'examen :  Plan de références

 Nombres d'images dans l'acquisition

 Commentaires

9
 Largeur

 Hauteur

Les informations concernant l'image elle-  Codage de l'image (niveaux de gris,


même et la façon dont elle est codée. couleur ..)

 Compression

 Représentation numérique de l'image

 Représentation numérique de l'image elle


Les pixels ;
même.

10
Les groupes sont agencés de la façon suivante :

Group element Signification


0000 Command
0008 Identification du centre
0010 Information sur le patient
Type d'acquisition (épaisseur de coupe, bolus,
0018 inclinaison du statif, paramètres kV, temps d'écho
etc..)
Positionnement et information relatives à l'acquistion
0020
(Relationship )
Présentation de l'image (dimensions, niveaux de gris,
0028
tables de couleurs) Image Presentation
4000 Text
6000-601E (even) Overlay, type de compression....
7FE0 Pixel Data, Pixels de l'image.

Quelques un des éléments les plus intéressants sont :

(nnnn,0000) BD S Group Length # longueur du groupe en octets nnnn/ l


(nnnn,4000) AT M Comments #commentaires

(0008,0010) AT S Recognition Code # ACR-NEMA 1.0 or 2.0


(0008,0020) AT S Study Date # yyyy.mm.dd
(0008,0021) AT S Series Date # yyyy.mm.dd
(0008,0022) AT S Acquisition Date # yyyy.mm.dd
(0008,0023) AT S Image Date # yyyy.mm.dd
(0008,0030) AT S Study Time # hh.mm.ss.frac
(0008,0031) AT S Series Time # hh.mm.ss.frac
(0008,0032) AT S Acquisition Time # hh.mm.ss.frac
(0008,0033) AT S Image Time # hh.mm.ss.frac
(0008,0060) AT S Modality # CT,NM,MR,DS,DR,US,OT

(0010,0010) AT S Patient Name


(0010,0020) AT S Patient ID
(0010,0030) AT S Patient Birthdate # yyyy.mm.dd
(0010,0040) AT S Patient Sex # M, F, O pour les autres
(0010,1010) AT S Patient Age # xxxD or W or M or Y

(0018,0010) AT M Contrast/Bolus Agent # ou RIEN


(0018,0030) AT M Radionuclide
(0018,0050) AN S Slice Thickness # mm
(0018,0060) AN M KVP
(0018,0080) AN S Repetition Time # ms
(0018,0081) AN S Echo Time # ms
(0018,0082) AN S Inversion Time # ms
(0018,1120) AN S Gantry Tilt # degrés

(0020,1040) AT S Position Reference # exemple crête iliaque


11
(0020,1040) AN S Slice Location # en mm (signé)

(0028,0010) BI S Rows
(0028,0011) BI S Columns
(0028,0030) AN M Pixel Size # rangées\colonnes en mm
(0028,0100) BI S Bits Allocated # ex. 12 bits pour la TDM
(0028,0101) BI S Bits Stored # ex. 16 bits
(0028,0102) BI S High Bit # ex. 11
(0028,0102) BI S Pixel Representation # 1 signé, 0 non signé

(7FE0,0010) BI M Pixel Data # données image, comme décrites au groupe 0028

Organisation des pixels de l'image DICOM : (pour les techniciens )

La façon dont les pixels sont sauvegardés peut énormément changer, bien que heureusement la
plupart des utilisateurs et des fabricants utilisent le schéma le plus simple . Par exemple 1 pixel de
12 bits est sauvegardé dans un mot de 16 bits sans essayer de le présenter sous une forme plus
compacte.

Voici quelques exemples. Notez que lorsque on y ajoute le problème de lecture little/big endian , les
permutations s'effectuent !

Bits Allocated = 16 (Bits alloués )


Bits Stored = 12 (Bits enregistrés )
High Bit = 11 (Bit le plus significatif)

|<------------------ pixel ----------------->|


______________ ______________ ______________ ______________
|XXXXXXXXXXXXXX| | | |
|______________|______________|______________|______________|
15 12 11 8 7 4 3 0

---------------------------

Bits Allocated = 16
Bits Stored = 12
High Bit = 15

|<------------------ pixel ----------------->|


______________ ______________ ______________ ______________
| | | |XXXXXXXXXXXXXX|
|______________|______________|______________|______________|
15 12 11 8 7 4 3 0

---------------------------

Bits Allocated = 12
Bits Stored = 12
High Bit = 11

------ 2 ----->|<------------------ pixel 1 --------------->|


______________ ______________ ______________ ______________
12
|||||
|______________|______________|______________|______________|
15 12 11 8 7 4 3 0

-------------- 3 ------------>|<------------ 2 --------------


______________ ______________ ______________ ______________
|||||
|______________|______________|______________|______________|
15 12 11 8 7 4 3 0

|<------------------ pixel 4 --------------->|<----- 3 ------


______________ ______________ ______________ ______________
|||||
|______________|______________|______________|______________|
15 12 11 8 7 4 3 0

III. Conclusions
La norme DICOM est le standard de communication entre machines en imagerie médicale. Elle
facilite l’échange des images médicales entres différents services et entre différents centres.

13
Quantification scalaire et vectorielle
1. Définition
En traitement du signal, la quantification est le procédé qui permet d'approximer un signal continu (ou
à valeurs dans un ensemble discret de grande taille) par des valeurs d'un ensemble discret.

2. Introduction
L'application la plus courante de la quantification est la conversion analogique-numérique mais elle doit
le développement de sa théorie aux problèmes de quantification pour la compression de signaux
audio ou image.

Le but de la quantification, à partir d'une valeur d'entrée donnée d'un espace E, est de déterminer la
valeur la plus proche dans l'ensemble F d'arrivée. Dans le cas d'une conversion analogique-
numérique, l'ensemble E est continu, on peut prendre et l'ensemble d'arrivée est discret, de
taille finie. Cet ensemble est généralement appelé dictionnaire.

Exemple :

Figure : quantification (en rouge) d'un signal continu

3. Quantification scalaire
On parle de quantification scalaire lorsque le dictionnaire est de dimension 1, c'est-à-dire ses
valeurs sont des scalaires. La quantification scalaire est la forme la plus simple de quantification, le
cas où le dictionnaire est un espace de dimension supérieure à 1 est appelé la quantification vectorielle.

Définition: Un quantifieur scalaire de taille N est une application Q de dans un ensemble discret
fini F de dimension 1 et de taille n, , .

On notera

14
Un quantifieur peut se définir comme un ensemble d'intervalles de l'espace de départ, [tk;tk + 1], où
les ti sont appelés niveaux de décision. À chaque intervalle [tk;tk + 1], on fait correspondre une
seule valeur de l'espace d'arrivée, rk, appelée niveau de reconstruction. La forme typique d'un
quantifieur est donc une fonction en escalier.

D'une manière générale, la largeur d'un intervalle n'est pas constante: .


Cette largeur est appelée le pas de quantification.

En général, les niveaux de reconstruction ne sont pas non plus uniformément


répartis: .

Quantifieur scalaire uniforme

Figure : Quantificateur uniforme avec un pas de quantification de 1.

C'est le type de quantifieur le plus simple, où les intervalles sont de longueur constante.

Le pas de quantification est donc fixe: tk + 1 − tk = q pour tout k.

Les niveaux de reconstructions sont aussi uniforméments répartis. Il est parfois appelé quantifieur
scalaire symétrique.

Quantifieur à zone morte

C'est un type spécial de quantifieur, où l'intervalle autour de zéro est plus large. La zone
morte ou dead-zone qualifie donc cet intervalle autour de zéro, qui permet à l'ensemble des valeurs
de source considérées comme petites, d'être quantifiées à une seule même valeur (généralement
zéro).

Ce type de quantifieur est donc non-uniforme (ou asymétrique). Toutefois, si l'ensemble des autres
intervalles sont uniformes, on qualifie généralement ce type de quantifieur d'uniforme à zone morte.

15
Ce type de quantifieur est très utilisé en compression d'image, où suite à une transformation de
l'image par ondelette ou DCT, il existe de très nombreuses valeurs autour de zéro, non-significatives,
qui pénaliseraient la suite du processus de codage. Typiquement, les valeurs comprises dans la zone
morte sont quantifiées à zéro, et ne sont donc pas considérées par le codage entropique. Il existe alors
de très nombreux coefficients quantifiés à zéro, ce qui permet d'utiliser des méthodes comme le RLE.

La norme JPEG 2000 utilise un quantifieur scalaire uniforme à zone morte.

Autres quantifieurs scalaires non uniformes

De manière générale, on peut répartir les niveaux de quantification de toutes les façons possibles.

Pour un signal de parole, dont la plupart des valeurs sont autour de zéro, on utilisera un quantifieur
avec beaucoup de niveaux autour de zéro et peu de niveaux ailleurs.

Bruit de quantification

Figure : Graphique du haut : signal analogique en bleu, signal quantifié sur 2 bits en rouge. Graphique du bas :
différence entre ces deux signaux (l'accumulation des erreurs de quantification représente le bruit).

La quantification est une opération destructrice d'information. Elle introduit une erreur (ou un bruit)
entre le signal quantifié et le signal source. Cette erreur est généralement mesurée par la distance
suivante :

Cette erreur de quantification est aussi appelée distorsion. En pratique, on utilise plutôt l'espérance
de la distorsion, en considérant l'ensemble du signal comme une suite de réalisations d'une variable
aléatoire X. On obtient alors la distorsion moyenne par :

Si la distance d est celle définie plus haut, D est alors l'erreur quadratique moyenne

16
Pour mesurer l'erreur de quantification uniforme E nous avons : E est un échelon ; E=2Vmax /
2puissance N (N le nombre de mot binaire) d'ou V(erreur)=E /2*racine3 -> V=Vmax /2puiN*racine
3

Pas de discrétisation

Un signal analogique peut avoir des variations infinitésimales. La quantification correspondant à


des niveaux discrets, il en résulte une perte d'information, pour peu que l'on puisse mesurer des
variations inférieures aux longueurs d'intervalle de quantification avec des moyens analogiques.

Le signal quantifié est en général un signal électrique, avec un convertisseur analogique-numérique —


s'il est d'une autre nature, on le transforme en signal électrique, avec un transducteur. Appelons
ΔV l'amplitude maximale du signal en tension, et δV la plus petite variation du signal numérisé,
le pas de discrétisation. Dans le cas d'une quantification uniforme, si l'on a N seuils, on a alors :

δV = ΔV/(N - 1).

En général, N est grand pour que la quantification soit « fine », on peut donc écrire :

δV ≃ ΔV/N.

En général, le signal numérisé est codé en base deux pour un stockage informatique. La
variation minimale δV correspond alors au bit de poids faible ; δV est de fait fréquemment
désigné par le sigle LSB, pour least significant bit. Si le signal est codé sur n bits, on a
alors

N = 2n

et

δV(LSB) = ΔV/2n
Quantifieur scalaire optimal

Le quantifieur optimal est celui qui minimise la distorsion.

Le quantifieur scalaire uniforme est optimal si l'amplitude de la source suit une distribution uniforme.
Les signaux audio ou image ne peuvent cependant être considérés comme des sources uniformes, ce
qui a conduit à la recherche d'algorithmes permettant de générer un quantifieur optimal, pour tous
types de sources (algorithme quantifieur de Lloyd-Max).

4. Quantification vectorielle
1) définition
La quantification vectorielle (QV) est une technique de compression de données. Elle consiste à
coder des échantillons qui sont représentés par une valeur.

17
La quantification vectorielle code de manière efficace des échantillons représentés par plusieurs
valeurs (ou vecteurs).

Imaginons qu’on ait un ensemble d’échantillons, chacun représenté par un couple de valeur (x1,
x2).

Ces valeurs sont réelles et on cherche à les quantifier.

On peut faire une quantification uniforme sur chaque dimension (figure ci-dessous), mais ça risque
de ne pas être optimisé…

Ce que propose la quantification vectorielle (QV), c’est une quantification optimisée : l’espace est
divisé en classes adaptées à l'ensemble des échantillons et on calcule un représentant pour chaque
classe (élément rouge sur la figure). L'ensemble des représentants est appelé dictionnaire. Pour
quantifier un échantillon (x1,x2), on lui attribue les valeurs du représentant le plus proche. On voit
bien là que la quantification est proche de la compression.

18
La quantification n’est pas qu’une simple généralisation du cas scalaire. Elle permet de prendre en
compte la corrélation entre les échantillons. C'est une technique très utilisée en reconnaissance de la
parole, compression de la parole, codage d’image.
2) principe
La QV consiste donc à coder non plus un échantillon, mais un groupe d’échantillons, ou vecteur.
Notons K sa dimension (K=2 dans l'exemple précédent). A partir du dictionnaire, composé des
représentants notés Xchapo, on choisira le meilleur représentant de chaque vecteur à coder au sens
d’une certaine distance (moindres carrés par exemple, cf. définition ci-dessous). Le vecteur X est

alors remplacé par son représentant Xchapo. Si le codage par QV est


simple, la conception d’un dictionnaire est plus compliquée et a donné lieu à de nombreux
algorithmes. Un des plus utilisés est l’algorithme LBG (Linde, Buzo et Gray) ou algorithme de
Lloyd généralisé. L’algorithme LBG part d’un dictionnaire qu’il cherche à améliorer.
Inertie intra-région Ia et Inertie inter-région Ie :
L’inertie intra région Ia est la somme des carrés des distances entre les points d’une même région.
Ia=∑(dj-dk)² ; j et k points de la même région.
L’inertie inter région Ie est la somme des carrés des distances entre les barycentres des régions et le
barycentre global.
Ie=∑(g-gi)² ; g est le centre de gravité global, gi est le centre de gravité de la région i.
Pour avoir la meilleur répartition, il faut maximiser Ie et minimiser Ia, autrement, maximiser le
rapport Ie/Ia ou encore minimiser le rapport Ia/Ie
3) Algorithme LBG
C0 : un dictionnaire initial à M éléments,

X : l’ensemble des L vecteurs d’apprentissage,

d : une mesure de distorsion,

n=0

1) Trouver une partition de X à partir du dictionnaire Cn. Chaque partition est une cellule de Voronoï
: à chaque vecteur de X, on associe le meilleur représentant dans le dictionnaire.

19
2) Calculer la distortion moyenne pour tous les éléments de X, notée dn

3) Si la distortion est telle que (dn-1 – dn)/ dn< ε, alors Cn est le dictionnaire souhaité.
4) Recalculer les centres de chaque cellule de Voronoï pour obtenir Cn+1
5) n = n+1, retour en 1.
On prend pour d la MSE (mean square error) ou moyenne des écarts au carré.

4) Initialisation du dictionnaire pour l'algo LBG


L’algorithme LBG repose sur une bonne initialisation du dictionnaire. Différentes méthodes sont
possibles :

1. Codes aléatoires: les M premiers vecteurs d’apprentissage forment le dictionnaire initial.

2. Division récursive des données : il s’agit de prendre le barycentre des vecteurs, de diviser
l’ensemble, et ainsi itérativement jusqu’à ce que le nombre de vecteurs désiré (M) soit
atteint (voir détails ci-dessous).

3. Assemblage des paires des plus proches voisins (Pairwise Nearest Neighbor (PNN)
Clustering) : il s’agit de fusionner les vecteurs d’apprentissage les plus proches jusqu’à ce
que le nombre de vecteurs désiré (M) soit atteint (voir détails ci-dessous).

Détail de l’algorithme de division récursive des données :

1. Calculer x0 le barycentre des vecteurs d’apprentissage.

2. Construire y1 = x0 et y2 = x0+a, a étant un paramètre à définir

3. Trouver une partition des vecteurs selon y1 et y2. On a donc 2 ensembles U1 et U2.

4. Recalculer y1 et y2 comme étant les centroïdes de U1 et U2.

5. Revenir en 1) en considérant d’une part x0=y1 et X=U1, et x0=y2 et X = U2 d’autre part.

6. Arrêter lorsque le nombre M d’éléments souhaités yk est atteint.

Détail de l’algorithme de PNN Clustering :


Soit k = L, nombre des vecteurs d’apprentissage.

1. Calcul de la distorsion entre chaque paire de vecteurs, pour tous les k vecteurs.

2. Les 2 vecteurs ayant la plus petite distorsion sont remplacés par un seul vecteur qui est leur
centroïde.

3. k ← k-1. Si k = M, alors on arrête. Sinon, retour à 1).

20
Diagramme de Voronoï

Un diagramme de Voronoï.

En mathématiques, un diagramme de Voronoï (aussi appelé décomposition de


Voronoï, partition de Voronoï ou encore polygones de Voronoï) représente une décomposition
particulière d’un espace métrique déterminée par les distances à un ensemble
discret d’objets de l’espace, en général un ensemble discret de points. Il doit son nom
au mathématicien russe Georgi Fedoseevich Voronoï (1868 - 1908).

Définition [modifier]

On se place dans un espace euclidien E. Soit S un ensemble fini de n points de E; les éléments
de S sont appelés centres, sites ou encore germes.

On appelle région de Voronoï ou cellule de Voronoï associée à un élément p de S l’ensemble des


points qui sont plus proches de p que de tout autre point de S.

Pour deux points a et b de S, l’ensemble Π(a,b) des points équidistants de a et b est


un hyperplan affine (un sous-espace affine de co-dimension 1). Cet hyperplan est la frontière
entre l’ensemble des points plus proches de a que de b, et l’ensemble des points plus proches
de b que de a.

On note H(a,b) le demi espace délimité par cet hyperplan contenant a, il contient alors tous les
points plus proches de a que de b. La région de Voronoï associée à a est alors l’intersection
des H(a,b)où b parcourt S\{a}.

21
Les régions de Voronoï sont des polytopes convexes en tant qu’intersection de demi espaces.
L’ensemble de tels polygones partitionne E, et est la partition de Voronoï correspondant à
l’ensemble S.

En dimension 2 il est facile de tracer ces partitions, on les appelle dans ce cas parfois diagrammes
de Voronoi. On se base sur le fait que la frontière entre les cellules de Voronoi de deux germes
distincts se situe forcément sur la médiatrice qui sépare ces deux germes. En effet, les points de
cette médiatrice sont équidistants des deux germes donc on ne peut pas affirmer qu'il se situent dans
l'une ou l'autre cellule de Voronoi. Pour un ensemble de germes, le diagramme de Voronoi se
construit donc en déterminant les médiatrices de chaque couple de germes. Un point d'une
médiatrice appartient alors à une frontière de Voronoi s'il est équidistant d'au moins deux germes et
qu'il n'existe pas de distance plus faible entre ce point et un autre germe de l'ensemble.

Le diagramme de Voronoï est le dual de la triangulation de Delaunay, on peut définir la


triangulation de Delaunay à partir du diagramme de Voronoï, deux points p et q créent une arête
dans le graphe de Delaunay si et seulement si les régions de Voronoï associées à p et q sont
adjacentes.

Histoire [modifier]

L’usage informel des diagrammes de Voronoï remonte à Descartes en 1644. Dirichlet a utilisé
des diagrammes de Voronoï en dimension 2 ou 3 dans son étude des formes
quadratiques en 1850.

Le médecin britannique John Snow a utilisé un diagramme de Voronoï en 1854 pour montrer
que la majorité des personnes mortes dans l’épidémie de choléra de Soho vivait plus près de la
pompe infectée de Broad Street que de n’importe quelle autre pompe.

Les diagrammes de Voronoï portent le nom du mathématicien russe Georgy Fedoseevich Voronoï
(ou Voronoy) qui a défini et étudié le cas général en dimension n en 1908. Les diagrammes de
Voronoi qui sont utilisés en géophysique et en météorologie pour analyser des données de
distributions spatiales (comme les mesures de chutes de pluie) sont appelés polygones de
Thiessen du nom du météorologiste américain Alfred H. Thiessen.

22
Exemple [modifier]

L'exemple suivant reprend les mêmes points que l'exemple de la triangulation de Delaunay :

23
LECTURE
Triangulation De Delaunay
IV.1 INTRODUCTION

Un nouveau type de partitionnement, qui s’adapte au contenu de l’image et qui est calculé à partir d’un
ensemble de points positionnés n’importe où sur le support de l’image, c’est le partitionnement de Delaunay.

IV.2 DIAGRAMME DE VORONOÏ

IV.2.1 POINTS, SITES, GERMES

On désigne par P un ensemble composé de n points Pi de l’espace IR2 appelés aussi sites ou

germes :

IV.2.2 Arête

Le segment ou l'arête est repéré par deux points d'appui x et y.

IV.2.3 Region de Voronoï

On appelle polygone de Voronoï associé au site Pi la région Vor(Pi) (chaque région étant l'ensemble de points
(x,y) les plus proches à un point de P) telle que chaque point de P a pour plus proche site Pi.

ou d représente la distance Euclidienne.

IV.2.4 Diagramme de Voronoï [dav 95]

On décrit le diagramme de Voronoï comme l’union des régions de Voronoï de tous les points.

24
Figure IV. 2 : Diagramme de Voronoï de l'ensemble P formé de N points.

IV.2.5 Propriétés du Diagramme de Voronoï

 Chaque sommet du diagramme de Voronoï est le point de rencontre de trois arêtes de Voronoï

Figure IV. 3 : Trois arêtes autour d'un sommet de Voronoï.

 Pour chaque sommet S du diagramme de Voronoï, le cercle passant par les trois points voisins à ce
sommet, ne contient aucun autre point de P.

Figure IV. 4 : Le cercle ne contient aucun autre point de P, c’est un diagramme de Voronoï.

Figure IV. 5 : Le cercle contient un point de P, ce n’est pas un diagramme de Voronoï.

 Une arête de Voronoï sépare tout point de son plus proche voisin.

25
Figure IV. 6 : Une arête sépare un point de son plus proche voisin.

IV.3 LA TRIANGULATION DE DELAUNAY [DAV 95]

On peut à partir du diagramme de Voronoï, en construire le dual (figure IV.7), c’est à dire construire un
nouveau diagramme où cette fois, on relie par un segment toutes les paires de sites dont les régions de
Voronoï correspondantes sont adjacentes, c’est à dire séparées par une arête de Voronoï.

Figure IV. 7 : Construction du dual.

Nous donnons alors le théorème fondamental suivant [VOL 92]:

Le dual du diagramme de Voronoï est une triangulation sur l’ensemble des points.

Ce théorème est démontré en vérifiant que ce dual définit une partition du domaine intérieur à l’enveloppe
convexe de l’ensemble des points. En ayant remarqué de manière préliminaire qu’à chaque sommet de
Voronoï correspondait un triangle du dual, on vérifie pour cela que :

 Un triangle intersectant l’intérieur de l’enveloppe convexe n’est pas plat.

 Pour une paire de sommets de Voronoï donnée, si les cercles associés à ces
deux sommets ont une intersection sachant qu’ils ne peuvent être l’un à
l’intérieur de l’autre, alors les deux points d’intersections qu’ils définissent
forment un segment séparant les deux triangles correspondants.

 Chaque point intérieur à l’enveloppe convexe est aussi contenu dans au moins
un triangle.

 On définit la triangulation de Delaunay d’un ensemble de points du plan comme


étant la dual du diagramme de Voronoï correspondant (figure IV.8).

26
Figure IV. 8 : La triangulation de Delaunay, duale du diagramme de Voronoï.

On peut par la dualité et non colinéarité de tous les points et non cocyclicité de quatre points déduire des
résultats portant sur le diagramme de Voronoï les propriétés suivantes:

 La triangulation de Delaunay est unique.

 La triangulation de Delaunay est une triangulation complète.

 Les cercles passant par les trois sommets de chaque triangle ne contiennent
aucun autre site en leur intérieur.

Figure IV. 9 : (a) Triangle non-Delaunay – (b) Triangle Delaunay

Cette dernière propriété est essentielle, et elle va être utilisée pour caractériser la triangulation de Delaunay
sans avoir à recourir à la dualité avec le diagramme de Voronoï. Elle va aussi être utilisée comme critère de
choix des triangles à construire, lors de l’exécution d’une triangulation.

IV.4 La TRIANGULATION DE DELAUNAY CONTRAINTE

Certaines applications peuvent nécessiter que des arêtes soient imposées dans la triangulation, sans que
celles-ci soient nécessairement en accord avec les arêtes de la triangulation de Delaunay. On va alors générer
une triangulation qui, tout en respectant ces

arêtes, aura par ailleurs les propriétés d’une triangulation de Delaunay normale. On parle alors
de Triangulation de Delaunay Contrainte.

On restreint le critère de validité d’un triangle de Delaunay aux points visibles de tous les sommets du
triangle vis-à-vis des arêtes de contrainte (Un point est dit visibled’un autre vis-à-vis d’un objet si on peut les
relier entre eux par un segment qui ne coupe pas l’objet). Dans le critère du cercle, cela revient à ne pas
prendre en compte l’appartenance de sommets de graphe à la partie du cercle se situant derrière cette arête
par rapport au triangle.

Figure IV. 10 : Triangle de Delaunay Contraint.


27
Inspiré de la définition de la triangulation non contrainte, Seidel dans son article

[SEI 88] définit la triangulation contrainte comme suit :

Une triangulation de Delaunay contrainte est une triangulation complète pour laquelle chaque contrainte est
une arête de la triangulation et que pour chaque autre arête, il existe un cercle tel que :

 Les points extrémités de l’arête se situent sur le cercle.

 Si un point se trouve à l’intérieur du cercle, alors il existe au moins un des deux


points extrémités d’arêtes auquel on ne peut le relier par un segment sans
couper une contrainte.

CONCLUSION
Nous avons décrit dans ce chapitre les notions du diagramme de Voronoï ainsi que le graphe dual de
Delaunay, chacun retournant une partition du support de l'image. L'intérêt de ces partitionnements est qu'ils
sont souples puisqu'ils sont calculés sur un ensemble de points pouvant être positionnés à peu prés n'importe
où sur le support de l'image.

Nous avons introduit les principales définitions et propriétés de ces deux modèles de partitionnement du
plan, nécessaires à la compréhension du chapitre, ainsi que différents algorithmes du partitionnement
triangulaire.

28
METHODES DE COMPRESSION
1. La concaténation de points

La concaténation de point est une méthode permettant de stocker les points d'une manière optimale,
par exemple pour une image monochrome il n'y a, par définition, que deux couleurs, un point de
l'image peut donc être codé sur un seul bit pour gagner de l'espace mémoire.

2. La compression RLE

La méthode de compression RLE (Run Length Encoding, parfois notée RLC pour Run Length
Coding) est utilisée par de nombreux formats d'images (BMP, PCX, TIFF). Elle est basée sur la
répétition d'éléments consécutifs.

Le principe de base consiste à coder un premier élément donnant le nombre de répétitions d'une
valeur puis le compléter par la valeur à répéter. Ainsi selon ce principe la chaîne
"AAAAAHHHHHHHHHHHHHH" compressée donne "5A14H". Le gain de compression est ainsi
de (19-5)/19 soit environ 73,7%. En contrepartie pour la chaîne "REELLEMENT", dans lequel la
redondance des caractères est faible, le résultat de la compression donne "1R2E2L1E1M1E1N1T";
la compression s'avère ici très coûteuse, avec un gain négatif valant (10-16)/10 soit -60%!

En réalité la compression RLE est régie par des règles particulières permettant de compresser
lorsque cela est nécessaire et de laisser la chaîne telle quelle lorsque la compression induit un
gaspillage. Ces règles sont les suivantes :

 Lorsque trois éléments ou plus se répètent consécutivement alors la méthode de compression RLE
est utilisée
 Sinon un caractère de contrôle (00) est inséré, suivi du nombre d'éléments de la chaîne non
compressée puis une autre fois le caractère de contrôle
 Si le nombre d'éléments de la chaîne est impair, le caractère de contrôle (00) est ajouté à la fin
 Enfin des caractères de contrôles spécifiques ont été définis afin de coder :
o une fin de ligne (00 01)
o la fin de l'image (00 00)
o un déplacement du pointeur dans l'image de XX colonnes et de YY lignes dans le sens de la
lecture (00 02 XX YY).

Ainsi la compression RLE n'a du sens que pour les données possédant de nombreux éléments
consécutifs redondants, notamment pour les images possédant de larges parties uniformes. Cette
méthode a toutefois l'avantage d'être peu difficile à mettre en oeuvre. Il existe des variantes dans
lesquelles l'image est encodée par pavés de points, selon des lignes, ou bien même en zigzag.

29
3. Le codage de Huffman

David Huffman a proposé en 1952 une méthode statistique qui permet d'attribuer un mot de code
binaire aux différents symboles à compresser (pixels ou caractères par exemple). La longueur de
chaque mot de code n'est pas identique pour tous les symboles: les symboles les plus fréquents (qui
apparaissent le plus souvent) sont codés avec de petits mots de code, tandis que les symboles les
plus rares reçoivent de plus longs codes binaires. On parle de codage à longueur variable (en
anglais VLC pour variable code length) préfixé pour désigner ce type de codage car aucun code
n'est le préfixe d'un autre. Ainsi la suite finale de mots codés à longueurs variables sera en moyenne
plus petite qu'avec un codage de taille constante.

Le codeur de Huffman crée un arbre ordonné à partir de tous les symboles et de leur fréquence
d'apparition. Les branches sont construites récursivement en partant des symboles les moins
fréquents. La construction de l'arbre se fait en ordonnant dans un premier temps les symboles par
fréquence d'apparition ; successivement les deux symboles de plus faible fréquence d'apparition
sont retirés de la liste et rattachés à un noeud dont le poids vaut la somme des fréquences des deux
symboles. Le symbole de plus faible poids est affecté à la branche 1, l'autre à la branche 0 et ainsi
de suite en considérant chaque noeud formé comme un nouveau symbole, jusqu'à obtenir un seul
noeud parent appelé racine.

Le code de chaque symbole correspond à la suite des codes le long du chemin allant de ce caractère
à la racine. Ainsi, plus le symbole est "profond" dans l'arbre, plus le mot de code sera long.

157 255 157 157 007 001 007 255 255 089 089 157 089 157 089

Les codes correspondants à chaque caractère sont tels que les codes des caractères les plus fréquents
sont courts et ceux correspondant aux symboles les moins fréquents sont longs :

valeur 157 089 255 007 001

Nb_répètio
5 4 3 2 1
n

30
valeur 157 089 255 007 001

codage 00 01 10 110 111

Ce qui donne une fois codé : 00 10 00 00 110 111 110 10 10 01 01 00 01 00 01

Les compressions basées sur ce type de codage donnent de bons taux de compressions, en
particulier pour les images monochromes (les fax par exemple). Il est notamment utilisé dans les
recommandations T4 et T5 de l'ITU-T

4. La compression LZW

Abraham Lempel et Jakob Ziv sont les créateurs du compresseur LZ77, inventé en 1977 (d'où son
nom). Ce compresseur était alors utilisé pour l'archivage (les formats ZIP, ARJ et LHA l'utilisent).

En 1978 ils créent le compresseur LZ78 spécialisé dans la compression d'images (ou tout type de
fichier de type binaire).

En 1984, Terry Welch de la société Unisys le modifia pour l'utiliser dans des contrôleurs de disques
durs, son initiale vint donc se rajouter à l'abréviation LZ pour donner LZW.

LZW est un algorithme très rapide aussi bien en compression qu'en décompression, basé sur la
multiplicité des occurrences de séquences de caractères dans la chaîne à encoder. Son principe
consiste à substituer des motifs par un code d'affectation (indice) en construisant au fur et à mesure
un dictionnaire. De plus, il travaille sur des bits et non sur des octets, il ne dépend donc pas de la
manière de laquelle le processeur code les informations. C'est un des algorithmes les plus
populaires, il est notamment utilisé dans les formats TIFF et GIF. La méthode de compression LZW
ayant été brevetée par la société Unisys, c'est l'algorithme LZ77, libre de droit, qui est utilisé dans
les images PNG.

Le dictionnaire est initialisé avec les 256 valeurs de la table ASCII. Le fichier à compresser est
découpé en chaînes d'octets (ainsi pour des images monochromes - codées sur 1 bit - cette
compression est peu efficace), chacune de ces chaînes est comparée au dictionnaire et est ajoutée si
jamais elle n'y est pas présente.
31
L'algorithme parcourt le flot d'informations en le codant; si jamais une chaîne est plus petite que le
plus grand mot du dictionnaire alors elle est transmise.

Lors de la décompression, l'algorithme reconstruit le dictionnaire dans le sens inverse, ce dernier n'a
donc pas besoin d'être stocké.

5. La compression JPEG

L'acronyme JPEG (Joint Photographic Expert Group prononcez jipègue ou en anglais djaypègue)
provient de la réunion en 1982 d'un groupe d'experts de la photographie, dont le principal souci était
de travailler sur les façons de transmettre des informations (images fixes ou animées). En 1986,
l'ITU-T mit au point des méthodes de compression destinées à l'envoi de fax. Ces deux groupes se
rassemblèrent pour créer un comité conjoint d'experts de la photographie (JPEG).

Contrairement à la compression LZW, la compression JPEG est une compression avec pertes, ce
qui lui permet, en dépit d'une perte de qualité, un des meilleurs taux de compression (20:1 à 25:1
sans perte notable de qualité).

Cette méthode de compression est beaucoup plus efficace sur les images photographiques
(comportant de nombreux pixels de couleurs différentes) et non sur des images géométriques (à la
différence de la compression LZW) car sur ces dernières les différences de nuances dûes à la
compression sont très visibles.

Les étapes de la compression JPEG sont les suivantes :

 Rééchantillonnage de la chrominance, car l'oeil ne peut discerner des différences de chrominance


au sein d'un carré de 2x2 points
 Découpage de l'image en blocs de 8x8 points, puis l'application de la fonction DCT (Discrete
Cosinus Transform, transformation discrète en cosinus) qui décompose l'image en somme de
fréquences
 Quantification de chaque bloc, c'est-à-dire qu'il applique un coefficient de perte (qui permet de
déterminer le ratio taille/qualité) "annulera" ou diminuera des valeurs de hautes fréquences, afin
d'atténuer les détails en parcourant le bloc intelligemment avec un codage RLE (en zig-zag pour
enlever un maximum de valeurs nulles).
 Encodage de l'image puis compression avec la méthode d'Huffman

Le format de fichier embarquant un flux codé en JPEG est en réalité appelés JFIF (JPEG File
Interchange Format, soit en français Format d'échange de fichiers JPEG), mais par déformation le
terme de "fichier JPEG" est couramment utilisé.

Il est à noter qu'il existe une forme de codage JPEG sans perte (appelé lossless). Bien que peu
utilisé par la communauté informatique en général, il sert surtout pour la transmission d'images
médicales pour éviter de confondre des artefacts (purement liés à l'image et à sa numérisation) avec
de réels signes pathologiques. La compression est alors beaucoup moins efficace (facteur 2
seulement).

a) . La compression DCT : Transformée en cosinus discrète


32
La transformée en cosinus discrète ou TCD (de l'anglais : DCT ou Discrete Cosine Transform) est
une transformation proche de la transformée de Fourier discrète (DFT). Le noyau de projection est un
cosinus et crée donc des coefficients réels, contrairement à la DFT, dont le noyau est une
exponentielle complexe et qui crée donc des coefficients complexes. On peut cependant exprimer la
DCT en fonction de la DFT, qui est alors appliquée sur le signal symétrisé.

La variante la plus courante de la transformée en cosinus discret est la DCT type-II, souvent
simplement appelée « la DCT ». Son inverse, qui correspond au type-III est souvent simplement
appelée « IDCT ».

Une DCT 2D comparée à une DFT. Les zones claires représentent les coefficients non-nuls

33
Applications

 La DCT, et en particulier la DCT-II est très utilisée en traitement du signal et de l'image, et


spécialement en compression. La DCT possède en effet une excellente propriété de
« regroupement » de l'énergie : l'information est essentiellement portée par les coefficients
basses fréquences. Pour les images naturelles, la DCT est la transformation qui se rapproche le
plus de la transformée de Karhunen-Loève qui fournit une décorrélation optimale des
coefficients pour un signal markovien. En pratique, les procédés de compression font donc
l'hypothèse qu'une image naturelle peut être modélisée comme la réalisation d'un
processus markovien et approximent la transformée de Karhunen-Loève, trop complexe en
calcul et dépendante des données, par une DCT. L'intérêt d'une transformation se voit
particulièrement bien sur une figure (voir ci-contre). Seuls un petit nombre de coefficients sont
non-nuls, et peuvent être utilisés pour reconstruire l'image par transformée inverse (IDCT) lors
de la décompression. Le gain en termes de compression vient de la suppression des coefficients
nuls ou proches de zéro. Ce genre de mécanisme est utilisé dans les standards JPEG et MPEG,
qui utilisent une DCT 2D sur des blocs de pixels de taille 8x8 (pour des raisons de complexité).

 Les formats de compression de son avec perte AAC, Vorbis et MP3 utilisent une version
modifiée de cette technique, la transformée en cosinus discrète modifiée, TCDM (MDCT en
anglais).

 La DCT est aussi employée pour la résolution de systèmes d'équations différentielles par des
méthodes spectrales.
Définition

La DCT est une fonction linéaire inversible RN → RN ou de manière équivalente une matrice
carrée N × N inversible. Il existe plusieurs légères variantes de la DCT. Voici les quatre types les
plus connus.

Le développement des algorithmes de calcul rapide des transformées DCT se basent sur la
possibilité de décomposer la matrice de définition sous forme d'un produit de matrices dont le calcul
est plus simple, et permet de réduire le nombre de multiplications scalaires, en profitant des
identités remarquables de périodicité et symétries des fonctions sinusoïdales. Ainsi, on peut
décomposer toute transformée DCT de RN en transformées plus simples en
décomposant Nen produit de facteurs premiers, et en composant des sous-transformées
dans Rn où n est l'un de ces facteurs. En particulier, de nombreuses optimisations ont été
développées quand N est une puissance de 2.

Cela revient à réécrire la matrice N × N sous forme de produit de sous-matrices identiques


(disposées en pavage régulier et utilisant donc des coefficients réels communs ou différenciés

34
uniquement par leur signe) et de matrices à coefficients unitaires ou nuls (-1, 0 ou 1), ces dernières
ne nécessitant pas de multiplication.

DCT-I

On peut rendre cette transformée orthogonale (à une constante multiplicative près) en


multipliant x0 et xN-1 par √2 et réciproquement X0 et XN-1 par 1/√2. Cette normalisation casse toutefois la
correspondance avec une DFT.

On peut noter que la DCT-I n'est pas définie pour , contrairement aux autres types qui sont définis
pour tout N positif.

DCT-II

Cette variante DCT est la plus courante et la plus utilisée. Elle est généralement simplement appelée « la
DCT ». De la même manière que pour la DCT-I, on peut rendre cette transformation orthogonale en
multipliant X0 par 1/√2. Cette forme normalisée est très utilisée en pratique mais casse la correspondance
avec la DFT.

Exemple pour N = 8

Un développement optimisé de cette transformée pour le cas N=8 (utilisé dans JPEG et MPEG) est obtenu en
réécrivant la transformée sous forme matricielle et en factorisant la décomposition, pour réduire le nombre
de multiplications scalaires nécessaires. Par exemple, la décomposition suivante est utilisée pour la
factorisation par l'algorithme de Chen1 , ici orthogonalisée (voir remarque ci-dessus) :

Coefficients constants de calcul

DCT(8) (méthode de calcul rapide)

35
La formule optimisée pour une DCT unidimensionnelle est souvent utilisée telle quelle pour son utilisation
dans l'espace bidimensionnel (par transposition et composition) ; cette formule permet de réduire de façon
spectaculaire le calcul de 1024 multiplications (formule de base) à 256 multiplications seulement dans le
traitement d'un bloc image 8×8 (deux passes de 32 multiplications pour chaque ligne de 8 valeurs) ;
cependant, des optimisations sont encore possibles en optimisant la composition elle-même des deux passes
(horizontale et verticale) pour réduire encore de 256 à 91 multiplications seulement (voire moins selon des
recherches plus récentes).

On notera aussi que la première matrice ci-dessus permet aussi une réécriture de nombreuses multiplications
communes (et donc en fait la formule ci-dessus nécessite beaucoup moins que les 32 multiplications, en fait
16 si on regroupe les sous-expressions communes). On pourrait encore décomposer facilement la première
matrice car elle est elle-même une transformée DCT dans R4, décomposable en deux sous-matrices de R2.

De nombreuses études ont montré comment cette transformée peut être optimisée en fonction des
contraintes, notamment quand la transformée est utilisée pour la compression, car la transformée permet
de concentrer l'essentiel de l'énergie dans les coefficients obtenus xi d'indice faible, les autres concentrant
peu d'énergie ont une contribution faible sur le signal spatial initial et sont réduits à zéro lors des étapes
de quantification. Ainsi, la précision nécessaire pour représenter les derniers coefficients est plus faible
voire nulle, et les coefficients constants Ci utilisés pour le calcul des multiplications scalaires peuvent faire
l'objet d'optimisation spécifique, en fixant leur précision, et en utilisant des techniques de multiplication par
un nombre réduit d'additions-décalages sans avoir besoin d'utiliser une multiplication générique.

Néanmoins, cet algorithme de calcul (présenté tel quel, il calcule la DCT unidimensionnelle à 8 points avec
16 multiplications) est à la base de toutes les optimisations suivantes par factorisation des sous-matrices.
L'algorithme de Loeffler2 est actuellement le plus efficace ayant été publié (avec 11 multiplications pour la
même DCT à 8 points au lieu de 16 avec l'algorithme de Chen, toutefois certains coefficients subissent deux
multiplications et cela pourrait rendre l'algorithme moins stable). Il a même été demontré que le nombre
minimum théorique de multiplications nécessaires pour la transformation DCT à 8 points ne peut être
inférieur à 11, ce qui fait que les algorithmes à 11 multiplications scalaires sont optimums en termes de
performance brute (ils se différencient seulement en termes de stabilité suivant l'ordre dans lequel les
multiplications sont réalisées, et la précision dès lors nécessaire pour les produits intermédiaires).

36
Cependant l'algorithme de Loeffler regroupe 8 des 11 multiplications scalaires sur les sorties, ce qui permet
de regrouper ces multiplications avec l'étape suivante de quantification (ce qui en fait tout l'intérêt) : pour
une transformée 2D 8×8, il faut 8×11 multiplications pour la transformée des lignes, et seulement 8×3
multiplications pour les colonnes, soit un total de 112 multiplications (au lieu de 256 avec l'algorithme de
Chen) si les 64 dernières multiplications scalaires sont effectuées avec la quantification. Plus de détails sont
disponibles dans les normes de compression JPEG et MPEG.

DCT-III

La DCT-III est la transformée inverse de la DCT-II. Elle est plus connue sous le nom de « DCT Inverse » et
son acronyme (anglais) "IDCT".

De la même manière que pour la DCT-I, on peut rendre cette transformation orthogonale en
multipliant x0 par √2. Cette forme normalisée est très utilisée en pratique mais casse la correspondance avec
la DFT.

Exemple pour N = 8

En reprenant l'exemple ci-dessus, on obtient une décomposition inverse (ici orthogonalisée) également
utilisée dans l'algorithme de Chen :

IDCT(8) (méthode de calcul rapide)

Là aussi, l'évaluation scalaire de ce produit matriciel contient de nombreuses sous-expressions communes


permettant des réductions du nombre de multiplications scalaires nécessaires.

DCT-IV

37
La DCT-IV est une matrice orthogonale.

b) Compression par ondelettes

Grande rivale de la DCT, la technique de compression à base d’ondelettes offre une plus grande finesse au
niveau de l’analyse du signal et permet de mieux s’adapter aux propriétés locales de l’image. Il s’agit d’une
voie de recherche assez prometteuse. Les codeurs JPEG 2000 et SPIHT utilisent tous deux une
transformée en ondelettes dans leur schéma de compression. En revanche, seule JPEG 2000 est une norme.
La compression en ondelettes est en elle-même sans pertes. C'est l'introduction d'une quantification ou d'un
seuillage qui entraine la perte irréversible d'informations.

La transformation par ondelettes est une technique inventée par Jean Morlet, un ingénieur français, pour la
prospection pétrolière. Cette technique consiste à décomposer une image en une myriade de sous-bandes,
c’est-à-dire des images de résolution inférieure.

La transformation en ondelettes provient d'une analyse multirésolution de l'image. On considère des


espaces d'approximations de plus en plus grossiers notés Vj et des espaces "capturant" les détails perdus
entre chaque niveau d'approximation notés Wj avec . Les bases ondelettes se situent sur les Wj, c'est
là qu'est le cœur de la compression sans perte.

Les coefficients d'ondelettes dans les Wj mettent en évidence des informations sur les contours, les textures,
leur localisation et leur orientation. Le choix de l’ondelette mère est très important et fait toujours l’objet
d’expérimentations pour adapter l’analyse du signal image au système de perception visuelle de l’homme.

La compression se compose donc des étapes suivantes :

1. Transformations par ondelettes.

2. Quantification : les valeurs des images de détails inférieures à un certain niveau sont
éliminées, en fonction de l’efficacité recherchée. C’est cette étape qui introduit des pertes.

3. Codage des valeurs restantes.

38
Figure 1 : schéma de compression

Décompression par ondelettes

La transformation inverse par ondelettes reconstruit une image d’origine. La construction de


l’image à partir des sous-bandes restitue l’image en mode progressif. L’affichage de l’image peut
s’effectuer en deux modes :

 Soit la taille de l’image augmente au fur et à mesure de la lecture du fichier compressé.

 Soit la résolution de l’image augmente au fur et à mesure de la lecture du fichier compressé.

Discrete Wavelet Transform

An example of the 2D discrete wavelet transform that is used in JPEG2000.

39
In mathematics, a wavelet series is a representation of a square-integrable (real- or complex-
valued) function by a certain orthonormal seriesgenerated by a wavelet. This article provides a
formal, mathematical definition of an orthonormal wavelet and of the integral wavelet transform.

Formal definition

A function is called an orthonormal wavelet if it can be used to define a Hilbert basis,


that is a complete orthonormal system, for the Hilbert space of square
integrable functions. The Hilbert basis is constructed as the family of functions by
means of dyadic translations and dilations of ,

for integers . This family is an orthonormal system if it is orthonormal under the inner
product

where is the Kronecker delta and is the standard inner

product on The requirement of completeness is that every


function may be expanded in the basis as

with convergence of the series understood to be convergence in norm. Such a representation of a


function f is known as a wavelet series. This implies that an orthonormal wavelet is self-dual.

Wavelet transform

The integral wavelet transform is the integral transform defined as

The wavelet coefficients cjk are then given by

40
Here, a = 2 − j is called the binary dilation or dyadic dilation, and b = k2 − j is the binary or dyadic
position.

Wavelet compression

Wavelet compression is a form of data compression well suited for image


compression (sometimes also video compression and audio compression). Notable
implementations are JPEG 2000 for still images, and REDCODE, the BBC's Dirac, and Ogg Tarkin for
video. The goal is to store image data in as little space as possible in a file. Wavelet compression can be
either lossless or lossy.[1]

Using a wavelet transform, the wavelet compression methods are adequate for
representing transients, such as percussion sounds in audio, or high-frequency components in two-
dimensional images, for example an image of stars on a night sky. This means that the transient elements of a
data signal can be represented by a smaller amount of information than would be the case if some other
transform, such as the more widespread discrete cosine transform, had been used.

Wavelet compression is not good for all kinds of data: transient signal characteristics mean good wavelet
compression, while smooth, periodic signals are better compressed by other methods, particularly traditional
harmonic compression (frequency domain, as by Fourier transforms and related). Data statistically
indistinguishable from random noise is not compressible by any means.

See Diary Of An x264 Developer: The problems with wavelets (2010) for discussion of
practical issues of using wavelets for video compression.

Method

First a wavelet transform is applied. This produces as many coefficients as there are pixels in the image
(i.e.: there is no compression yet since it is only a transform). These coefficients can then be compressed
more easily because the information is statistically concentrated in just a few coefficients. This principle is
called transform coding. After that, the coefficients are quantized and the quantized values
are entropy encoded and/or run length encoded.

A few 1D and 2D applications of wavelet compression use a technique called "wavelet footprints". [2][3]

La Compression par ondelettes est une technique de compression de données, bien adaptée à
la compression d'images.

Comparaison des algorithmes

Les principaux avantages par rapport à JPEG sont :

41
 Le fait que l’algorithme s’adapte mieux aux propriétés locales de l’image.

 On peut atteindre des taux de compression d’environ 50 contre 15 pour JPEG tout en ayant
une qualité d’image raisonnable.
Applications industrielles

 Imagerie médicale.

 Le cinéma numérique a adopté la norme JPEG 2000, qui utilise une transformée en
ondelettes.

7. Compression fractale

Un exemple de fractales.

On nomme figure fractale ou "fractale" par substantivation de l'adjectif (ou encore en


anglais fractal), une courbe ou surface de forme irrégulière ou morcelée qui se crée en suivant des
règles déterministes ou stochastiques impliquant une homothétie interne. Le terme « fractale » est un
néologisme créé par Benoît Mandelbrot en 1974 à partir de la racine latine fractus, qui signifie brisé,
irrégulier (fractales n.f). Dans la « théorie de la rugosité » développée par Mandelbrot, une fractale
désigne des objets dont la structure est liée à l'échelle.

Ce terme était au départ un adjectif : les objets fractals (selon un pluriel formé sur l'exemple de
"chantiers navals"). Les fractales sont définies de manière paradoxale, en référence aux structures
gigognes dont ils constituent des cas particuliers : « Les objets fractals peuvent être envisagés

comme des structures gigognes en tout point –et pas seulement en un certain nombre de points, les
attracteurs de la structure gigogne classique. Cette conception hologigogne (gigogne en tout point)
des fractales implique cette définition tautologique : un objet fractal est un objet dont chaque
élément est aussi un objet fractal »2. Malgré les apparences, ce type de définitions de

42
nature récursive n'est pas seulement théorique mais peut concerner aussi des concepts usuels : un
ancêtre est un parent ou un ancêtre d'un parent, un multiple est un composé d'un nombre ou d'un
multiple de ce nombre, un escalier commence ou prolonge un escalier, une dynastie inaugure ou
prolonge une dynastie, etc.

Caractéristiques

courbe de von Koch

Ź i +1=Ź 2i + Ć
L'équation de Mandelbrot:

Un objet fractal possède au moins l'une des caractéristiques suivantes :

 sa dimension de Hausdorff est strictement supérieure à sa dimension topologique. Cette


caractéristique est généralement prise comme définition même d'un objet fractal. Pour exprimer
la chose autrement, un réseau d'irrigation est un déploiement de lignes (« en 1D ») qui offre des
caractéristiques commençant à évoquer une surface (« en 2D »). La surface du poumon (« en
2D ») est repliée en une sorte de volume (« en 3D »). De façon imagée, les fractales se
caractérisent par une sorte de dimension non-entière.

 il a des détails similaires à des échelles arbitrairement petites ou grandes ;

 il est trop irrégulier pour être décrit efficacement en termes géométriques traditionnels ;

 il est exactement ou statistiquement autosimilaire, c'est-à-dire que le tout est semblable à


une de ses parties ;
Domaines de validité

Les figures fractales n'ont pas à satisfaire toutes les propriétés mentionnées ci-dessus pour servir de
modèles. Il leur suffit de réaliser des approximations convenables de ce qui intéresse dans un
domaine de validité donné (le livre fondateur de Mandelbrot Les Objets fractals en donne une
grande variété d'exemples). La taille des alvéoles du poumon, par exemple, taille à partir de laquelle
celui-ci cesse de se subdiviser de façon fractale, est liée à la taille du libre parcours moyen de la
molécule d'oxygène à température du corps.

La dimension utilisée est celle de Hausdorff, et on observe qu'elle correspond à une caractéristique
nouvelle des surfaces irrégulières. On connait les plages de validité des dimensions de Hausdorff
observées sur Terre pour les montagnes, les nuages, etc.
43
Des exemples de figures fractales sont fournis par les ensembles de Julia et de Mandelbrot, la fractale
de Lyapunov, l'ensemble de Cantor, le tapis de Sierpinski, le triangle de Sierpinski, la courbe de Peano ou

le flocon de Koch. Les figures fractales peuvent être des fractales déterministes ou stochastiques. Elles
apparaissent souvent dans l'étude des systèmes chaotiques.

Les figures fractales peuvent être réparties en trois grandes catégories :

1. Les systèmes de fonctions itérées. Ceux-ci ont une règle de remplacement géométrique fixe
(l'ensemble de Cantor, le tapis de Sierpinski, le triangle de Sierpinski, la courbe de Peano,
le flocon de Koch) ;

2. Les fractales définies par une relation de récurrence en chaque point dans un espace (tel que
le plan complexe). Des exemples de ce type sont les ensembles de Mandelbrot et la fractale
de Lyapunov ;

3. Les fractales aléatoires, générées par des processus stochastiques et non déterministes, par
exemple les paysages fractals.

De toutes ces figures fractales, seules celles construites par des systèmes de fonctions itérés
affichent habituellement la propriété d'autosimilitude, signifiant que leur complexité est invariante
par changement d'échelle.

triangle de Sierpinski

tapis
de Sierpinski

Les fractales aléatoires sont les plus utilisées dans la pratique, et peuvent servir à décrire de
nombreux objets extrêmement irréguliers du monde réel. Les exemples incluent des nuages, les
montagnes, les turbulences de liquide, les lignes des côtes et les arbres. Les techniques fractales ont
aussi été utilisées dans la compression d'image fractale, de même que dans beaucoup de disciplines
scientifiques.

44
Dimension fractale

Ensemble de Julia

La dimension d'une ligne droite, d'un cercle et d'une courbe régulière est de 1. Une fois fixé une
origine et un sens, chaque point de la courbe peut être déterminé par un nombre, qui définit la
distance entre l'origine et le point. Le nombre est pris négativement s'il faut se déplacer dans le sens
opposé à celui choisi au départ.

La dimension d'une figure simple dans le plan est de 2. Une fois un repère défini, chaque point de la
figure peut être déterminé par deux nombres. La dimension d'un corps simple dans l'espace est de 3.

Une figure telle qu'une fractale n'est pas simple. Sa dimension n'est plus aussi facile à définir et n'est
plus forcément entière. La dimension fractale, plus complexe, s'exprime à l'aide de la dimension de
Hausdorff.

Quand la fractale est formée de répliques d'elle-même en plus petit, sa dimension fractale peut se
calculer comme suit :

où la fractale de départ est formée de n exemplaires dont la taille a été réduite d'un
facteur h (pour homothétie).

Quelques exemples :

 Un côté du flocon de Koch est formé de n = 4 exemplaires de lui-même réduit d'un


facteur h =3. Sa dimension fractale vaut :

45
 Le triangle de Sierpinski est formé de n = 3 exemplaires de lui-même réduit d'un facteur h =
2 . Sa dimension fractale vaut :

 Le tapis de Sierpinski est formé de n = 8 exemplaires de lui-même réduit d'un facteur h = 3.


Sa dimension fractale vaut :

Une liste beaucoup plus longue se trouve sous : Liste de fractales par dimension de Hausdorff.

Objets fractals dans la nature

Le chou romanesco, un exemple de fractale naturelle

Une fougère fractale modélisée en utilisant un système de fonctions itérées.

Des formes fractales approximatives sont facilement observables dans la nature. Ces objets ont une
structure autosimilaire sur une échelle étendue, mais finie : les nuages, les flocons de neige,
les montagnes, les réseaux de rivières, le chou-fleur ou le brocoli, et les vaisseaux sanguins.

Les arbres et les fougères sont de nature fractale et peuvent êtres modélisés par ordinateur à l'aide
d'algorithme récursif comme les L-Systems. La nature récursive est évidente dans ces exemples ; la
branche d'un arbre ou la fronde d'une fougère sont des répliques miniatures de l'ensemble : pas
identiques, mais de nature similaire.

46
La surface d'une montagne peut être modélisée sur ordinateur en utilisant une fractale : prenons un
triangle dans un espace tridimensionnel dont nous connectons les milieux de chaque côté par des
segments, il en résulte quatre triangles. Les points centraux sont ensuite déplacés aléatoirement vers
le haut ou le bas, dans un rayon défini. La procédure est répétée, diminuant le rayon de moitié à
chaque itération. La nature récursive de l'algorithme garantit que le tout est statistiquement similaire
à chaque détail.

Enfin, certains astrophysiciens ont remarqué des similitudes dans la répartition de la matière dans
l'Univers à six échelles différentes. Les effondrements successifs de nuages interstellaires, dus à la
gravité, seraient à l'origine de cette structure (partiellement) fractale. Ce point de vue a donné
naissance au modèle de l'univers fractal, décrivant un univers basé sur les fractales.

Domaines d'application

Les domaines d'application des fractales sont très nombreux, on peut citer en particulier3

 en biologie, répartition des structures des plantes, bactéries, feuilles, branches d'arbres,..

 en géologie, étude du relief, côtes et cours d'eau, structures de roches, avalanches...

 en paléontologie, loi de puissance des apparitions et extinctions d'espèces

 en morphologie animale, structures des invertébrés, plumes d'oiseaux, ...

 en médecine, structure des poumons, intestins, battements du coeur

 en météorologie, nuages, vortex, banquise, vagues scélérates, turbulences, structure de


la foudre

 en vulcanologie, prévision d'éruptions volcaniques, tremblements de terre

 en astronomie avec la description des structures de l'univers, cratères sur la Lune, répartition
des exoplanètes et des galaxies...

 en sciences humaines, structure urbaine, évolution de la démographie

 en économie, prévision des krachs boursiers

 dans les arts, art graphiques bien sur, mais aussi en littérature, en musique, au cinéma...
Dans La Dramaturgie, par exemple, Yves Lavandier démontre que la théorie fractale s’applique
à merveille aux mécanismes du récit. La forme simple protagoniste-objectif-obstacles se
retrouve à différentes échelles : la série, l’œuvre unitaire, l’acte logistique, l’acte dramatique, la
séquence, la scène, jusqu’à certains dialogues. C’est la spécificité de chaque composant et la
47
combinaison de milliers de formes simples qui donnent à chaque récit son caractère unique et
son apparente originalité.

Tous ces domaines - et bien d'autres - peuvent bénéficier de la description et d'une modélisation en
termes fractals des phénomènes associés.

Galerie de photos

Ensemble de Mandelbrot Ensemble de Julia en 0.3 + L'éponge de Menger Suite qui tend vers le flocon
0.5i de Koch

La compression fractale est une méthode de compression d'image encore peu utilisée aujourd’hui. Elle
repose sur la détection de la récurrence des motifs, et tend à éliminer la redondance d’informations dans
l'image.

C'est une méthode destructive puisque l'ensemble des données de départ ne se retrouve pas dans
l'image finale. Il existe plusieurs méthodes (subdivision de triangles, Delaunay etc.) mais la
compression par la méthode Jacquin est la plus connue.

Illustration par la Méthode Jacquin

Méthode Jacquin

(L'image utilisée pour cette compression est, selon la tradition, la photo de Lenna.)

48
 La compression fractale consiste tout d'abord à réaliser deux segmentations (appelés aussi
pavages, ou partitionnements) sur une image : une segmentation de figures Sources et une
segmentation de figures Destinations.

 Il s'agit alors de trouver pour chaque figure Source, quel est le meilleur couple (figure
source, figure destination) minimisant une erreur. Cette erreur est généralement calculée en
soustrayant les deux figures. Pour réaliser l'opération de soustraction, il est nécessaire d'opérer
une transformation de la figure source aux dimensions (et à la géométrie) de la figure
destination.

De plus, des règles comme la rotation et les retournements sont possibles.

 Une fois que tous les couples ont été trouvés, le fichier de sortie contient alors les différents
couples, ainsi que les différentes transformations effectuées (rotation, réduction de la moyenne
etc.).

 Lors de la décompression, l'image est recréée à partir de ces transformations. La


convergence est alors garantie par le fait que d'une part il y a une minimisation d'erreur
(différence) et une modification des pixels, et d'autre part, que les figures sources sont plus
grandes que les figures destinations. La compression fractale utilise la même propriété pour
reconstruire l'image.
Partitionnements

Le partitionnement est l’opération qui consiste à segmenter une image en régions. Dans la
compression par la méthode Jacquin, nous avons besoin de 2 partitionnements : Source et
Destination. La méthode Jacquin utilise par exemple des figures carrées, mais d'autres formes sont
possibles (nids d'abeilles, triangles etc).

Pavages carrés Source et Destination

 Un point essentiel dans les partitionnements Source et Destination est que le pavage
destination doit être plus petit que le pavage source. En effet, dans le cas contraire, nous serions
amenés à faire un agrandissement (et non une réduction) lors de la transposition des figures
sources vers les figures destinations. Une fractale possède un motif se répétant à l’infini, en se
rétrécissant. Aussi, nous perdons cette propriété si le partitionnement destination est plus grand
que le partitionnement source, l’image ne pourra alors pas converger.

49
Pavages triangulaires Source et Destination

 Le partitionnement par la méthode Jacquin est un partitionnement statique. L'utilisation d'un


partitionnement adaptatif (qui dépend de l'image à traiter) améliore considérablement le facteur
de compression.
Décompression

La décompression consiste en la lecture du fichier contenant les correspondances figure source-


figure destination. Il suffit ensuite d'appliquer les transformations plusieurs fois. Ce procédé de
reconstruction itéré, aussi connu sous le nom de système de fonctions itérées, garantit une
convergence, relative, vers l'image de départ. La qualité du résultat dépend fortement de la taille des
figures de segmentation, plus les figures seront nombreuses, et plus l'image résultante sera de
qualité.

Partitionnements carrés - Itérations 1,2,3 et 4

 Voici quelques images résultantes de la compression Jacquin, sur quatre itérations :

Partitionnements triangulaires - Itérations 1,2,3 et 4

 Avec un partitionnement adaptatif triangulaire :

50
LECTURE
--- TIFF LZW Compression

Abstract

This document describes an adaptive compression scheme for raster

images.

Reference

Terry A. Welch, "A Technique for High Performance Data

Compression", IEEE Computer, vol. 17 no. 6 (June 1984).

Describes the basic Lempel-Ziv & Welch (LZW) algorithm. The

author's goal in the article is to describe a hardware-based

compressor that could be built into a disk controller or database

engine, and used on all types of data. There is no specific

discussion of raster images. We intend to give sufficient

information in this Appendix so that the article is not required

reading.

Requirements

A compression scheme with the following characteristics should

work well in a desktop publishing environment:

o Must work well for images of any bit depth, including images

deeper than 8 bits per sample.

o Must be effective: an average compression ratio of at least

2:1 or better. And it must have a reasonable worst-case

behavior, in case something really strange is thrown at it.

o Should not depend on small variations between pixels.

Palette color images tend to contain abrupt changes in index

values, due to common patterning and dithering techniques. These

abrupt changes do tend to be repetitive, however, and the scheme

should make use of this fact.

o For images generated by paint programs, the scheme should

not depend on a particular pattern width. 8x8 pixel patterns are

common now, but we should not assume that this situation will not

51
change.

o Must be fast. It should not take more than 5 seconds to

decompress a 100K byte grayscale image on a 68020- or 386-based

computer. Compression can be slower, but probably not by more

than a factor of 2 or 3.

o The level of implementation complexity must be reasonable.

We would like something that can be implemented in no more than a

couple of weeks by a competent software engineer with some

experience in image processing. The compiled code for

compression and decompression combined should be no more than

about 10K.

o Does not require floating point software or hardware.

The following sections describe an algorithm based on the "LZW"

(Lempel-Ziv & Welch) technique that meets the above requirements.

In addition meeting our requirements, LZW has the following

characteristics:

o LZW is fully reversible. All information is preserved. But

if noise or information is removed from an image, perhaps by

smoothing or zeroing some low-order bitplanes, LZW compresses

images to a smaller size. Thus, 5-bit, 6-bit, or 7-bit data

masquerading as 8-bit data compresses better than true 8-bit

data. Smooth images also compress better than noisy images, and

simple images compress better than complex images.

o On a 68082- or 386-based computer, LZW software can be

written to compress at between 30K and 80K bytes per second,

depending on image characteristics. LZW decompression speeds are

typically about 50K bytes per second.

o LZW works well on bilevel images, too. It always beats

PackBits, and generally ties CCITT 1D (Modified Huffman)

compression, on our test images. Tying CCITT 1D is impressive in

that LZW seems to be considerably faster than CCITT 1D, at least

in our implementation.

52
o Our implementation is written in C, and compiles to about 2K

bytes of object code each for the compressor and decompressor.

o One of the nice things about LZW is that it is used quite

widely in other applications such as archival programs, and is

therefore more of a known quantity.

The Algorithm

Each strip is compressed independently. We strongly recommend

that RowsPerStrip be chosen such that each strip contains about

8K bytes before compression. We want to keep the strips small

enough so that the compressed and uncompressed versions of the

strip can be kept entirely in memory even on small machines, but

large enough to maintain nearly optimal compression ratios.

The LZW algorithm is based on a translation table, or string

table, that maps strings of input characters into codes. The

TIFF implementation uses variable-length codes, with a maximum

code length of 12 bits. This string table is different for every

strip, and, remarkably, does not need to be kept around for the

decompressor. The trick is to make the decompressor

automatically build the same table as is built when compressing

the data. We use a C-like pseudocode to describe the coding

scheme:

InitializeStringTable();

WriteCode(ClearCode);

Omega = the empty string;

for each character in the strip {

K = GetNextCharacter();

if Omega+K is in the string table {

Omega = Omega+K; /* string concatenation */

} else {

WriteCode (CodeFromString(Omega));

AddTableEntry(Omega+K);

Omega = K;

53
}

} /* end of for loop */

WriteCode (CodeFromString(Omega));

WriteCode (EndOfInformation);

That's it. The scheme is simple, although it is fairly

challenging to implement efficiently. But we need a few

explanations before we go on to decompression.

The "characters" that make up the LZW strings are bytes

containing TIFF uncompressed (Compression=1) image data, in our

implementation. For example, if BitsPerSample is 4, each 8-bit

LZW character will contain two 4-bit pixels. If BitsPerSample is

16, each 16-bit pixel will span two 8-bit LZW characters.

(It is also possible to implement a version of LZW where the LZW

character depth equals BitsPerSample, as was described by Draft 2

of Revision 5.0. But there is a major problem with this

approach. If BitsPerSample is greater than 11, we can not use

12-bit-maximum codes, so that the resulting LZW table is

unacceptably large. Fortunately, due to the adaptive nature of

LZW, we do not pay a significant compression ratio penalty for

combining several pixels into one byte before compressing. For

example, our 4-bit sample images compressed about 3 percent

worse, and our 1-bit images compressed about 5 percent better.

And it is easier to write an LZW compressor that always uses the

same character depth than it is to write one which can handle

varying depths.)

We can now describe some of the routine and variable references

in our pseudocode:

InitializeStringTable() initializes the string table to contain

all possible single-character strings. There are 256 of them,

numbered 0 through 255, since our characters are bytes.

WriteCode() writes a code to the output stream. The first code

written is a Clear code, which is defined to be code #256.

54
Omega is our "prefix string."

GetNextCharacter() retrieves the next character value from the

input stream. This will be number between 0 and 255, since our

characters are bytes.

The "+" signs indicate string concatenation.

AddTableEntry() adds a table entry. (InitializeStringTable() has

already put 256 entries in our table. Each entry consists of a

single-character string, and its associated code value, which is,

in our application, identical to the character itself. That is,

the 0th entry in our table consists of the string <0>, with

corresponding code value of <0>, the 1st entry in the table

consists of the string <1>, with corresponding code value of <1>,

..., and the 255th entry in our table consists of the string

<255>, with corresponding code value of <255>.) So the first

entry that we add to our string table will be at position 256,

right? Well, not quite, since we will reserve code #256 for a

special "Clear" code, and code #257 for a special

"EndOfInformation" code that we will write out at the end of the

strip. So the first multiple-character entry added to the string

table will be at position 258.

Let's try an example. Suppose we have input data that looks

like:

Pixel 0: <7>

Pixel 1: <7>

Pixel 2: <7>

Pixel 3: <8>

Pixel 4: <8>

Pixel 5: <7>

Pixel 6: <7>

Pixel 7: <6>

Pixel 8: <6>

First, we read Pixel 0 into K. OmegaK is then simply <7>, since Omega is

55
the empty string at this point. Is the string <7> already in the

string table? Of course, since all single character strings were

put in the table by InitializeStringTable(). So set Omega equal to

<7>, and go to the top of the loop.

Read Pixel 1 into K. Does OmegaK (<7><7>) exist in the string table?

No, so we get to do some real work. We write the code associated

with Omega to output (write <7> to output), and add OmegaK (<7><7>) to

the table as entry 258. Store K (<7>) into Omega. Note that

although we have added the string consisting of Pixel 0 and Pixel

1 to the table, we "re-use" Pixel 1 as the beginning of the next

string.

Back at the top of the loop. We read Pixel 2 into K. Does OmegaK

(<7><7>) exist in the string table? Yes, the entry we just

added, entry 258, contains exactly <7><7>. So we just add K onto

the end of Omega, so that Omega is now <7><7>.

Back at the top of the loop. We read Pixel 3 into K. Does OmegaK

(<7><7><8>) exist in the string table? No, so write the code

associated with Omega (<258>) to output, and add OmegaK to the table as

entry 259. Store K (<8>) into Omega.

Back at the top of the loop. We read Pixel 4 into K. Does OmegaK

(<8><8>) exist in the string table? No, so write the code

associated with Omega (<8>) to output, and add OmegaK to the table as

entry 260. Store K (<8>) into Omega.

Continuing, we get the following results:

After reading: We write to output: And add table entry:

Pixel 0

Pixel 1 <7> 258: <7><7>

Pixel 2

Pixel 3 <258> 259: <7><7><8>

Pixel 4 <8> 260: <8><8>

Pixel 5 <8> 261: <8><7>

Pixel 6

56
Pixel 7 <258> 262: <7><7><6>

Pixel 8 <6> 263: <6><6>

WriteCode() also requires some explanation. The output code

stream, <7><258><8><8><258><6>... in our example, should be

written using as few bits as possible. When we are just starting

out, we can use 9-bit codes, since our new string table entries

are greater than 255 but less than 512. But when we add table

entry 512, we must switch to 10-bit codes. Likewise, we switch

to 11-bit codes at 1024, and 12-bit codes at 2048. We will

somewhat arbitrarily limit ourselves to 12-bit codes, so that our

table can have at most 4096 entries. If we push it any farther,

tables tend to get too large.

What happens if we run out of room in our string table? This is

where the afore-mentioned Clear code comes in. As soon as we use

entry 4094, we write out a (12-bit) Clear code. (If we wait any

dworder to write the Clear code, the decompressor might try to

interpret the Clear code as a 13-bit code.) At this point, the

compressor re-initializes the string table and starts writing out

9-bit codes again.

Note that whenever you write a code and add a table entry, Omega is

not left empty. It contains exactly one character. Be careful

not to lose it when you write an end-of-table Clear code. You

can either write it out as a 12-bit code before writing the Clear

code, in which case you will want to do it right after adding

table entry 4093, or after the clear code as a 9-bit code.

Decompression gives the same result in either case.

To make things a little simpler for the decompressor, we will

require that each strip begins with a Clear code, and ends with

an EndOfInformation code.

Every LZW-compressed strip must begin on a byte boundary. It

need not begin on a word boundary. LZW compression codes are

stored into bytes in high-to-low-order fashion, i.e., FillOrder

57
is assumed to be 1. The compressed codes are written as bytes,

not words, so that the compressed data will be identical

regardless of whether it is an "II" or "MM" file.

Note that the LZW string table is a continuously updated history

of the strings that have been encountered in the data. It thus

reflects the characteristics of the data, providing a high degree

of adaptability.

LZW Decoding

The procedure for decompression is a little more complicated, but

still not too bad:

while ((Code = GetNextCode()) != EoiCode) {

if (Code == ClearCode) {

InitializeTable();

Code = GetNextCode();

if (Code == EoiCode)

break;

WriteString(StringFromCode(Code));

OldCode = Code;

} /* end of ClearCode case */

else {

if (IsInTable(Code)) {

WriteString(StringFromCode(Code));

AddStringToTable(StringFromCode(OldCode)+

FirstChar(StringFromCode(Code)));

OldCode = Code;

} else {

OutString = StringFromCode(OldCode) +

FirstChar(StringFromCode(OldCode));

WriteString(OutString);

AddStringToTable(OutString);

OldCode = Code;

58
} /* end of not-ClearCode case */

} /* end of while loop */

The function GetNextCode() retrieves the next code from the LZW-

coded data. It must keep track of bit boundaries. It knows that

the first code that it gets will be a 9-bit code. We add a table

entry each time we get a code, so GetNextCode() must switch over

to 10-bit codes as soon as string #511 is stored into the table.

The function StringFromCode() gets the string associated with a

particular code from the string table.

The function AddStringToTable() adds a string to the string

table. The "+" sign joining the two parts of the argument to

AddStringToTable indicate string concatenation.

StringFromCode() looks up the string associated with a given

code.

WriteString() adds a string to the output stream.

When SamplesPerPixel Is Greater Than 1

We have so far described the compression scheme as if

SamplesPerPixel were always 1, as will be be the case with

palette color and grayscale images. But what do we do with RGB

image data?

Tests on our sample images indicate that the LZW compression

ratio is nearly identical regardless of whether

PlanarConfiguration=1 or PlanarConfiguration=2, for RGB images.

So use whichever configuration you prefer, and simply compress

the bytes in the strip.

It is worth cautioning that compression ratios on our test RGB

images were disappointing low: somewhere between 1.1 to 1 and 1.5

to 1, depending on the image. Vendors are urged to do what they

can to remove as much noise from their images as possible.

Preliminary tests indicate that significantly better compression

ratios are possible with less noisy images. Even something as

simple as zeroing out one or two least-significant bitplanes may

59
be quite effective, with little or no perceptible image

degradation.

Implementation

The exact structure of the string table and the method used to

determine if a string is already in the table are probably the

most significant design decisions in the implementation of a LZW

compressor and decompressor. Hashing has been suggested as a

useful technique for the compressor. We have chosen a tree based

approach, with good results. The decompressor is actually more

straightforward, as well as faster, since no search is

involved - strings can be accessed directly by code value.

Performance

Many people do not realize that the performance of any

compression scheme depends greatly on the type of data to which

it is applied. A scheme that works well on one data set may do

poorly on the next.

But since we do not want to burden the world with too many

compression schemes, an adaptive scheme such as LZW that performs

quite well on a wide range of images is very desirable. LZW may

not always give optimal compression ratios, but its adaptive

nature and relative simplicity seem to make it a good choice.

Experiments thus far indicate that we can expect compression

ratios of between 1.5 and 3.0 to 1 from LZW, with no loss of

data, on continuous tone grayscale scanned images. If we zero

the least significant one or two bitplanes of 8-bit data, higher

ratios can be achieved. These bitplanes often consist chiefly of

noise, in which case little or no loss in image quality will be

perceived. Palette color images created in a paint program

generally compress much better than continuous tone scanned

images, since paint images tend to be more repetitive. It is not

unusual to achieve compression ratios of 10 to 1 or better when

using LZW on palette color paint images.


60
By way of comparison, PackBits, used in TIFF for black and white

bilevel images, does not do well on color paint images, much less

continuous tone grayscale and color images. 1.2 to 1 seemed to

be about average for 4-bit images, and 8-bit images are worse.

It has been suggested that the CCITT 1D scheme could be used for

continuous tone images, by compressing each bitplane separately.

No doubt some compression could be achieved, but it seems

unlikely that a scheme based on a fixed table that is optimized

for word black runs separated by dworder white runs would be a

very good choice on any of the bitplanes. It would do quite well

on the high-order bitplanes (but so would a simpler scheme like

PackBits), and would do quite poorly on the low-order bitplanes.

We believe that the compression ratios would generally not be

very impressive, and the process would in addition be quite slow.

Splitting the pixels into bitplanes and putting them back

together is somewhat expensive, and the coding is also fairly

slow when implemented in software.

Another approach that has been suggested uses uses a 2D

differencing step following by coding the differences using a

fixed table of variable-length codes. This type of scheme works

quite well on many 8-bit grayscale images, and is probably

simpler to implement than LZW. But it has a number of

disadvantages when used on a wide variety of images. First, it

is not adaptive. This makes a big difference when compressing

data such as 8-bit images that have been "sharpened" using one of

the standard techniques. Such images tend to get larger instead

of smaller when compressed. Another disadvantage of these

schemes is that they do not do well with a wide range of bit

depths. The built-in code table has to be optimized for a

particular bit depth in order to be effective.

Finally, we should mention "lossy" compression schemes.

Extensive research has been done in the area of lossy, or non-

61
information-preserving image compression. These techniques

generally yield much higher compression ratios than can be

achieved by fully-reversible, information-preserving image

compression techniques such as PackBits and LZW. Some

disadvantages: many of the lossy techniques are so

computationally expensive that hardware assists are required.

Others are so complicated that most microcomputer software

vendors could not afford either the expense of implementation or

the increase in application object code size. Yet others

sacrifice enough image quality to make them unsuitable for

publishing use.

In spite of these difficulties, we believe that there will one

day be a standardized lossy compression scheme for full color

images that will be usable for publishing applications on

microcomputers. An International Standards Organization group,

ISO/IEC/JTC1/SC2/WG8, in cooperation with CCITT Study Group VIII,

is hard at work on a scheme that might be appropriate. We expect

that a future revision of TIFF will incorporate this scheme once

it is finalized, if it turns out to satisfy the needs of desktop

publishers and others in the microcomputer community. This will

augment, not replace, LZW as an approved TIFF compression scheme.

LZW will very likely remain the scheme of choice for Palette

color images, and perhaps 4-bit grayscale images, and may well

overtake CCITT 1D and PackBits for bilevel images.

Future LZW Extensions

Some images compress better using LZW coding if they are first

subjected to a process wherein each pixel value is replaced by

the difference between the pixel and the preceding pixel.

Performing this differencing in two dimensions helps some images

even more. However, many images do not compress better with this

extra preprocessing, and for a significant number of images, the

compression ratio is actually worse. We are therefore not making

62
differencing an integral part of the TIFF LZW compression scheme.

However, it is possible that a "prediction" stage like

differencing may exist which is effective over a broad range of

images. If such a scheme is found, it may be incorporated in the

next major TIFF revision. If so, a new value will be defined for

the new "Predictor" TIFF tag. Therefore, all TIFF readers that

read LZW files must pay attention to the Predictor tag. If it is

1, which is the default case, LZW decompression may proceed

safely. If it is not 1, and the reader does not recognize the

specified prediction scheme, the reader should give up.

Acknowledgements

The original LZW reference has already been given. The use of

ClearCode as a technique to handle overflow was borrowed from the

compression scheme used by the Graphics Interchange Format (GIF),

a small-color-paint-image-file format used by CompuServe that

also is an adaptation of the LZW technique. Joff Morgan and Eric

Robinson of Aldus were each instrumental in their own way in

getting LZW off the ground.

The TIFF predictor algorithm

The idea is to make use of the fact that many continuous tone

images rarely vary much in pixel value from one pixel to the

next. In such images, if we replace the pixel values by

differences between consecutive pixels, many of the differences

should be 0, plus or minus 1, and so on. This reduces the

apparent information content, and thus allows LZW to encode the

data more compactly.

Assuming 8-bit grayscale pixels for the moment, a basic C

implementation might look something like this:

char image[ ][ ];

int row, col;

/* take horizontal differences:

*/
63
for (row = 0; row < nrows; row++)

for (col = ncols - 1; col >= 1; col--)

image[row][col] -= image[row][col-1];

If we don't have 8-bit samples, we need to work a little harder,

so that we can make better use of the architecture of most CPUs.

Suppose we have 4-bit samples, packed two to a byte, in normal

TIFF uncompressed (i.e., Compression=1) fashion. In order to

find differences, we want to first expand each 4-bit sample into

an 8-bit byte, so that we have one sample per byte, low-order

justified. We then perform the above horizontal differencing.

Once the differencing has been completed, we then repack the 4-

bit differences two to a byte, in normal TIFF uncompressed

fashion.

If the samples are greater than 8 bits deep, expanding the

samples into 16-bit words instead of 8-bit bytes seems like the

best way to perform the subtraction on most computers.

Note that we have not lost any data up to this point, nor will we

lose any data later on. It might at first seem that our

differencing might turn 8-bit samples into 9-bit differences, 4-

bit samples into 5-bit differences, and so on. But it turns out

that we can completely ignore the "overflow" bits caused by

subtracting a larger number from a smaller number and still

reverse the process without error. Normal twos complement

arithmetic does just what we want. Try an example by hand if you

need more convincing.

Up to this point we have implicitly assumed that we are

compressing bilevel or grayscale images. An additional

consideration arises in the case of color images.

If PlanarConfiguration is 2, there is no problem. Differencing

proceeds the same way as it would for grayscale data.

If PlanarConfiguration is 1, however, things get a little

trickier. If we didn't do anything special, we would be

64
subtracting red sample values from green sample values, green

sample values from blue sample values, and blue sample values

from red sample values, which would not give the LZW coding stage

much redundancy to work with. So we will do our horizontal

differences with an offset of SamplesPerPixel (3, in the RGB

case). In other words, we will subtract red from red, green from

green, and blue from blue. The LZW coding stage is identical to

the SamplesPerPixel=1 case. We require that BitsPerSample be the

same for all 3 samples.

Results and guidelines

LZW without differencing works well for 1-bit images, 4-bit

grayscale images, and synthetic color images. But natural 24-bit

color images and some 8-bit grayscale images do much better with

differencing. For example, our 24-bit natural test images hardly

compressed at all using "plain" LZW: the average compression

ratio was 1.04 to 1. The average compression ratio with

horizontal differencing was 1.40 to 1. (A compression ratio of

1.40 to 1 means that if the uncompressed image is 1.40MB in size,

the compressed version is 1MB in size.)

Although the combination of LZW coding with horizontal

differencing does not result in any loss of data, it may be

worthwhile in some situations to give up some information by

removing as much noise as possible from the image data before

doing the differencing, especially with 8-bit samples. The

simplest way to get rid of noise is to mask off one or two low-

order bits of each 8-bit sample. On our 24-bit test images, LZW

with horizontal differencing yielded an average compression ratio

of 1.4 to 1. When the low-order bit was masked from each sample,

the compression ratio climbed to 1.8 to 1; the compression ratio

was 2.4 to 1 when masking two bits, and 3.4 to 1 when masking

three bits. Of course, the more you mask, the more you risk

losing useful information adword with the noise. We encourage you

65
to experiment to find the best compromise for your device. For

some applications it may be useful to let the user make the final

decision.

Interestingly, most of our RGB images compressed slightly better

using PlanarConfiguration=1. One might think that compressing

the red, green, and blue difference planes separately

(PlanarConfiguration=2) might give better compression results

than mixing the differences together before compressing

(PlanarConfiguration=1), but this does not appear to be the case.

Incidentally, we tried taking both horizontal and vertical

differences, but the extra complexity of two-dimensional

differencing did not appear to pay off for most of our test

images. About one third of the images compressed slightly better

with two-dimensional differencing, about one third compressed

slightly worse, and the rest were about the same.

66
NORMES VIDEO
Principes fondamentaux des algorithmes
de compression vidéo
Les séquences vidéo contiennent une très grande redondance statistique, aussi bien dans le domaine
temporel que dans le domaine spatial.

Les algorithmes de compression vidéo de type MPEG utilisent la transformée en cosinus discrète
( DCT Discrete Cosine Transform), sur des blocs de 8x8 pixels, pour analyser efficacement les corrélations
spatiales entre pixels voisins de la même image. D'autres méthodes ont été proposées, en utilisant
les fractales, les ondelettes, ou même le matching pursuit.

Cependant, si la corrélation entre pixel dans des trames voisines est grande, c'est-à-dire, dans les cas où
deux trames consécutives ont un contenu semblable ou identique, il est souhaitable d’utiliser une technique
de codage dite Inter, par exemple la DPCM, qui utilise la prévision temporelle (prévision compensé du
mouvement entre trames).

Dans le schéma classique du codage vidéo, une combinaison adaptative entre les deux mouvements
(temporel et spatial) de l’information est utilisé pour réaliser une grande compression de donnée (codage
vidéo hybride DPCM/DCT).

La plupart des techniques de codage, font un échantillonnage et une quantification avant de coder
l’information. Le concept de base du sous-échantillonnage est de réduire les dimensions (horizontale et
verticale) de l’image vidéo et donc de diminuer le nombre de pixels à coder.

Certaines applications vidéo sous-échantillonnent aussi le mouvement temporel pour réduire le débit des
images avant de coder. Le récepteur doit donc décoder les images et les interpoler avant de les afficher.

Cette technique de compression peut être considérée comme une des plus élémentaires, qui tient en
compte les caractéristiques physiologiques de l’œil et qui enlève la redondance contenue dans les données
vidéo. Les yeux humains sont plus sensibles aux variations de la luminosité que de couleurs. À cause de ce
défaut de l'œil, la majorité des algorithmes de compression vidéo représentent les images dans l' espace
couleur YUV, qui comprend une composante de luminosité et deux de chrominance. Ensuite les
composantes chromatiques sont sous-échantillonnées en fonction de la composante de luminance avec un
rapport Y : U : V spécifique à une particulière application. (exemple: avec MPEG-2 le rapport est de 4 : 1 : 1
ou 4 : 2 : 2).

Prédiction compensée de mouvement

La prédiction compensée de mouvement, ou compensation de mouvement, est un puissant moyen pour


réduire les redondances temporelles entre images, et elle est utilisée dans MPEG-1 et MPEG-2 comme
prédiction pour le codage DPCM. Le concept de la compensation du mouvement est basé sur l’estimation du
mouvement entre images vidéo; si tous les éléments d’une scène vidéo sont proches dans l’espace, le
mouvement entre trames peut être décrit avec un nombre limité de paramètres (vecteurs de mouvement des
pixels).

67
La meilleure prédiction d'un pixel est donnée par la prédiction de mouvement de la trame précédente. Bien
que, soit la prédiction de l'erreur que les vecteurs de mouvement sont transmis, le codage de l'information de
mouvement pour chaque pixel de l'image n'est pas nécessaire.

Schéma de base du codage entre trames

La technique de compression de base de MPEG-1 (et de MPEG-2) est basée sur une structure de macro-
blocs. L'algorithme code la première trame d'une séquence avec un codage Intra-frame (trame I). Chaque
trame successive est codée en utilisant la prédiction Inter-frame (trames P); seulement les données de la
trame codée juste précédemment (trames I ou P) seront utilisées pour la prédiction. Chaque couleur d'une
trame est partitionné en macro-blocs.

Chaque macro-bloc contient les données sur la luminosité et de la chrominance: 4 blocs de luminosité
(Y1,Y2,Y3,Y4) et deux pour la chrominance (U,V), chacun de 8x8 pixels; ce qui donne un rapport entre
luminosité et chrominance de 4 : 1 : 1

Fonctionnalités de MPEG-1

Pour accéder à un support média, l'algorithme MPEG-1 fut pensé pour supporter différentes fonctionnalités
comme l'accès aléatoire, la recherche en vitesse avant (FF-fast forward) et arrière (FR-fast reverse) dans le
flux vidéo, etc.

Pour incorporer ces fonctionnalités et pour tirer plus d'avantage de la compensation de mouvement et de
l'interpolation de mouvement, l'algorithme MPEG-1 introduit le concept d'images prédites et interpolées
bidirectionnellement (trames B).

Trois types de trames sont considérées :

 Trames I : Ces trames sont codées sans aucune référence à autre image de la séquence vidéo,
comme explique avant. Les trames I permettent de réaliser l'accès aléatoire et les fonctionnalités FF/FR,
bien qu'elles ne permettent qu'un très bas taux de compression.

 Trames P : Ces trames sont codées avec une référence à l'image précédente (trame I ou trame P).
Ces trames sont utilisées pour la prédiction de trames futures ou passées et elles ne peuvent pas être
utilisées pour réaliser l'accès aléatoire et les fonctionnalités FF/FR.

 Trames B : Elles ont besoin des trames futures et passées comme référence pour être codées. Elles
sont utilisées pour obtenir un très haut taux de compression. Elles ne sont jamais utilisées comme
référence.

L'utilisateur peut arranger la séquence des différents types de trame selon le besoins de l'application.
Généralement une séquence vidéo codée en utilisant seulement des trames I (I I I I I . . .) donne un haut
degré d'accès aléatoire, de FF/FR et d’édition, mais un taux très bas de compression. Une séquence vidéo
codée seulement avec des trames P ( I P P P P P P I P P P P . . .) permet un degré moyen d'accès aléatoire
et de FF/FR.

Si on utilise les trois types de trames (I B B P B B P B B I B B P . . .) on arrive à un grand taux de


compression et un raisonnable degré d'accès aléatoire et de FF/FR, mais on augmente beaucoup le temps
de codage. Pour des applications comme la vidéotéléphonie ou la vidéoconférence ce temps peut devenir
intolérable.

68
MPEG-2

L'algorithme MPEG-2 a été dessiné pour avoir une qualité pas inférieure à celle de NTSC/PAL et plus
grande que celle du CCIR 60.

À la base, l'algorithme de MPEG-2 est identique à celui de MPEG-1 et il est donc compatible avec lui.
Chaque décodeur MPEG-2 doit être capable de décoder un flux vidéo MPEG-1 valide. Plusieurs algorithmes
ont été ajoutés pour s'adapter aux nouveaux besoins. MPEG-2 permet de traiter des images entrelacées.

MPEG-2 introduit le concept de « profils » et de « niveaux » pour être compatible avec les systèmes qui
n'implémentent pas toutes ces fonctionnalités.

Chaque niveau spécifie la plage des différents paramètres utiles pour le codage.

Le niveau principal supporte au maximum une densité de 720 pixels en horizontal et 576 pixels en vertical,
un débit d'images par seconde de 30 trames/sec et un débit de bit par seconde de 15 Mbit/s.

MPEG-4
MPEG-4, également appelé ISO/CEI 14496, est une norme de codage d’objets audiovisuels spécifiée par
le Moving Picture Experts Group (MPEG).

La norme MPEG-4 spécifie d'abord des techniques pour gérer le contenu de scènes comprenant un ou plusieurs
objets audio-vidéo. Contrairement à MPEG-2 qui visait uniquement des usages liés à latélévision
numérique (diffusion DVB et DVD), les usages de MPEG-4 englobent toutes les nouvelles applications
multimédias comme le téléchargement et le streaming sur Internet, le multimédia surtéléphone mobile, la radio
numérique, les jeux vidéo, la télévision et les supports haute définition.

La norme spécifie de nouveaux codecs audio et vidéo et enrichit les contenus multimédia, en ajoutant de
nouvelles applications comme le VRML (étendu), la prise en charge de la gestion des droits numériques et de
plusieurs types d’interactivités.

La norme est divisée en plusieurs « parts », ou parties, qui spécifient un type de codage particulier. Dans chaque
partie plusieurs « profils » (collection d’algorithmes) et « niveaux » (contraintes quantitatives) sont définis. Un
consortium industriel désirant utiliser MPEG-4 choisit une ou plusieurs parties de la norme et, pour chaque partie,
il peut sélectionner un ou plusieurs profils et niveaux correspondant à ses besoins.

H.264, ou MPEG-4 AVC (Advanced Video


Coding), ou MPEG-4 Part 10
H.264, ou MPEG-4 AVC (Advanced Video Coding), ou MPEG-4 Part 10, est une norme de codage vidéo
développée conjointement par l'UIT-T Q.6/SG16 (Union internationale des télécommunications
est l'institution spécialisée des Nations Unies pour les technologies de l'information
et de la communication TIC) Video Coding Experts Group (VCEG) ainsi que l'ISO/CEI Moving
Picture Experts Group (MPEG) et est le produit d'un effort de partenariat connu sous le nom Joint Video
Team (JVT). La norme UIT-T H.264 et la norme ISO/CEI MPEG-4 Part 10 (ISO/CEI 14496-10) sont
69
techniquement identiques, et la technologie employée est aussi connue sous le nom AVC, pour Advanced
Video Coding. La première version de la norme a été approuvée enmai 2003 et la plus récente date
de mars 2005.

Caractéristiques détaillées

H.264/AVC (MPEG-4 Part 10) comprend de nombreuses techniques nouvelles qui lui permettent de
compresser beaucoup plus efficacement les vidéos que les normes précédentes (H.261, MPEG-1,MPEG-
2, MPEG-4 Part 2/ASP) et fournit plus de flexibilité aux applications dans un grand nombre
d'environnements réseau. Ces fonctionnalités principales comprennent :

 Prédiction Inter-trame ou Prédiction temporelle ((en)Inter-frame prediction)

 L'estimation et la compensation de mouvement peuvent être effectuées par rapport à


plusieurs images de référence déjà codées. Le choix de l'image de référence intervient au
niveau macroblocet sous-macrobloc. Ceci permet d'utiliser dans certains cas jusqu'à 32 images de
référence (contrairement aux précédentes normes, qui étaient limitées à une ou dans le cas
d’images Bconventionnelles, à deux) et jusqu'à 4 références différentes pour un même macrobloc.
Cette fonctionnalité particulière permet habituellement des améliorations modestes au niveau du
débit et de la qualité dans la plupart des scènes. Mais dans certains types de scènes, comme par
exemple les scènes contenant des flashs rapides et répétitifs ou des scènes réapparaissant
fréquemment, il permet une réduction du débit réellement significative.

 Une compensation de mouvement pouvant utiliser 7 tailles de blocs différentes (16×16,


16×8, 8×16, 8×8, 8×4, 4×8, 4×4) permet une segmentation très précise de zones se déplaçant.

 Une précision au quart de pixel pour la compensation de mouvement, permettant une


description très précise du déplacement des zones en mouvement. Pour la chrominance, la
précision de la compensation de mouvement se fait même au huitième de pixel.

 Une compensation de mouvement pondérée ((en) Weighted Prediction) par des poids et
des décalages permettant à un codeur de construire des prédictions s'adaptant au changement de
luminance et de chrominance de la scène courante. Ceci apporte en particulier un gain pour les
scènes comportant des transitions dues à des flashs ou des fondus entre scènes effectués au
montage.

 Intra-prédiction ou Prédiction spatiale: sur le bord des blocs voisins pour un codage « intra » (plutôt
que la seule prédiction sur les coefficients continus présente dans MPEG-2 Part 2 et la prédiction sur les
coefficients de la transformée de H.263+ et MPEG-4 Part 2).

 Adaptation des transformées discrètes:

70
 Une transformée entière effectuée sur des blocs de taille 4×4 pixels (proche de
la DCT classique). Pour les nouveaux profils issus des extensions FRExt, une transformée
supplémentaire de taille 8×8 a été ajoutée.

 Une transformée de Hadamard effectuée sur les coefficients moyens de la transformée


spatiale primaire (pour la chrominance et éventuellement la luminance dans certains cas) pour
obtenir encore plus de compression là où l'image est adoucie.

 Plusieurs codeurs entropiques:

 CABAC ((en)Context-adaptive binary arithmetic coding): Il s'agit d'un codage arithmétique.


C'est une technique sophistiquée de codage entropique qui produit d'excellents résultats en termes
de compression mais possède une grande complexité (non disponible dans les
profils baseline et extended).

 CAVLC ((en)Context-adaptive Huffman variable-length coding): Il s'agit d'un codage


adaptatif de type Huffman à longueur variable, qui est une alternative moins complexe que CABAC
pour le codage des tables de coefficients de transformation. Bien que moins complexe que CABAC,
CAVLC est plus élaboré et plus efficace que les méthodes habituellement utilisées jusqu'à présent
pour coder les coefficients.

 Une technique simple et hautement structurée de codage à longueur variable ou


((en)Variable length coding) pour de nombreux éléments de syntaxe non codés par CABAC ou
CAVLC, considéré comme du code exponentiel-Golomb (Exp-Golomb).

 Un filtrage anti-blocs ou deblocking filter, effectué dans la boucle de codage et opéré sur les blocs
4×4, permettant de réduire les artefacts caractéristiques du codage avec transformation en bloc.

 Deux modes d'entrelacement:

 Codage en Picture-adaptive frame-field (PAFF ou PicAFF): l'encodeur choisit d'adapter le


codage de la trame courante soit de façon progressive (une seule trame), soit par entrelacement
(deux champs ou fields).

 Codage en Macroblock-adaptive frame-field (MBAFF): même principe que pour le PAFF


sauf que l'application ne s'effectue pas au niveau de la trame mais au niveau des macroblocs 16x16.
Le sens du codage est légèrement différent puisqu'il traite deux lignes de macroblocs en même
temps au lieu d'une seule habituellement. En effet, dans le cas de l'entrelacement, les
deux fieldssont respectivement les premiers blocs 16x8 et les seconds blocs 16x8 des deux
macroblocs appairés.

 Une couche d'abstraction réseau ((en) NAL : Network abstraction layer) est définie pour permettre
l'usage de la même syntaxe vidéo dans de nombreux environnements réseau, ceci inclut des possibilités

71
telles que des paramètres de séquence ( (en) SPS : Sequence parameter set) et d'image
((en) PPS : picture parameter set) qui offrent plus de robustesse et de flexibilité que les conceptions
antérieures.

 Les tranches de commutation (appelées SP et SI) permettent à un codeur de diriger un décodeur


pour que ce dernier puisse s'insérer dans un flux vidéo entrant, ceci permet du streaming vidéo à débit
variable et un fonctionnement en « trick mode » (mode truqué). Quand un décodeur saute au milieu d'un
flux vidéo en utilisant cette technique, il peut se synchroniser avec les images présentes à cet endroit
malgré l'utilisation d'autres images (ou pas d'images) comme références préalables au déplacement.

 L'ordonnancement flexible des macroblocs ((en) FMO : Flexible macroblock ordering, alias slice
groups) et l'ordonnancement arbitraire des tranches ((en) ASO : Arbitrary slice ordering) sont des
techniques de restructuration de l'ordonnancement des régions fondamentales de l'image (macroblocs).
Typiquement utilisées pour améliorer la résistance aux erreurs et aux pertes, ces techniques peuvent
également être utilisées à d'autres fins.

 Le partitionnement des données ((en) DP : Data partitioning) donne la possibilité de séparer les
éléments de syntaxe d'importance plus ou moins élevée dans différents paquets de données. Ceci
permet d'appliquer un niveau de protection inégal ( (en) UEP : Unequal error protection) aux erreurs en
fonction de l'importance des données et d'améliorer ainsi la fiabilité du flux.

 Les tranches redondantes ((en) RS : Redundant slices) permettent d'améliorer la résistance aux
erreurs et aux pertes en permettant au codeur de transmettre une version additionnelle de tout ou partie
de l'image dans une qualité moindre qui pourra être utilisée si le flux principal est corrompu ou perdu.

 Un processus automatisé simple de prévention contre la création accidentelle de faux codes de


démarrage. Il s'agit de séquences binaires spéciales qui sont placées au sein des données, permettant
un accès aléatoire au flux de données ainsi qu'une resynchronisation en cas de perte temporaire du flux.

 Des informations supplémentaires d'amélioration ((en) SEI : Supplemental enhancement


information) et des informations d'état qualitatif de la vidéo ( (en) VUI : Video usability information) sont
des informations supplémentaires qui peuvent être insérées dans le flux pour améliorer son usage pour
un grand nombre d'applications.

 Des images auxiliaires peuvent être utilisées pour des usages tels que le mixage par alpha channel.

 La numérotation des images permet la création de sous-séquences (permettant une scalabilité


temporelle par l'inclusion optionnelle d'images supplémentaires entre d'autres images) ainsi que la
détection et la dissimulation de la perte d'images entières (qui peuvent se produire en cas de perte de
paquets réseau ou d'erreurs de transmission).

 Le comptage de l'ordre des images permet de conserver l'ordre des images et du son dans des
images décodées isolément des informations de minutage (ce qui permet à un système de transporter,
contrôler et/ou changer l'information de minutage sans affecter le contenu des images).

Ces techniques, ainsi que plusieurs autres, aident H.264 à dépasser significativement les standards
précédents, dans une grande variété de circonstances et dans une grande variété d'environnements
d'application. H.264 peut fonctionner souvent nettement mieux que la vidéo MPEG-2 en obtenant la même
qualité avec un débit binaire diminué de moitié, voire plus.

72
73
Cas des signaux biomédicaux
Les organes et les tissus qui composent l’être humain génèrent des grandeurs physiques et/ou
chimiques, reflet de leur état fonctionnel: potentiels électriques, pressions, températures, gaz carbonique,
produits biochimiques plus ou moins complexes, etc. Le recueil, la mesure et l’analyse de ces grandeurs,
stables ou variables dans le temps, sont à la base de l’exploration et de la surveillance du fonctionnement
de ces organes et tissus. On utilise pour ce faire une chaîne de mesure dont la spécificité dépend de la
nature du capteur qui la compose et qui a pour objet de transformer la grandeur recueillie sur le patient,
selon les cas, par voie cutanée, endocavitaire ou percutanée, en une information le plus souvent
électrique, qui, après cheminement dans la chaîne de mesure, est transcrite sur papier, par l’intermédiaire
d’une imprimante ou d’une table traçante, ou sur écran vidéo. Ainsi, l’électrocardiographe,
l’électroencéphalographe, l’électromyographe permettent, grâce à des électrodes convenablement
disposées à la surface de l’organisme, d’étudier les potentiels électriques issus du cœur (E.C.G.), du
cerveau (E.E.G.) ou des muscles (E.M.G.). De même, un capteur de pression disposé à l’extrémité d’un
cathéter, introduit dans l’organisme par voie percutanée et relié à la chaîne de mesure externe, permet une
mesure de la pression sanguine à différents niveaux du système cardio-vasculaire. On peut également, par
voie endocavitaire, mesurer au moyen de capteurs appropriés une acidité, une concentration ionique, une
pression, etc.

On résumera ici les faits exposés déjà dans


l’article appareil CIRCULATOIRE. Si l’on
enregistre simultanément une courbe de
pression intraventriculaire gauche et
l’électrocardiogramme, on constate la
succession des phénomènes suivants:

– l’onde rapide Q.R.S.T. de


l’électrocardiogramme (50 ms)
précède tous les phénomènes mécaniques;

– pendant la contraction
isométrique ventriculaire (50 ms), la
pression intraventriculaire croît sans que la
pression aortique monte;

– pendant la période d’éjection ventriculaire (220 ms), les courbes ventriculaires et aortiques
coïncident: la pression aortique maximale peut être identifiée à la pression systolique ventriculaire;

– la pression aortique décrit un ressaut (l’incisure) à la fin de l’éjection ventriculaire: la fermeture


des sigmoïdes aortiques sépare les régimes de pression aortique et ventriculaire; là commence la diastole

74
cardiaque; la pression aortique décroît progressivement jusqu’à un minimum qui coïncide avec la fin de
la diastole cardiaque et pour cette raison est appelée pression diastolique.

À ces oscillations de premier ordre se superposent des oscillations de deuxième ordre en rapport
avec les mouvements respiratoires, et les oscillations dites de Traube-Hering qui surélèvent l’ensemble du
tracé à une fréquence beaucoup plus lente (W. D. Halliburton).

Modulation
Les signaux biomédicaux sont généralement compressés à partir de la technique PCM (pulse
code modulation) c’est la modulation par codage d’impulsion.

Modulation par impulsions


Le support du signal peut également consister en une suite d’impulsions, initialement périodiques, dont
on commande soit l’amplitude, soit la durée, soit la position, ou simplement la présence ou l’absence, ce
signal intermédiaire modulant à son tour l’onde porteuse à haute fréquence. Dans tous les cas, la
détection de ces impulsions par le récepteur doit permettre de restituer avec exactitude le signal initial.

Toutes les formes de modulation par impulsions transmettent le message de façon intermittente, aussi
doit-on lui donner cet aspect avant l’émission; l’« échantillonnage » substitue au signal de
modulation continue initial une suite de valeurs instantanées. ces impulsions sont modulées en
amplitude (IMA) en fonction du signal incident; la courbe enveloppe des impulsions suit la forme du
signal.

modulation par codage d’impulsions, qui repose sur le fait que des valeurs discontinues peuvent
traduire, aussi finement qu’on le désire, les variations continues d’une onde. Selon cette méthode, le
signal est encore échantillonné, mais les amplitudes des impulsions d’échantillonnage sont ensuite
quantifiées, et les nombres représentant le résultat de la quantification sont traduits en groupe
d’impulsions selon un code déterminé.

si l’on divise en 8 parties égales, par exemple, l’amplitude A maximale, crête à crête, que peut
atteindre le signal, on pourra le représenter en remplaçant, à des intervalles de temps égaux, son
amplitude par la valeur médiane du pas de quantification le plus proche. On aura ainsi échantillonné le
signal en fonction de 8 niveaux quantifiés. Or, la désignation de ces niveaux peut être codée: si on
choisit un code d’impulsions où chaque groupe de 3 cases est caractérisé par la présence (ou
l’absence) et par la position des impulsions, on forme un système binaire dont la capacité est de 2 3=8
valeurs. En représentant par 1 une impulsion et par 0 son absence, les compositions possibles
des groupes de trois impulsions sont en effet: 000, 001, 010, 011, 100, 101, 110, 111, expressions des
nombres 0 à 7 en système binaire qui peuvent caractériser les 8 niveaux quantifiés. Il suffit de
transmettre ensuite la représentation codée de la courbe, sous forme de groupes de 3 impulsions,
pour donner une image du signal continu initial. Mais on peut aisément, par un échantillonnage plus fin,
75
se rapprocher encore plus de la courbe exacte du signal à transmettre: par exemple, un code à 7
impulsions donnera un système de codage binaire comprenant 2 7=128 valeurs, qui permettent de
caractériser les variations du signal par 128 niveaux quantifiés, etc.

Démodulation d’une onde modulée par impulsions codées


La démodulation consiste donc, d’abord, à transcrire en système décimal les valeurs des amplitudes
transmises par code en système binaire. Pour ce faire, une horloge électronique, synchronisée par les
impulsions codées, repère la place de l’impulsion codée dans son groupe et l’aiguille vers un dispositif
qui peut, par exemple, libérer une charge d’électricité correspondant à la valeur (en système décimal) de
l’impulsion considérée. Ainsi, dans le cas d’un code à 16 niveaux quantifiés, représentés par 16 groupes
de 4 cases consécutives (où chaque case peut être occupée, ou non, par une impulsion, ce qui représente
24=16 possibilités), on dirige, dans chaque groupe, l’impulsion de la quatrième case (si elle existe) vers
un dispositif libérant une charge donnée Q, celle de la troisième case vers un dispositif libérant une
charge 2 Q, la deuxième une charge 4 Q, et la première une charge 8 Q. Pour chaque groupe de 4
cases consécutives, les charges sont accumulées, par exemple, dans un condensateur, de telle sorte que,
le groupe d’impulsions 0010 (nombre 2 en système binaire) libère une charge: 0 + 0 + 2 + 0, soit 2 Q, le
groupe 1001 (nombre 9 en système binaire) une charge de: 8 + 0 + 0 + 1 = 9 Q, et le groupe 1111
(nombre 15) une charge de: 8 + 4 + 2 + 1 = 15 Q. Il est facile de recueillir aux bornes du condensateur,
pour chaque groupe de 4 impulsions (présentes ou non), une tension proportionnelle à sa charge qui
traduit donc en système décimal le niveau codé de l’amplitude instantanée du signal. Cette tension peut
régler, par exemple, la valeur d’une impulsion unique déclenchée après l’arrivée de chaque groupe
d’impulsions codées. On aura ainsi transformé la modulation par codage d’impulsions en une
modulation d’impulsions en amplitude qu’on détecte comme il a été dit précédemment.

On retrouve bien l’avantage du procédé par codage dans lequel le bruit (à condition qu’il ne puisse être
pris pour une impulsion du code) ne peut introduire aucune distorsion du signal.

Compression des signaux biomédicaux


La compression du signal ECG est justifiée par la taille d’archivage pendant une longue durée de temps.
D’après l’association américaine du cœur (American Heart Association), le signal de l’ECG est
quantifié sur 10 bits avec un débit de 500 échantillons / seconde. D’autres utilisateurs exploitent une
quantification du signal sur 11 bits avec 1000 échantillons / seconde pendant 24 heures, ce qui nécessite
une capacité d’enregistrement de 110Mo. Or, dans certains hôpitaux, il y a un peu près 10 millions
d’ECG par an, ce qui implique qu’il devrait avoir 1000 disques dur de 1To pour l’emmagasinage. Ainsi,
la compression a donné la solution pour réduire les coûts d’investissement.

Plusieurs techniques de compression sont possibles principalement celles basées sur les S-plines et sur
les ondelettes. Pour connaître la meilleure technique, il faut maximiser le critère CR/PRD avec :

- CR : le taux de compression

76
nombre de bits dans ladonnée d ' origine
CR=
nombre de bits dans la donnée compressée

- PRD : le pourcentage de la différence moyenne quadratique (percentage root mean


difference)


∑ ( ORG ( i ) − REC ( i ) )2
i
PRD = 100 2
∑ ( ORG ( i ) )
i

77
La compression de l’information
médicale
I. L’imagerie médicale

L’image médicale peut être en couleur ou noir et blanc.

1) La radiologie et le scanner visualisent la valeur des numéros atomiques des atomes


constituant les différents tissus.

2) L’échographie visualise les différences d’impédance acoustique des tissus traversés.

3) L’IRM visualise les temps de relaxation des atomes d’hydrogène.

4) Le fond d’oeil se base sur une séquence d’images délivrée par un Scanning Laser
Ophtalmoscope à la suite de l’injection d’un produit de contraste.

5) L’angiographie digitalisée (ou numérisée) saisie de l’image vidéo sur un amplificateur de


brillance puis à soustraire certaines données obtenues radiologiquement telles que des
structures osseuses ou viscérales susceptibles de parasiter la visualisation des clichés de
l’artère ou de la veine à étudier.

II. Les techniques de compression des images médicales

Les techniques de compression utilisées dans les images médicales :

1) Jpeg 2000 (à base de la transformé d’ondelettes discrète) pour les


images DICOM 3.0 mais avec des taux de compression ne dépassant pas
3 :1 pour qu’il n’y ait pas de pertes d’information et de détail dans
l’image.

2) Le standard H264, qui est à l’origine le MPEG4, pour toute les vidéo.

3) D’autres techniques de compression sont utilisées pour les images telles


que la méthode SPIHT

III. Evaluation des pertes dues à la compression

Les distorsions dues à la compression sont mesurées par l’erreur quadratique


moyenne entre l’image d’origine et l’image compressée.

l’image d’origine I(m,n), le pixel (m,n), l’image reconstruite Î(m,n)


78
On référence cette erreur par rapport à la dynamique de l’image en décibels.
On obtient un rapport signal sur bruit crête pour une image dont le maximum
est (2R-1) dénoté PSNR (peak SNR). Si le minimum de l’image est nul (image
bien cadrée) on obtient le rapport signal sur bruit crête à crête noté PPSNR
(peak to peak SNR).

Lorsque la reconstruction est parfaite, la MSE est nulle et le PPSNR tend vers
l’infini.

Cas des signaux

Plusieurs techniques de compression sont possibles principalement celles basées sur les S-plines et sur
les ondelettes. Pour connaître la meilleure technique, il faut maximiser le critère CR/PRD avec :

- CR : le taux de compression
nombre de bits dans ladonnée d ' origine
CR=
nombre de bits dans la donnée compressée

- PRD : le pourcentage de la différence moyenne quadratique


∑ ( ORG ( i ) − REC ( i ) )2
i
PRD = 100 2
∑ ( ORG ( i ) )
i

79