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.