But
Ce TP est la suite du
TP précédent. On se donne comme but de réaliser un
compresseur d'images par allocation de débit par sous-bandes.
A la fin du TP précédent, on était en possession :
- des sous-bandes issues par AMR 2D de l'image lena
- des débits alloués à ces sous-bandes
On se propose dans ce TP de :
- quantifier ces sous-bandes, en fonction de leur débits alloués
- reconstruire l'image, à partir de ses sous-bandes quantifiées
- mesurer l'erreur de l'image reconstruite par PSNR
- coder les sous-bandes au moyen d'un codeur entropique
On demande aussi de commenter les résultats obtenus et d'afficher les signaux générés
à l'aide d'un outil de tracé de courbe comme
gnuplot,
scilab ou
matlab.
Enfin, on veillera à conserver les fonctions définies ci-dessus, car elle seront
réutilisées dans la suite des TPs.
Notes
Les fonctions effectuent les transformations sur place, signifiant qu'elles effectuent la transformation
directement sur le signal d'entrée. Certaines opérations, comme le produit de convolution, ne sont
pas possibles à réaliser directement sur place, et on pourra avoir recours à des tableaux temporaires.
Tous les signaux seront representés en C/C++ par des tableaux de
double.
Un mémento des fonctions C ANSI utiles est disponible
ici.
TP
1 - Quantification des sous-bandes
- Définition
-
Après le TP précédent, on suppose être en possession de :
- des sous-bandes issues par AMR 2D de l'image lena
- des débits bi alloués à ces sous-bandes
On se propose ici de quantifier les sous-bandes ; c'est à dire d'approximer
le signal issu des sous-bandes par un signal quantifié par
E(pow(2,bi)) valeurs, déterminées optimalement par un quantifieur
de Lloyd-Max.
- TP
- Quantifiez chaque sous-bande, en fonction de son débit
(déterminé par allocation lors de la question 3 du TP précédent avec un débit
global de 1 bit/pixel), au moyen du quantifieur optimal
quantlm.
Reconstruisez, affichez et commentez l'image obtenue.
2 - Mesure d'erreur par PSNR
- Définition
-
Le PSNR (Peak Signal Noise Ratio) ou rapport de signal crête sur bruit est
une mesure simple et efficace de la distorsion ou "différence" entre deux images.
Il se mesure en dB, et se calcule à partir de l'EQM (Erreur Quadratique Moyenne)
selon :

Un PSNR de plus de 35 dB entre deux images signifie généralement qu'il n'y aucune
différence visible entre ces deux images. Un PSNR inférieur à 20 dB signifie
généralement que les deux images sont très différentes.
- TP
-
En reprenant la question précédente, calculez le PSNR entre l'image lena
originale et l'image reconstruite.
Refaire les étapes précédentes : allocation de debit, quantification, reconstruction
et calcul du PSNR, en utilisant les débits globaux de 4 bits/pixel, 2 bits/pixel
et 0.5 bit/pixel.
Commentez les résultats obtenus.
3 - Codage des sous-bandes
- Définition
-
On se propose désormais de réaliser le codage effectif des sous-bandes.
Dans un codeur classique, ce codage est généralement fait au moyen d'un
codeur entropique (Huffman ou codeur arithmétique), néanmoins, l'implantation
d'un tel codeur est délicate à mettre au point.
On se proposera d'utiliser ici le codeur statistique général gzip,
basé sur l'algorithme LZ78, qui donne toutefois de très bons résultats (et qui
est au coeur de l'algorithme de compression des images PNG).
- TP
-
Encodez les symboles issus de la quantification de sous-bandes sous forme
d'un fichier binaire (sous forme de unsigned short), au moyen
de la fonction
quantlm_idx.
Compressez le fichier résultant au moyen de gzip.
Comparez la taille du fichier résultant vis à vis du débit global cible imposé.
Etudiez les cas pour les débits globaux de 0.5, 1, 2 et 4 bits/pixel.
Ennoncé créé par
Grégoire Pau - 12 Mars 2003