TP Ondelettes SI222

Transcription

TP Ondelettes SI222
Compression d’images par ondelettes
SI 222
Le but de ce TP est de utiliser les ondelettes pour le codage d’images. D’abord vous essaierez les performances et les
fonctionnalités des codeurs JPEG et JPEG2000. En suite il vous sera demandé de réaliser un algorithme de compression
d’images basé sur une décomposition en ondelettes suivie d’une quantification optimale des sous-bandes.
Avant de commencer le TP, il faut :
1. Au démarrage du PC, utiliser le système d’exploitation par défaut (notamment Debian GNU/Linux with Linux
3.12.18-enst.1).
2. Sur la page de connexion, choisir VM Windows XP (2014).
3. Une fois ouverte la session Windows, créer deux répertoires de travail sur le Bureau : H:\Desktop\TP et
H:\Desktop\Wavelab
4. Ouvrir un navigateur Web et télécharger les fichiers supplémentaires (programmes et images) et le logiciel
Wavelab de la rubrique “8 - TP compression d’images” à la page web :
http://cagnazzo.wp.mines-telecom.fr/?p=445
5. Les instructions pour installer Wavelab sont ici : :
http://cagnazzo.wp.mines-telecom.fr/?p=666
6. Extraire tous les fichiers des archives compressés dans le répertoire de travail H:\Desktop\TP.
NB. Les comptes rendus doivent être envoyés au plus tard la veille de l’examen à :
[email protected]
1
Codage avec JPEG2000
1. Chargez l’image peppers avec x=imread(’peppers.bmp’); et visualisez la avec image(x);. Codez
cette image avec JPEG, en utilisant les instructions qui suivent :
qualities = [ 4 10 24 45 65];
for q=qualities,
outFile = sprintf(’peppers_%.2d.jpg’,q);
imwrite(x,outFile,’quality’,q);
rate = filesize(outFile)*8/size(x,1)/size(x,2);
fprintf(’Quality: %d
Rate: %1.3f bpp\n’,q,rate);
end
Visualisez les images codées à l’aide de l’explorateur de Windows. Que constatez-vous par rapport à la
qualité de ces images ?
2. Codez l’image peppers avec JPEG2000 :
!kdu_compress -i peppers.bmp -o peppers.jp2 -rate 0.1,0.2,0.3,0.5,0.75,1.0
Visualisez le résultats avec le programme kdu_show. Changez le débit de décodage à l’aide des touches
< et >. Comparez avec la qualité obtenue dans le cas JPEG.
1
2
3. Décodez l’image peppers.jp2 avec différents niveaux de résolution :
!kdu_expand -i peppers.jp2 -o peppers_R1.bmp -reduce 1
!kdu_expand -i peppers.jp2 -o peppers_R2.bmp -reduce 2
Visualisez les résultats avec l’explorateur de Windows.
4. Décodez l’image peppers.jp2 avec différents niveaux de résolution et de qualité :
!kdu_expand
!kdu_expand
!kdu_expand
!kdu_expand
-i
-i
-i
-i
peppers.jp2
peppers.jp2
peppers.jp2
peppers.jp2
-o
-o
-o
-o
peppers_R1L4.bmp
peppers_R1L3.bmp
peppers_R1L2.bmp
peppers_R1L1.bmp
-reduce
-reduce
-reduce
-reduce
1
1
1
1
-layers
-layers
-layers
-layers
4
3
2
1
Visualisez les résultats avec l’explorateur de Windows.
5. Codez l’image peppers avec des “régions d’intérêt” statiques (commande à saisir sur une seule ligne) :
!kdu_compress -i peppers.bmp -o peppers_ROI.jp2 -rate 0.05,4 Clayers=30 Rshift=14 Rlevels=5
-roi {0,0.45},{0.6,0.22}
Visualisez le résultats avec le programme kdu_show. Changez le bit-rate de codage à l’aide des touches
< et >. Comparez avec la qualité de la région d’intérêt par rapport à l’arrière-plane quand on varie le
débit de codage.
6. Décodez l’image peppers.jp2 avec des “régions d’intérêt” dynamiques :
!kdu_expand -i peppers.jp2 -o peppers_dynamicROI.bmp -region {0.4,0.45},{0.6,0.32}
2
Analyse multirésolution
1. Calculez la réponse impulsionnelle du filtre passe-bas de l’AMR orthogonale de Daubechies d’ordre 4
(c’est-à-dire, avec 4 moments nuls) au moyen de la fonction qmf = MakeONFilter(’Daubechies’,8).
2. Déterminez la réponse fréquentielle de ce filtre en effectuant une FFT sur 256 points de cette réponse
impulsionnelle. Représentez graphiquement le module de cette réponse fréquentielle. Comment ce graphe
est-il modifié quand on augmente ou on diminue l’ordre du filtre ?
3. Créez plusieurs signaux à partir de fonctions polynomiales d’ordres différents : rampe, polynomiale par
morceaux, régulier par morceaux en utilisant la fonction MakeSignal). Effectuez la décomposition 1D en
ondelettes de Daubechies-8 périodisées de ces signaux, au moyen de la fonction FWT_PO 1 . Qu’observezvous, en particulier par rapport aux détails et aux discontinuités ? Que se passe-t’il en utilisant des filtres
de tailles différentes ?
4. Chargez l’image lena.pgm avec les fonctions imread et transformez-la en format double avec la commande double (nécessaire pour manipuler l’image). Affichez l’image avec les commandes image et
colormap(gray(256)), ce dernier assurant une correcte visualisation.
5. Réalisez les décompositions 2D en ondelettes de l’image lena avec la fonction FWT2_PO sur 1 niveau puis
sur 2 niveaux et visualisez-les avec image et avec imagesc. Qu’observez-vous à propos de la dynamique
des différentes sous-bandes ? Quelles conclusions concernant la compression pouvez-vous en tirer ?
6. Reprenez les questions précédentes, en générant des ondelettes biorthogonales à l’aide de la fonction [qmf,dqmf] = MakeBSFilter(Type,Par), avec Type =’Villasenor’ et Par=1, ce qui correspond aux ondelettes 9/7, et en réalisant la décomposition multirésolution au moyen des fonctions
FWT_SBS et FWT2_SBS. Que constatez-vous par rapport aux problèmes d’extension de l’image (périodique/symétrique) ?
1. Soit N = 2K la durée du signal, et soit M le nombre de niveaux de décomposition souhaités. Le paramètre L de la fonction
FWT_PO doit alors être égal à K − M .
SI 222
08 Février 2015
Compression d’images par ondelettes
3
3
Allocation de débit et quantification
On fixe pour la suite une décomposition Daubechies-9/7 et un nombre de niveaux de décomposition M =
4.
1. Utilisez la fonction bd = getsb(wc,i,M), capable d’isoler la i-ème sous-bande de la décomposition
multirésolution de M niveaux pour visualiser chaque sous-bande. Calculez la variance des sous-bandes
résultantes. Affichez aussi les histogrammes de ces sous-bandes au moyen de la fonction hist. Quelles
observations pouvez-vous faire ?
2. On peut allouer d’une manière optimale le débit en fonction des variances des sous-bandes en utilisant
la relation suivante :


