TP 3 : TRANSFORMÉE EN ONDELETTE INVARIANTE PAR

Transcription

TP 3 : TRANSFORMÉE EN ONDELETTE INVARIANTE PAR
Mathématiques pour l’image
Ecole des Ponts ParisTech, 2ème année
Arnak Dalalyan
[email protected]
TP 3 : T RANSFORMÉE EN ONDELETTE INVARIANTE PAR TRANSLATION
ET ESTIMATION DE L’ INTENSITÉ DU BRUIT
La séance de TP se fait sous environnement Windows.
Pour commencer la séance
1. Créer un répertoire TP3_MPI sur le bureau.
2. Lancer un navigateur, par exemple Mozilla, et aller sur la page web suivante :
http://imagine.enpc.fr/~dalalyan/MathImage
3. Télécharger tous les fichiers concernant le TP3 dans le répertoire que vous venez de
créer TP3_MPI.
4. Lancer ensuite Matlab et modifier le répertoire de travail en choisissant le répertoire
Bureau/TP3_MPI que vous avez créé.
5. Décompresser le fichier toolbox_wavelets.zip dans le répertoire TP3_MPI.
6. Dans le menu File -> Set path choisir C:\Documents... \TP3_MPI et cliquer sur Add
with subfolders, ensuite sur Save et Close.
7. Ouvrir une fenêtre d’éditeur File -> New -> Script.
8. Sauvez le fichier dans le répertoire courant sous le nom TP3.m.
File -> Save as
9. Pour les différentes questions, vous pouvez utiliser un «copier-coller» à partir de ce
document. Il est fortement recommandé de saisir toutes les commandes dans la fenêtre
de l’éditeur que vous avez ouverte. Pour exécuter les commandes saisies, il suffit de
les sélectionner avec la souris et d’appuyer sur la touche F9.
10. Pour inclure des commentaires dans le programme, ce qui est fortement recommandé,
vous devez utiliser le caractère %. Tout ce qui suit ce caractère sera négligé lors de
l’exécution.
11. Penser à sauvegarder régulièrement le contenu du fichier TP3.m en appuyant sur les
touches Ctrl et S.
1. Signal to Noise Ration (SNR) et Peak Signal to Noise Ratio (PSNR).
Il est très répandu en traitement d’image d’utiliser le SNR et le PSNR comme des mesures
de qualité d’approximation d’une image I par une image approchée I1 . Les définitions du
SNR et du PSNR sont :
PSNR = 10 log10
MN maxi,j I (i, j)2
,
∑i,j | I (i, j) − I1 (i, j)|2
SNR = 10 log10
1
∑i,j I (i, j)2
,
∑i,j | I (i, j) − I1 (i, j)|2
où I et I1 sont des images de taille M × N et ∑i,j désigne la somme pour i ∈ {1, . . . , M} et
j ∈ {1, . . . , N }.
Écrire une fonction, qui prend comme entrée les deux images I et I1 et qui calcule les deux
valeurs SNR et PSNR correspondantes. Attention, comme le traitement des boucles est très
lent en Matlab, il faudra utiliser exclusivement des opérations matricielles.
2. Transformée en ondelettes invariante par translation.
La transformée en ondelette n’est pas invariante par translation. En conséquence, si l’on
applique une méthode débruitage à la transformée en ondelettes d’une image et à sa version
translatée, les résultats peuvent être très différents. Pour pallier cet inconvénient, on utilise
la transformée en ondelette invariante par translation. Il s’agit de stocker non-seulement les
coefficients de la transformée en ondelette de l’image I, mais aussi de toutes les images que
l’on obtient à partir de I par une translation. Si l’on utilise une transformée en ondelette
avec un niveau de résolution minimale J0 , alors il suffit de considérer les translations par
un vecteur ( x, y) ∈ {1, . . . , 2 J0 − 1}2 . En pratique, on peut éviter de considérer toutes les
translations possibles et se limiter à un nombre de translations m2 (2 J0 )2 .
1. Poser m = 4. Vérifier que la commande
[dY,dX] = meshgrid(0:m-1,0:m-1);
permet de générer toutes les translations dont on a besoin.
2. On pose, par exemple i = 10. Comprendre le fonctionnement de la commande circshift. Par exemple, que fait la commande IS = circshift(I,[dX(i) dY(i)]); ; et la
commande IS = circshift(IS,-[dX(i) dY(i)]); ?
3. Écrire une fonction, nommée denoisingWTTI,
– qui prend comme entrée une image (bruitée) I, un niveau de seuillage T et un
nombre de translation m,
– pour chaque i ∈ 1, . . . , m2 ,
• détermine l’image translatée Ii ,
• calcule la transformée en ondelette Wi de Ii ,
• effectue le seuillage de Wi
• inverse la transformée en ondelette et applique la translation inverse pour obtenir
l’image débruitée Ji ,
– fait la moyenne des images Ji :
J=
1
m2
m2
∑ Ji .
i =1
4. Pour différentes valeurs de m (exemple, m = 1, 2, 4, 8), calculer le SNR et le PSNR
des images débruitées. Le résultat obtenu par la transformée invariante par translation
est-il meilleur que celui obtenu par la transformée originale ?
5. Comprendre les commandes
options.ti=1;
Iwt = perform_wavelet_transform(J,4,1,options);
Iwti = perform_wavelet_transform(Iwt,4,-1,options);
6. Comment peut-on utiliser ces commandes pour simplifier et accélérer la fonction denoisingWTTI ?
2
3. Estimation de l’intensité du bruit
Supposons que l’on a observé une image bruitée Y,
Y (i, j) = I (i, j) + σξ (i, j),
i = 1, . . . , M, j = 1, . . . , N;
où les ξ (i, j) sont des variables aléatoires iid de moyenne nulle et de variance 1. On dit alors
que σ est l’intensité du bruit. L’estimation de σ est centrale pour toutes les méthodes de
débruitage. On se propose ici d’implémenter et de tester l’estimateur suivant :
σ̂2 =
1
2( M − 1) N
M
N
∑ ∑ |Y (i, j) − Y (i − 1, j)|2 .
i =2 j =1
1. Pour éviter d’utiliser des boucles, on cherche à écrire σ̂2 sous la forme
σ̂2 =
1
k AY k2
2( M − 1) N
avec une matrice A bien choisie. Comment faut-il choisir cette matrice ?
2. Comprendre le fonctionnement des commandes
-diag(ones(1,3),1)
eye(4,4)
En déduire la commande qui génère la matrice A en fonction de M et de N.
3. Écrire une fonction, nommée est_sigma
qui prend comme argument l’image bruitée
√
2
I1 et qui calcule l’estimateur σ̂ = σ̂ . Tester sur quelques images bruitées. La valeur
estimée de σ est-elle proche de la vraie valeur ?
4. Remarquer que l’on peut utiliser la même méthode sur l’image transposée. Notons σ̂t2
l’estimateur obtenu. On définit un nouvel estimateur
σ̃2 =
σ̂2 + σ̂t2
.
2
Implémenter cet estimateur. Est-il meilleur que σ̂2 ?
3