Compression d’images
ENSEA 3ième année SyM / Master SIC
David Picard
ETIS / ENSEA - Université de Cergy-Pontoise - CNRS UMR 8051 F-95000 Cergy-Pontoise Cedex, France
2011
Format d’image brut
16 11 10 16 24 40 12 12 14 19 26 58 14 13 16 24 40 57 14 17 22 29 51 87 18 22 37 56 68 109 24 35 55 64 81 104
Matrice de pixels 3 types d’images
Image noir et blanc⇒1bit par pixel (peu commun)
Image niveau de gris⇒8 bits par pixel (ou 12, 16, peu commun) Image Couleur⇒NbChanelsx8bits par pixel (souvent 3 cannaux -
Quantité d’information
Taille utilisée pour stocker l’image
Cas d’une image niveau de gris de taille MxN : M×N×8 bits utilisés
Taille de l’information contenue
En fait, l’image concerne un scan de document texte (beaucoup de blanc, quelques lignes noires ) :
Probabilité de blanc :P(0) =0.8 Probabilité de noir :P(1) =0.2
Entropie de Shannon :−(0.8∗log2(0.8) +0.2∗log2(0.2)) =0.7 Taille nécéssaire : 0.7×M×N bits
Rappel : Entropie de Shannon=Mesure de la quantité d’information
Système de communication de Shannon
Comment transmettre efficacement l’info ?⇒codage de source Comment transmettre robustement l’info ?⇒codage de cannal Cas de la compression d’images
Codage de source : réduire le nombre de bits utilisés pour transmettre l’image
Transformation :
De la source vers un signal plus compact : compression (ou encodage)
Du signal plus compact vers la destination : décompression (ou décodage)
Deux grands principes des algo de compression d’image :
1 Réduire la redondance des données (réduire la quantité d’info en choisissant mieux les symboles)
2 Produire une image reconstruite avec une erreur insignifiante par rapport à l’originale (approximer par un signal plus compact)
⇒Possibilité de combiner les deux !
Quantification scalaire
Découpage de l’amplitude du signal en un nombre fini de valeurs possibles :
Dans le cas d’une image :
Chaque bande est découpé en N valeurs possibles
Le pixels prends la valeur la plus proche sur chaque bande
⇒Réduit le nombre de couleurs présentes dans l’image à
Quantification adaptative/vectorielle
Découpage adaptatif de l’espace couleur en une palette de taille fixe (utilisation d’un algorithme de clustering)
Tramage - Dithering
Bruit ajouté volontairement afin de répartir les erreurs de quantification.
Exemple : Floyd-Steinberg
Diffusion de l’erreur de quantification au voisinage du pixel :
0 0 0
0 0 7
3 5 1
Codage entropique - Run Length Coding
Principe : Dénombrer les symboles identiques qui se suivent.
Exemple : lignes de pixels blancs ou noirs
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWW WWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
⇒67 symboles Résultat
12W1B12W3B24W1B14W
⇒18 symboles
Particulièrement efficace dans le cas de longue répétition de symboles (régions uniformes en couleur de l’image)
Codage entropique - LZW
Principe : Dictionnaire à la volée (déductible au décodage) Exemple : ABABCABC
In Mem Out Dico
A - - -
B A A AB = [256]
A B B BA = [257]
B A - -
C AB [256] ABC = [258]
A C C CA = [259]
B A - -
C AB - -
- ABC [258] -
Résultat : AB[256]C[258] = 5×9 bits au lieu de 8×8 bits
Graphics Interchange Format - GIF
Caractéristiques
8 bits par pixels⇒256 couleurs dans l’image Pixels compressées par LZW⇒pas de perte
Le dictionnaire est déduit de l’image, si elle contient plus de 256 couleurs il faut la quantifier⇒pertes possible en prétraitement Améliorations :
Possibilité de coder des animations : suite d’images de palettes différentes
Possibilité de coder des images en vraies couleurs en animation (autant d’images que de palettes de 256 couleurs nécéssaires)
Compression avec pertes
Idée : construire une image visuellement proche de l’original, mais plus compacte.
Image “proche” 100 fois plus petite...
Proche ? → Mesures d’erreur
Mean Square Error (MSE) : MSE = 1
m n
m−1
X
i=0 n−1
X
j=0
[I(i,j)−K(i,j)]2 (1) Moyenne des carrés des erreurs entre original et copie.
Peak Signal to Noise Ratio (PSNR) :
PSNR =10·log10 MAX2I MSE
!
(2) Rapport entre l’intensité max et l’erreur moyenne.
Principe de la compression avec pertes
Schéma le plus courant :
1 Trouver une transformation qui sépare l’information visuellement importante de l’information non perçue.
2 Appliquer une quantification pour supprimer les détails peu perçus.
3 Appliquer une codage entropique sur le signal quantifié (efficace car beaucoup de zéros à l’issue de la quantification).
Exemple naïf
FFT + suppression des hautes fréquences (filtre passe bas)
0
100
200
300
400
500
0 100 200 300 400 500
0
100
200
300
400
500
0 100 200 300 400 500
Image lena FFT
Exemple naïf
FFT + suppression des hautes fréquences (contours)
0
100
200
300
400
500
0 100 200 300 400 500
0
100
200
300
400
500
0 100 200 300 400 500
Image lena FFT filtrée
Exemple naïf
FFT + suppression des hautes fréquences (contours)
0
100
200
300
400
500
0 100 200 300 400 500
0
100
200
300
400
500
0 100 200 300 400 500
Image lena iFFT de lena filtrée
Exemple naïf
Erreur entre l’original et la version compressée :
0
100
200
300
400
500
0 100 200 300 400 500
Exemple naïf
Bilan de compression :
0
100
200
300
400
500
0 100 200 300 400 500
0
100
200
300
400
500
0 100 200 300 400 500
512×512×8bits=262ko 192×256×8bits+nb_zeros≈75ko
Format JPEG
Objectifs (1991) :
Atteindre un taux de compression proche de l’état de l’art et une qualité d’image excellente.
Être capable de compresser n’importe quelle image couleur, en niveaux de gris, de n’importe quelle taille.
Avoir une complexité qui autorise des implantations software sur des machines courantes, et hardware à bas coûts.
Schéma général
Séparation en blocs
Encodage de la séquence des sous-imagettes 8×8 pixels.
Transformée en cosinus discrète - DCT
Fonction direct (FDCT pour Forward DCT) : Fu,v =
7
X
x=0 7
X
y=0
α(u)α(v)fx,ycos π
8
x +1 2
u
cos
π 8
y +1
2
v
Avecu la fréquence horizontale,v la fréquence verticale et un facteur de normeα(u) =
q1
8, siu=0 q2
8, sinon Fonction inverse (IDCT) :
fx,y =
7
X
u=0 7
X
v=0
α(u)α(v)Fu,vcos π
8
x+1 2
u
cos
π 8
y +1
2
v
DCT - Exemple
Image lena :
0
100
200
300
400
500
0 100 200 300 400 500
50
100
150
200
250
50 100 150 200 250
Originale Transformée
DCT - Exemple
Imagette 8×8 de lena :
1
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8
Originale Transformée
Quantification scalaire
Idée : Allouer plus de bits pour les basses fréquences et moins de bits pour les hautes fréquences.
Q=
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99
Matrices de quantification issues d’expériences psycho-visuelles.
(Mise à zéro d’un grand nombre de coefficients non visibles)
Exemple sur l’image globale
Quantification de l’image globale :
50
100
150
200
250
50 100 150 200 250
50
100
150
200
250
50 100 150 200 250
50
100
150
200
250
50 100 150 200 250
50
100
150
200
250
50 100 150 200 250
Codage entropique 1 : RLC
Parcours de chaque bloc 8x8 en zig-zag :
Optimise le nombre de zéros (hautes fréquences) rencontrés⇒Run Length Coding efficace.
( Rappel RLC : Remplace les répétitions de symboles BBAAAAACCAAAA⇒2B5A2C4A )
Codage entropique 1 : RLC
Composantes continues (premier coefficient) et harmoniques codées séparément
Moyenne de bloc adjacent souvent identique⇒meilleur RLC Codage sous forme d’une suite de symboles 1 et 2 :
Symbole 1 : paire {Runlength, Size}
Runlength (∈[0,15]) = nombre de zéros qui se suivent
Size = nombre de bits nécéssaires pour coder le symbole 2 suivant {15,0}représente 16 zéros à la suite
{0,0}représente la fin de bloc (EOB)
⇒4x{15,0}+EOB = un bloc complet de zéros
Symbole 2 : valeur d’amplitude d’un coefficient non nul (nombre de bits variable)
Codage entropique 2 : Huffman
2 tables de codage différentes pour les composantes continues et les composantes harmoniques :
Composantes continues (moyenne du bloc - premier coefficient) codage de Huffman à part.
Composantes harmoniques (autres coefficients) :
Symboles 1 : Codage de Huffman sur 16 (Runlength) x 10 (Size) + EOB = 161 entrées
Symboles 2 : laissés tels quels, pas de codage.
Encodage progressif
Envoyer les données de manière à pouvoir reconstruire l’image 2 options possibles
Tranches horizontales : dans l’ordre des coefficients DCT Tranches verticales : dans l’ordre du MSB vers le LSB
Cas des images couleurs
Transformation de l’espace RGB vers un espace Luminance-chrominance
Y Cr Cb
=
0.299 0.587 0.114
−0.169 −0.331 0.500 0.500 −0.419 −0.081
R G B
+
0 128 128
Sous-échantillonage des composantes de chrominance (↓2 complet = 4 :2 :0 ou seulement horizontal 4 :2 :2)
Matrices de quantification spécifique pour les canneaux de chrominance.
Effets de blocs
Forte compression, blocs uniformes⇒limites des blocs visible
296ko 2.9ko
JPEG2000
Points clés :
Performances supérieures (PSNR) à faible bit-rate (< 0.25 bit/pixel)
Jusqu’à 38 bits de précision par pixel (seul standard > 16) Grandes images (taille codée sur 32bits)
Compression avec et sans perte Possibilité de taille ciblée
Principe
Prétraitements
Tiling
Découpage en blocs adjacents (généralement 256x256 ou 512x512) appelés "tiles"
Traitement indépendant de chaque tile
Ressources nécéssaires réduites avec de petites tiles, mais moins bonne compression
Centrage
Centrage des tiles de manière à avoir une moyenne nulle Transformation couleur
Comme pour jpeg, passage dans un espace luminance-chrominance
Transformée en ondelettes discrète
Pour chaque tile :
Décomposition dyadique jusqu’à 32 niveaux (rarement utile au dessus de 5)
Filtres utilisés
CDF 9/7 pour la compression avec pertes CDF 5/3 pour la compression sans perte
Exemple (CDF 9/7)
50
100
150
200
250
50 100 150 200 250
50
100
150
200
250
50 100 150 200 250
Quantification
Quantification scalaire de chaque bande Ajout d’une zone double centrée sur l’origine
qb(i,j) =sign(yb(i,j))
"
|yb(i,j)|
∆b
#
(3) Avecbla bande,yb(i,j)le site, et∆ble pas de quantification
Codage entropique
Découpage de chaque bande en blocs (code blocks), souvent 64x64 ou 32x32
Chaque bloc décomposé enP bit-planes(du MSB au LSB) 2 étapes de codage
Tier-1 : Codage de chaque bloc
Tier-2 : Codage de l’information des mot de code obtenus en 1
Fractional bit-plane coding (Tier-1)
Embedded Block Coding with Optimized Trucation (EBCOT) Codage en trois passes
1 Significance Propagation pass (SPP) : codage des premiers bits non nuls d’un échantillon
2 Magnitude Refinement pass (MRP) : codage des bits non nuls non codé en SPP
3 Cleanup pass (CUP) : codage des bits restant (avec une forme de RLC)
Parcours vertical de l’image (pattern en ’N’ à l’envers).
Utilisation des voisinnages du bits codé dans le plan dans la SPP et la MRP (pixels voisin→luminance proche).
Compression fractale
Iterated function systems
Un système de fonctions itérées est un ensemble de fonctions contractantes
Une fonction contractante est une fonctionf avec un point fixe x?=f(x?)tel que toute suitexn+1=f(xn)converge versx? (théorème du collage)
⇒Principe d’une photocopieuse qui dupliquerait l’image en de plus petits exemplaires
Encodage
Chercher la collection de transformations affines{wi}
yi =wi(x) =Ax+b (4) Qui minimisent l’erreur entre les petits blocs (yi) et les gros blocs (x)
Décodage
On part d’une image de bruit
Décodage
On applique{wi}i
Décodage
On itère
Décodage
On itère encore
Décodage
Le théorème du collage fait converger vers l’original