I
Nj
Y
1
σj2 N  ,
bi = b̄ + log2 σi2 /
2
j=1
∀i ∈ {1, 2, . . . , I}
où bi représente le nombre de bits/pixel dans la sous-bande i, I est le nombre total de sous- bandes,b
est le débit moyen que l’on s’impose, σi2 la variance de la sous-bande i, Ni le nombre de points de
cette même sous-bande et N le nombre total de points dans l’image. Écrivez un programme qui réalise
l’allocation de débit en utilisant la formule précédente. Quelle contrainte doivent satisfaire les bi ? Pour
un débit global de b̄ = 1 bit/pixel, quels sont les débits des différentes sous-bandes ? Comparez vos
résultats à ceux de la fonction ratealloc.
3. On veut calculer les quantificateurs optimaux de Lloyd-Max dans chaque sous-bande. Utilisez la fonction wcq = quantsb(wc,J,b) pour réaliser la quantification optimale des sous-bandes de débits b.
Quantifiez l’image au débit global fixé de b̄ = 1 bit/pixel.
4. Utilisez la fonction entropyQ pour calculer l’entropie H de l’image originale. En moyennant par le
nombre de coefficients les entropies de chaque sous-bande, quelle est l’entropie moyenne de l’image
décomposée et quantifiée ? La diminution de l’entropie vous paraît-elle significative ? Faites varier le
nombre de niveaux de résolution ainsi que le type et la longueur du filtre. Quels sont les paramètres
optimaux ?
5. Quel est le taux de compression maximum que l’on pourrait obtenir en codant ces sous-bandes ? Comment peut-on approcher ce taux en pratique ?
SI 222
08 Février 2015
Compression d’images par ondelettes

Documents pareils