Aix-Marseille Université 015-016 Master Ingénierie Mathématique et Modélisation ème année Parcours MI3S Problèmes inverses en traitement des signaux et des images TP : Problèmes directes et méthodes de base 1 Rappels 1.1 Téléchargements Tous les téléchargements se font à l adresse suivante : https://www.im.univ-amu.fr/~caroline.chaux/enseignements.html 1. Avertissements Les noms de fonctions ainsi que les noms de variables sont fournis à titre indicatif et peuvent être modifiés. De même, les arguments donnés en entrée/sortie des fonctions peuvent être modifiés. 1.3 Préparation des TPs Dans ce TP vous trouverez des questions en italique qui sont à préparer en avance. Un compte rendu n éxédant pas 10 pages vous est demandé. Il est à rendre au format pdf et est à envoyer à caroline.chaux@univ-amu.fr et sandrine.anthoine@univ-amu.fr dans la semaine qui suit le TP. Tout retard sera sanctionné. 1.4 Importation de fichiers image On peut importer des images de différents formats sous Matlab (pour pouvoir ensuite les traiter avec le logiciel) à l aide de la commande imread. De même, après avoir traité l image on peut l exporter sous le format désiré à l aide de la commande imwrite. Le mieux est ensuite de les passer au format double précision double. C est à dire en tapant dans Matlab A=imread( image.jpg, jpg ) ; A=double(A) ; on a transformé l image image.jpg en une matrice A sur laquelle on peut faire des opérations. Une fois qu on a fait ces opérations, qu on a obtenu la matrice Atrans et qu on veut récupérer son image transformée il suffit d écrire imwrite(atrans, monfichier.jpg ). L image monfichier.jpg peut être visualisée avec une application quelconque pour voir des images. 1.5 Filtrage Les filtres pour les images ont pour réponse impulsionnelle des suites à deux indices h n1,n. On n hésitera pas à l aide de la fonction imagesc à visualiser les réponses impulsionnelles des filtres qu on utilise.
On rappelle que le filtrage du signal g par le filtre K h est la suite (w n1,n ) définie par w n1,n = N 1 N 1 m 1=0 m =0 h m1,m g n1 m 1,n m = (h g) n1,n les indices n i m i sont définis modulo N (1) On note ĥ = (ĥk 1,k ) et ĝ = (ĝ k1,k ) les transformées de Fourier finies de h = (h n1,n ) et g = (g n1,n ). Alors w = (w n1,n ) est une suite finie et que sa transformée de Fourier finie notée ŵ = (ŵ k1,k ) vérifie ŵ k1,k = ĥk 1,k ĝ k1,k, k i = 0..N 1 () Avec Matlab, pour obtenir ŵ, il nous suffit donc de construire le vecteur dont chaque coordonnée est le produit des coordonnées correspondantes de ĥ et ĝ. Dégradation d une image On s intéresse premièrement au problème direct, c est à dire, comment générer des observations z à partir de données originales y. On rappelle que le problème d observation s écrit z = D α (Ly) (3) L : opérateur linéaire (un opérateur de convolution par exemple) D α : perturbation de paramètre α (un bruit) On considère dans un premier temps que l opérateur linéaire L modélise une convolution. Exercice 1 (Construction du noyau de convolution) On pourra utiliser la fonction suivante pour construire un noyau gaussien function h=gaussian(n,s) x = [0 :n/-1, -n/ :-1] ; [Y,X] = meshgrid(x,x) ; h = exp( (-X.ˆ-Y.ˆ)/(*sˆ) ) ; h = h/sum(h( :)) ; ou encore celle-ci pour construire un noyau uniforme function h=uniform(n) h = ones(n,n)/(n*n) ; Implémenter différentes formes de noyaux. A l aide de la fonction imagesc, visualiser les réponses impulsionnelles et fréquentielles des filtres ainsi définis. Exercice (Dégradation d une image) Ecrire une fonction degrad imag qui prend en entrée une image y, un noyau de convolution h, un paramètre α et un type de dégradation D et qui renvoie en sortie une image dégradée par un flou de noyau h et une perturbation D α qui pourra être 1. un bruit additif gaussien de variance α = σ ;. un bruit Poissonien de paramètre d échelle α > 0 ; 3 Mesures de qualité 3.1 SNR Pour comparer les performances des algorithmes de restauration on utilisera le SNR Signal to noise ratio. Si ỹ est le signal restauré et y le signal original non bruité ( ) y SNR = 10 log 10 y ỹ (4)
y = N 1 N 1 n 1=0 n =0 y n1,n. Exercice 3 (Calcul de SNR) Ecrire une fonction SNR qui prend en argument images y (l image originale) et ỹ (l image bruitée ou restaurée) et qui calcule le SNR entre ces deux images. 3. PSNR Pour comparer les performances des algorithmes de restauration on utilisera aussi le PSNR Peak Signal to noise ratio. ( ) 55 P SNR = 10 log 10 y ỹ (5) Exercice 4 (Calcul de PSNR) Ecrire une fonction PSNR qui prend en argument images y (l image originale) et ỹ (l image bruitée ou restaurée) et qui calcule le PSNR entre ces deux images. 3.3 SSIM Enfin, on peut aussi utiliser un autre indice de performance comme le SSIM Structural SIMilarity. Pour plus d informations, vous pouvez vous rendre sur la page https://ece.uwaterloo.ca/~z70wang/research/ssim/ et y télécharger directement le code. Exercice 5 (Test de la fonction ssim index) Tester la fonction ssim index en calculant le SSIM entre images y (l image originale) et ỹ (l image bruitée ou restaurée). (On remarquera que la fonction fournie accepte plus de paramètres mais seuls les premiers sont requis). 4 Méthodes de base pour la déconvolution On est dans le cas particulier h : noyau de l opérateur de convolution D α : perturbation de paramètre α (un bruit) 4.1 Méthode d inversion z = D α ((h y)) (6) On se propose ici d implémenter la méthode d inversion. Cette méthode est très simple et consiste à appliquer le filtre inverse aux observations. Cela équivaut, dans le domaine de Fourier, à diviser terme à terme l observation par la réponse fréquentielle du filtre de dégradation. Exercice 6 (Implémentation du filtre inverse) Implémenter une fonction inversion qui prend en entrée les observations z et le noyau de convolution h et qui applique la méthode du filtre inverse aux observations. Comparer les résultats obtenus en faisant varier le noyau de convolution (type, taille) ainsi que le type et l amplitude du bruit. Calculer à chaque fois les performances numériques c est à dire le SNR, PSNR et SSIM. (on pourra calculer à chaque fois la valeur initiale c est à dire entre l observation et l originale et la valeur finale c est à dire entre l image restaurée et l originale.)
4. Filtre de Wiener dans le cas d un bruit additif Gaussien On suppose donc à présent que D α modélise un bruit additif gaussien de variance α = σ. On se restreint donc au cas z = (h y) + b (7) h : noyau de l opérateur de convolution b : bruit additif Gaussien de variance σ Exercice 7 (Calcul du filtre de Wiener pour la déconvolution) Montrez que la formule qui donne le filtre de restauration de Wiener dans le cas de la déconvolution est ĥ(ω)s x (ω) ĝ(ω) = ĥ(ω) S x (ω) + σ ĥ est la fonction de transfert du filtre de dégradation et S x est la densité spectrale du processus aléatoire x dont l image de départ y est une réalisation. Remarque : ici on considère que l image de départ y est une réalisation d un processus aléatoire x sous jacent. Pour obtenir S x on utilise la méthode du périodogramme sur une seule réalisation. Exercice 8 (Filtre de Wiener en déconvolution) Créez une fonction filtredeconvwiener.m qui prend en entrée une image z, la réponse impulsionnelle d un filtre h et une variance σ, et ressort la fonction de transfert du filtre de Wiener pour la restauration. Nous avons une seule réalisation, donc on estime directement S x = Fourier finie de y et N 1 N sa taille. ŷ N 1N avec ŷ la transformée de 5 Méthode par troncation de la SVD Nous allons à présent étudier un cas de reconstruction IRM. Le modèle dans ce cas est R : matrice de projection (lié à la transformée de Radon) P : bruit Poissonien de paramètre d échelle α Exercice 9 (Construction des observations non bruitées) z = P α (Ry) (8) Créez une fonction genereirm.m qui prend en entrée une image y et la matrice de projection R et qui génère les observations non bruitées z = Ry. Pour cela on chargera les données y.mat (de taille 64 64) qui correspond à l image originale y et R.mat (de taille 8645) qui correspond à la matrice de projection. On fera attention à appliquer la matrice R aux données vectorisées y( :). On pourra utiliser la commande reshape pour retrouver les données sous leur bonne forme. La taille des observations z à générer est 95 91. Exercice 10 (Calcul de la SVD de R) Afin de ne pas avoir un manque de mémoire, on va spécifier que la matrice de projection est sparse grâce à la commande sparse. Calculer la SVD de la matrice. Observer la décroissance des valeurs propres. Que notez vous?
Exercice 11 (Troncation de la SVD) On va générer une estimée ỹ avec la SVD en utilisant la formule d inversion ỹ = V 1 U z. Que remarquez vous? Comment cela évolue avec le nombre de valeurs propres? Exercice 1 (Troncation de la SVD dans le cas bruité) Effectuer les exercices précédants dans la cas bruité.