Académique Documents
Professionnel Documents
Culture Documents
Si une donnée d apparaît n fois consécutivement dans le flux d’entrée, remplacer les n occurrences par la
paire “n d”.
Soit une chaîne de caractère de taille N à compresser. Supposons que cette chaîne contienne M répétions de
longueur moyenne L d’un caractère. Quel est le quotient de compression si cette chaîne est compressée selon
l’algorithme RLE ?
Chacune des M répétitions est remplacée par 2 caractères
Donc la taille de la chaîne compressée est N-ML+2M
1 1 1 1 a3 5 1 47
2 2 2 2 b 2
f5 e7 e7 0 0 0 0 0
0 0 9 c1 c1 c1 0 0
9
8 9 6 d 0 0 0 0 • Méthodes statistiques
2 b 7
L’information propre apportée par un événement x, notée h(x), est d’autant plus faible que sa probabilité p(x)
est élevée, et vaut
h(x) = −log2(p(x))
On appelle entropie moyenne de la source X la quantité H(X) définie par :
Cette entropie représente le nombre moyen d’éléments nécessaires à la codification des différentes
réalisations de X.
Exemple : Considérons un jeu de 32 cartes. On extrait une carte au hasard.
Quelle est l’incertitude liée à l’événement x={la carte extraite est un roi de
coeur} ?
h(x) = −log2(p(x)) = log2(32) = 5bits
En effet, chaque carte peut donc être décrite à l’aide de 5 digits binaires.
Le contenu de cette source sera compressible, sans perte d’information, si son entropie n’est pas
maximale. On dit alors que cette source possède de la redondance,
Redondance = 1−H(S)/Hmax
Mais peut-on diminuer L autant que souhaité ? NON ! Le théorème fondamental du codage de source précise
qu’on a : L >= H(S)/log2(q)
Ce qui, dans le cas d’un alphabet de codage binaire, se réduit en : L>= H(S)
L’efficacité du code,
• Codage de Huffman
2
Le code adaptatif de Huffman
Idée : construction de l’arbre au fur et à mesure de la lecture, avec estimation en ligne des probabilités
d’apparition des symboles de la source. L’arbre est donc modifié en ligne en fonction de cette estimation.
Problème : A aucun moment l’arbre ne lui est transmis. Le décodeur doit donc reconstruire de son côté
l’arbre au fur et à mesure de la lecture des mots de code. On dit alors que l’encodeur et le décodeur sont
synchronisés.
• Codage arithmétique
Idée : représenter non plus chaque symbole par un mot de code, mais plutôt l’ensemble du fichier par un
unique (long) code
Soit 3 symboles a1, a2 et a3, avec p(a1)=0.4, p(a2)=0.5 et p(a3)=0.1
Soit à coder la séquence a2 a2 a2 a3.
1/ Considérer l’intervalle [0;1[, divisé selon les p(ai)
Conclusion : la séquence a2 a2 a2 a3 peut être représentée par n’importe quel nombre dans l’intervalle
[0.8125; 0.8250[, par exemple 0.8150
Mais : à chaque nouveau symbole, l’intervalle à considérer devient de plus en plus petit, et il faut de plus en
plus de bits pour le représenter
Décodage : soit à décoder le nombre 0.8150
- 0.8150 appartient à l’intervalle [0.4;0.9[ : on décode donc a2
- on calcule (0.8150 - borne_min)/larg_interval = (0.8150-0.4)/0.5 = 0.83
- 0.83 appartient à l’intervalle [0.4;0.9[ : on décode donc a2
- on calcule (0.83 - 0.4)/0.5 = 0.86
- 0.86 appartient à l’intervalle [0.4;0.9[ : on décode donc a2
- on calcule (0.86 - 0.4)/0.5 = 0.92
- 0.92 appartient à l’intervalle [0.9;1[ : on décode donc a3
Implémentation pratique :
On stocke les bornes minimales et maximales des intervalles considérés au fur et à mesure du codage ... mais
ces bornes n’ont pas une précision infinie ! De la même façon, le décodage implique des soustractions et
divisions sur un nombre pouvant être codé sur un nombre extrêmement important de digits.
Solution : on utilise une représentation entière de ces bornes, codées le plus souvent sur 16 ou 32 digits.
Ainsi , d’une manière générale, le codage arithmétique est plus efficace (au sens théorie de
l’information) que le codage de Huffman.
3
• Méthodes par dictionnaire
L’idée principale est de remplacer le symbole à coder par son index (numéro) et représentant dans un
dictionnaire. e dictionnaire peut être statique et connu à l’avance, ou au contraire dynamique, construit au
fur à et à mesure de la compression. Le contenu de ce dictionnaire conditionne complètement les
performances de la compression.
Un premier exemple simple
Méthode de compression en 2 passes :
- 1ère passe : lecture octet par octet de l’intégralité du fichier à compresser, et construction d’une liste
contenant l’ensemble des octets présents (ex :niveaux de gris) ainsi que leur fréquence d’apparition.
- Classement de la liste par ordre décroissant des fréquences. Cette liste classée devient le dictionnaire. Elle
est écrite dans la sortie du compresseur.
- 2nde passe : relecture du fichier pour en effectuer la compression. Chaque octet est remplacé par son index
dans la liste, codé selon 1 à 8 bits, précédé de 3 bits indiquant la taille de cette index
Dictionnaire :
code ndg 0000000100111 010 111000100110
“0” 132 Longueur de l’index = 3
“1” 177
“11” 72 0000000100111 010 111 000100110
“10” 35 Code index = 111
Image = 59
“111” 59
Afin d’éviter d’avoir à effectuer 2 passes (ce qui peut être très long), l’idée est d’utiliser un dictionnaire qui
se construit au fur et à mesure, basé sur les symboles apparus précédemment dans le flux.
Principe du LZ77:
Soit la chaîne de caractère suivante à compresser “ceci cela ou cette idée”. Cette chaîne de caractère va
passer dans une fenêtre glissante, constituée d’un buffer de recherche et d’un buffer de lecture.
Imaginons que nous en soyons à coder “ cette idée”. Le compresseur va regarder lettre par lettre si une
occurrence du ou des caractères à coder a déjà été traité. C’est le cas ici, puisque le chaîne “ ce” apparaît
dans le buffer de recherche, 8 caractères en amont. Le compresseur remplace donc le “ ce” par le pointeur
(8,2,”t”), indiquant que la chaîne codée est analogue à celle se trouvant 8 caractère en amont et qu’elle est
d’une longueur de 2 caractères. Cette chaîne est ensuite suivie de la lettre “t”.
4
Les pointeurs sont donc de la forme (offset, longueur, “caractère”)
- Le champ offset est constitué typiquement de 10 à 12 bits,
- Le champ longueur est constitué de quelques bits,
- Le champ “caractère” est typiquement constitué de 8 bits.
Ainsi, un pointeur occupe typiquement une place d’environ 24 bits = 3 octets. La méthode suppose
implicitement que des motifs réguliers proches les un des autres (principe du buffer) apparaissent dans le
flux d’entré. Si c’est effectivement le cas, l’algorithme L77 présente de fort taux ce compression
(typiquement autour de 50%).
LZ78 :
Cette fois, il n’y a plus aucun buffer ni fenêtre glissante, mais seulement un dictionnaire construit au fur et à
mesure de la lecture. Le compresseur sort un pointeur constitué d’un index du dictionnaire et d’un
caractère : (index, ‘“r”).
Principe :
Chaque caractère est lu et comparé aux différentes entrées du dictionnaire. Si le caractère testé a déjà été
rencontré, alors le caractère suivant est concaténé au premier. La chaîne ainsi formée est à son tour
confrontée aux différentes entrées du dictionnaire.
Exemple : ceci cela ou cette idée
Au démarrage, le dictionnaire est vide
Inde Chaîne Inde Chaîn
x x e
0 null 0 null
1 “c”
2 “e” ceci cela ou cette idée = (0,”e”)
ceci cela ou cette idée = (1,”i”)
3 “ci”
ceci_cela ou cette idée = (0,” ”)
4 ““
ceci cela ou cette idée = (1,”e”)
5 “ce” ceci cela ou cette idée = (0,”l”)
6 “l” ceci cela ou cette idée = (0,”a”)
7 “a” ceci cela_ou cette idée = (4,”o”)
8 “ o” ceci cela ou cette idée = (0,”u”)
9 “u” ceci cela ou_cette idée = (4,”c”)
10 “ c” ceci cela ou_cette idée = (2,”t”)
11 “et”
Bilan
La compression RLE peut être utilisée pour de la compression sans ou avec perte. C’est une technique
simple utilisée par certaines parties du JPEG. En générale, cette méthode marche bien pour des images
binaires
Les méthodes statistiques donnent de bons résultats lorsque les symboles à compresser possèdent
différentes probabilités d’apparition.
o pas adapté aux images avec de lentes variations de couleur
o adapté aux images possédant des discontinuités de couleur ...difficile à prévoir en voyant l’image
Les méthodes par dictionnaire donnent de bons résultats si l’image présente des motifs répétitifs. Et
la qualité de la compression dépend énormément de la façon dont l’image est lue.
5
Techniques destructives
Principe fondamental :
Etant donné un pixel, il y a de forte chance que ses voisins possèdent la même couleur, ou du moins une
couleur similaire
Les techniques de compression que nous allons voir sont donc basés sur le fait que les niveaux de gris de
pixels voisins sont fortement corrélés. On parle alors de redondance spatiale. Exemple :
Ici, seulement 2 pixels sont identiques. La valeur moyenne des NdG est de 40.3.
Une autres grandeur est traditionnellement utilisée dans la littérature : le rapport sur bruit maximum, ou peak
signal to noise ratio, noté PSNR [dB], avec
1. Sous échantillonnage : on ignore simplement certains pixels. Les effets sur l’image sont très visibles
(grande perte de détails) : cette méthode simple n’est que très peu utilisée.
2. Sous échantillonnage des couleurs : notre oeil est moins sensible aux variations de chrominance que de
luminance. Les deux chrominances sont sous-échantillonnées d’un facteur 2, conduisant à une réduction
de 50% de la taille du fichier
3. Quantification scalaire : on supprime simplement les bits les moins significatifs du codage.
4. Quantification vectorielle : l’image est partitionnée en blocs de tailles fixe (appelés vecteurs). Le
codeur dispose d’une liste de vecteurs prédéfinis (dictionnaire de vecteur), et c’est l’index du vecteur qui
est inscrit dans le fichier compressé.
Transformations orthogonales
Principe :
Ces transformations sont conçues pour posséder 2 propriétés :
- réduire la redondance de l’image,
- identifier les parties les moins importantes de l’image à compresser
6
Ces parties sont le plus souvent identifiées en travaillant sur les différentes fréquences (spatiales) constituant
l’image. Pourquoi ? Les basses fréquences correspondent aux éléments importants d’une image, tandis que
les hautes fréquences décrivent les détails d’une image.
De plus, notre oeil n’est pas sensible aux variations rapides de contraste dans une image.
Ou encore, C = WD, où D est la matrice contenant les pixels de l’image d’origine, et C celle contenant les
coefficients de la transformée. La nature de la transformation est donc entièrement définie à partir de la
matrice W ou des coefficients qui la compose.
Exemple
Valeur dominante, contenant presque
toute l’énergie de D :
Réduction de la redondance
Transformée de Walsh-Hadamard
Transformée de Karhunen-Loève
7
Aussi appelée transformée de Hotelling, ou transformée en vecteurs propres, elle est utilisée pour l’analyse
en composantes principales.
Elle est théoriquement la transformée qui possède la meilleur efficacité en terme de concentration de
l’énergie, mais reste peu utilisée en pratique puisqu’elle est très lourde en temps de calcul.
Elle donne la plus grande distribution de variance sur les axes.
Ainsi, cette transformation dépend de l’image ! De plus, la matrice A doit être incluse dans le fichier de
l’image compressé, et aucune méthode rapide de calcul de A n’a encore été découverte. En conséquence, elle
est très peu utilisée.
Transformée en cosinus
C’est la transformation de très loin la plus utilisée en compression.
Transformation directe (1D) :
... mais ces définitions ne sont en pratique pas utilisées pour les calculs !
Cette transformation tends à concentrer de manière importante dans les premiers coefficients Ck toute
l’information. Ces premiers coefficients représentent les informations importantes de l’image, et sont liées
aux basses fréquences des cosinus de la transformation.
Les autres coefficients sont nuls ou quasi-nuls, et correspondent à des plus hautes fréquences des cosinus.
Exemple :
p = (12, 10, 8, 10, 12, 10, 8, 11) C = (28.6, 0.6, 0.5, 1.8, 3.2, -1.7, 0.2, -0.3)
C’ = (28, 0, 0, 2, 3, -2, 0, 0) p’ = (11.2, 9.6, 7.7, 9.6, 12.3, 10, 8.1, 10.7)
soit au maximum une erreur de 6% seulement !
Dans le cas précédent, les données étaient fortement corrélées (p = (12, 10, 8,
10, 12, 10, 8, 11)). Et si ce n’est pas le cas ?
soit une erreur au maximum de 88% !
8
En pratique, une valeur de n=8 est un bon compromis, et la plupart des algorithmes de compression utilisent
une telle valeur.
Transformée en cosinus 2D
Transformation directe :
Transformation inverse :
Méthode de compression :
1/ Partitionner l’image à compresser en blocs carrés de 8x8 pixels. Si les dimensions ne sont pas multiples de
8, périodiser les derniers blocs.
2/ Calculer la transformée en cosinus de chacun des blocs
Rem : aucune information n’a encore été perdue !
3/ Arrondir (quantifier) les transformées de chacun des blocs. La destruction de l’information a lieu à ce
stade. Plus l’arrondi sera important (concrètement, cela revient à arrondir à 0 plus de coefficients), plus la
destruction sera perceptible.
La transformée en cosinus est bien mieux adaptée aux images à “tons continus” qu’aux images à “tons
discrets”
Il existe 4 formes de transformée en cosinus, appelées DCT-I, DCT-II, DCT-III et DCT-IV, et définies par :
9
Implémentation pratique :
1/ Quelle que soit la taille de l’image, il n’y a que 32 cosinus impliqués dans le calcul de la TCD 2D. Ceux-ci
peuvent être précalculés de façon à améliorer le temps de calcul.
2/ La double somme précédente peut s’exprimer sous la forme matricielle où P est la matrice 8x8 des pixels,
et les éléments de C s’expriment sous la forme :
Ainsi, sous la forme matricielle précédente, où chacune des matrices est de dimension 8x8, il faut :
- 64x8 = 8^3 multiplications pour calculer CP
- et donc il faut 2x8^3 multiplications pour déterminer CPCT
Si l’image est carrée, de dimension nxn, avec n = 8q (n = multiple de 8), il y a donc qxq blocs de 8x8
constituant l’image. Au final, sous la forme matricielle, il faut 2q283 multiplications par coefficients de la
DCT (et autant d’additions).
En comparaison, le calcul de la DCT sur l’image au complet nécessiterait 2n^3 opérations (2n3=q(2q283) ).
Ainsi, le calcul matriciel a divisé par q le nombre d’opérations à effectuer !
Cependant, le calcul de la DCT sous forme matricielle d’une image 512x512 couleur nécessite encore
environ 12 582 912 multiplications !
Considérons le cas 1D, avec P = (100, 100, 100, 100, 100, 100, 100, 100)
- La TC donne (282.8, 0, 0, 0, 0, 0, 0, 0)
- La TS donne (0, 256.3, 0, 90, 0, 60.1, 0, 51)
10
Et pourquoi pas une transformée de Fourier ?
Sauf cas particulier, la TF d’un signal (1D ou 2D) réel est un
nombre complexe.
De plus :
Le JPEG :
4. La transformée en cosinus discrète de chacun des blocs est ensuite calculée de façon à obtenir une
image 8x8 des composantes fréquentielles des blocs. Jusqu’à présent, il y a eu des pertes, mais elles sont
très limitées : souséchantillonnage des chrominance et limites de précision des calculs des DCT !
5. Chacun des 64 coefficients obtenus précédemment est divisé par une entier Q(i,j) appelé coefficient
de quantification, dont la valeur varie selon la fréquence considérée. La valeur obtenue est ensuite
arrondie. Cette table de coefficients peut être définie par l’utilisateur, mais les standards du JPEG
recommandent 2 tables pour les luminance et chrominance.
C’est ici que la compression a lieu ! Ces coefficients, selon leur importance, vont définir la qualité de
cette compression.
6. Les 64 coefficients quantifiés, qui sont maintenant des entiers, sont codés en utilisant une
combinaison de RLE et de codage de Huffman. Il existe une variante utilisant un codage arithmétique à
la place de Huffman.
7. Enfin, la dernière étape consiste à écrire dans le fichier les paramètres utilisés pour la compression
(en-tête) et les données compressées.
11
1/ Transformation Luminance / Chrominance
Cette transformation a été normalisée par le CIE qui a défini la CIE-luminance, ou simplement luminance
comme une grandeur proportionnelle à la puissance de la source de lumière.
En pratique (compte tenu de la plus grande sensibilité de notre oeil à la luminance) partant du plan RGB de
représentation des couleurs, il est préférable de travailler dans le plan Y, G-Y, B-Y, ou YCbCr, ou YUV avec :
Y = 0,299 x R + 0,587 x V + 0,114 x B
U = 0,492 (B - Y) = !0,147 R - 0,289 G + 0,436!B
V = 0,877 (R - Y) = 0,615 R - 0,515 G - 0,100!B
4/ Transformée en cosinus
Elle s’effectue sur des blocs de 8 pixels de l’image. Si les dimensions ne sont pas multiples de 8, les bords de
l’image sont répétés autant de fois que nécessaire.
Il est également possible de définir sa propre table de quantification, par exemple avec :
Q(i, j) = 1 + (i + j)R
12
Compression des coefficients /6
Tout d’abord, les 64 coefficients
sont collectés en lisant les matrices
8x8 en zigzag. Ensuite, la méthode
JPEG s’intéresse au codage de la
composante continue. L’idée est la
suivante : trois blocs successifs
possèdent vraisemblablement des
niveaux de gris très proches. L’idée
est de venir coder les différences
des moyennes plutôt que les
niveaux eux-mêmes.
Chacune des valeurs continues (ou leur différence) est codée selon le code de Huffman représenté dans le
tableau suivant :
Ensuite, le compresseur s’intéresse aux 63 valeurs “haute fréquence”, en utilisant une combinaison des
algorithme RLE et Huffman. Là encore, 2 tableaux normalisés sont introduits et permettent de déterminer,
par simple lecture successive, le code à écrire. Le premier d’entre eux est le même que précédemment. Le
second est donné par :
13
Soit par exemple la séquence 1118, 2, 0, -2, 0 (13 fois), -1, 0 ...
L’encodeur s’intéresse au nombre Z de zéros précédent une valeur x non nulle :
- trouver x dans le 1er tableau, et mémoriser son emplacement (R,C)
- la paire (R,Z) est utilisée comme (ligne, colonne) pour le second tableau
- enfin, le code de Huffman trouvé dans ce tableau est concaténé à C
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ...
Le premier coefficient x=2 se situe sur la ligne R = 2 et C=2, et il y a Z=0 zéros avant.
On s’intéresse donc au code situé en (R=2,Z=0) du second tableau : 01
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ... On code : 01 | 10
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ...
Le second coefficient x=-2 se situe sur la ligne R = 2 et C=1, et il y a Z=1 zéros avant.
On s’intéresse donc au code situé en (R=2,Z=1) du second tableau : 11011
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ... On code : 11011 | 01
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ...
Le coefficient x=-1 se situe maintenant sur la ligne R = 1 et C=0, et il y a Z=13 zéros avant.
On s’intéresse donc au code situé en ( R = 1 , Z = 1 3 ) du second tableau:1110101
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ... On code : 1110101 | 0
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ...
Enfin, la séquence de 0 se code simplement 1010 (du second tableau)
Au final, la séquence :
1118 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 ... Se code :
11111111111101110100010 01101101110111010101010
Ces 46 bits codent une seule composante couleur d’un bloc 8x8. Imaginons que les autres plans couleur
soient également codés avec un mot de 46 bits.
Dans ce cas, la compression est de : (64*3*8)/(46*3) = 11.13 !
En fait, le taux est même meilleur puisque les composantes continues (qui occupent ici 23 des 46 bits) des
autres blocs sont codées à partir des différences !
Des variantes du JPEG utilisent plutôt du codage arithmétique adaptatif, appelé codeur QM, qui ne nécessite
donc pas les tableaux 1 et 2. En pratique, le gain obtenu est autour de 5 à 10%. Mais son utilisation reste rare.
14
Transformées en ondelettes
Une telle base n’est visiblement pas la plus optimale ! Le vecteur x étant constituée de composantes toutes
égales, on peut écrire directement que :
Seulement, la base n’est pas encore complète, il nous manque 3 vecteurs, qui
devront être orthogonaux :
En principe, les vecteurs de base sont normalisés, de sorte qu’on ait au final :
Ce choix de vecteurs définit la Transformée de Haar 1D qui est une des transformées en ondelettes les plus
faciles à implémenter. De cette façon, le vecteur x=(4,2,5,5) s’exprime de manière équivalente par les
coefficients (8, -2, 2/sqrt(2), 0). La 4ème composante étant nulle, seuls les 3 premiers vecteurs sont
nécessaire pour décrire x. Pour ce vecteur, nous pouvons choisir dynamiquement de ne travailler qu’avec
v1, v2 et v3.
En fait, nous pouvons même travailler avec une base de dimension inférieure, et ne considérer que les
vecteurs : w1=(1/sqrt(2), 1/sqrt(2)) et w2=(1/sqrt(2),-1/sqrt(2)).
15
La transformée en ondelettes continue consiste à créer, à partir d’une fonction mère Ψ (l’ondelette) une
famille d’ondelettes Ψ(ax + b), où a et b sont des nombres réels ; a sert à dilater la fonction Ψ, et b sert à la
translater.
La version discrète de cette transformation ne considère que des dilatations et translations discrètes de
l’ondelette. Traditionnellement, le facteur de dilatation est alors choisi comme une puissance de 2.
La séquence obtenue (36/8, -16/8, -4/4, -4/4, -1/2, -1/2, -1/2, -1/2) fait apparaître le principe d’analyse
multirésolution, celles-ci étant successivement de 4, 2 et 1.
La transformée de Haar (vue précédemment) est obtenue en normalisant chacune de ces valeurs par la racine
carrée de leur résolution.
16
17
Transformée de Haar :
Le JPEG-2000 existe en mode avec ou sans pertes, et
exploitent les transformées en ondelettes vues
précédemment.
Compression de Videos
Soit une vidéo de résolution 720x576 (format PAL), dont chaque pixel est codé sur 24 bits, possédant une
cadence de 25 images par seconde. Le débit brut nécessaire pour l’écriture (et la lecture) du fichier est de :
720x576x24x25 = 237 Mbits/s
Pour une vidéo haute définition (HDTV), de résolution 1920x1080 : 1920x1080x24x25 = 1.15 Gbits/s !!!
• 1ère idée : on compresse de manière indépendante chacune des images constituant le flux vidéo. C’est le
format MJPEG (Motion JPEG), qui est parfois utilisé lorsqu’on a besoin de pouvoir accéder de manière
aléatoire à chacune des images (montage vidéo). On utilise donc ici uniquement la redondance spatiale de
l’information.
• 2nde idée : deux images qui se suivent dans une séquence vidéo sont quasiment identiques. On parle alors
de redondance temporelle. Le but alors est de ne stocker uniquement ce qui est modifié d’une image à une
autre.
Aujourd’hui, une séquence vidéo ne se compose pas uniquement d’une succession d’image, mais inclue très
souvent également du son. Lors de la compression, il y a donc deux flux à gérer.
Les normes de compression qui seront présentées dans la suite sont donc constituée de 3 parties:
- une partie vidéo, que nous allons détailler,
- une partie son, qui n’est pas l’objet de ce cours,
- une partie système qui gère l’intégration des deux premiers flux.
•1989 : première méthode de compression / décompression (codec). Cette méthode fût popularisée par Sony
qui l’utilisa dans sa première Playstation comme moteur de décompression de données.
•1990 : le groupe MPEG (Motion Picture Experts Group) standardise le premier système numérique de
qualité VHS, le MPEG1.
•1994 : le groupe MPEG définit la norme de seconde génération MPEG-2. Cette norme est aujourd’hui la
plus utilisée, depuis les DVD Vidéo jusqu’à la télévision Haute Définition (HDTV)
•1998 : le standard MPEG-4 (aussi appelé H.264) fait son apparition. Il est aujourd’hui utilisé dans le format
Blu-Ray Disc, ou prochainement exploité pour la TNT HD.
Les données vidéo : dans le flux vidéo, les données sont hiérarchisées d’une manière bien précise. Tout
d’abord, en terme de représentation des couleurs.
18
Ensuite, le découpage des images à traiter.
Un macrobloc couvre 16 x 16 pixels dans
l’espace de luminance, et 8x8 pixels dans
l’espace de chrominance.
Les images P : ces images sont codées par rapport à l’image précédente. Elles ne codent donc que la
différence bloc par bloc de l’image précédente. Pour maximiser le taux de compression, on cherche donc
dans l’image précédente un macrobloc identique ou semblable.
En conséquence, les images P peuvent être vues comme une mosaïque :
- de blocs composés d’un vecteur (pour indiquer ou se situait le bloc dans l’image précédente)
- et de blocs complets correspondant aux zones inexistantes dans l’image précédente
Trouver le vecteur de déplacement d’un bloc d’une image à l’autre est appelé compensation de mouvement.
19
Codage temporel de l’information
Compensation de mouvement : la norme MPEG ne spécifie pas comment faire la recherche de blocs
similaires entre 2 image, ni où la faire dans l’image, ni le seuil de ressemblance à atteindre. Il existe
différentes méthodes de recherche traditionnellement utilisées :
- similitude de blocs (block matching),
La recherche de blocs semblables n’est lancée que si les 2
blocs dans les 2 images à la même position sont suffisamment
différents.
Les blocs semblables sont recherchés dans un voisinage, et
seulement sur la luminance
Prédiction de l’erreur : les mouvement dans l’image sont souvent plus complexes que de simples
translations. Ainsi, la prédiction obtenue par compensation de mouvement n’est pas suffisante. De ce fait, on
code également l’erreur de prédiction.
20
Les images B : imaginons une séquence ou un personnage
ouvre une porte. Le codeur n’a aucun moyen de prévoir ce
qui sera derrière cette porte ! Il est donc nécessaire de
construire des images “de type P” en se basant sur les images
futur. La recherche d’un correspondant se fait donc soit sur
l’image précédente, soit sur l’image suivante. Les images de
type B peuvent se référer à une image de type I ou P, mais
jamais à une autre image B.
Cette figure
montre
également que
les places
respectives
occupées par les
images de type I,
P ou B.
Comparaison
des normes
MPEG-1 :
principe décrit précédemment, avec une résolution de 320x240, avec un maximum de 30 images/s, les
images devant être en mode progressif (format plein), couleurs en 4:2:0. La partie audio est codé en MPEG-1
Audio Layer I, II ou III (MP3 pour ce dernier).
MPEG-4 : cette norme ajoute un aspect multimédia interactif et se veut plus générique qu’une simple
méthode de compression vidéo. Elle définit des
objets audiovisuels.
21
Global Motion Compensation (GMC) : l’objectif ici est de chercher un effect global dans la vidéo
translations, changement de perspective, rotations, etc.). La GMC permet de définit des points d’ancrage liés
au mouvement de l’image.
Quantification adaptative : la table de quantification est adaptée à
chaque bloc à traiter
4MV : pour le MPEG-4, les macroblocs 16x16 sont subdivisés en 4
blocs 8x8, chacun possédant son propre vecteur de compensation.
22