TP 1 - Aix-Marseille Université

Transcription

TP 1 - Aix-Marseille Université
Aix-Marseille Université
Master Ingénierie Mathématique et Modélisation
Parcours MI3S
-
ème année
Problèmes inverses en traitement des signaux et des images
TP : Problèmes directes et méthodes de base
1
1.1
Rappels
Téléchargements
Tous les téléchargements se font à l’adresse suivante :
https://www.i2m.univ-amu.fr/~caroline.chaux/enseignements.html
1.2
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 à
[email protected] et [email protected]
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 hn1 ,n2 .
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 Kh est la suite (wn1 ,n2 ) définie par
wn1 ,n2 =
N
−1 N
−1
X
X
hm1 ,m2 gn1 −m1 ,n2 −m2 = (h?g)n1 ,n2 où les indices ni −mi sont définis modulo N (1)
m1 =0 m2 =0
On note ĥ = (ĥk1 ,k2 ) et ĝ = (ĝk1 ,k2 ) les transformées de Fourier finies de h = (hn1 ,n2 ) et g = (gn1 ,n2 ).
Alors w = (wn1 ,n2 ) est une suite finie et que sa transformée de Fourier finie notée ŵ = (ŵk1 ,k2 ) vérifie
ŵk1 ,k2 = ĥk1 ,k2 ĝk1 ,k2 , ∀ki = 0..N − 1
(2)
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 ĝ.
2
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)
où
– z : observations
– y : données originales
– 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/2-1, -n/2 :-1] ;
[Y,X] = meshgrid(x,x) ;
h = exp( (-X.ˆ2-Y.ˆ2)/(2*sˆ2) ) ;
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 2 (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 α = σ 2 ;
2. un bruit Poissonien de paramètre d’échelle α > 0 ;
3
3.1
Mesures de qualité
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é
k y k22
SN R = 10 log10
(4)
k y − ỹ k22
où k y k22 =
NP
−1 NP
−1
|yn1 ,n2 |2 .
n1 =0 n2 =0
Exercice 3 (Calcul de SNR)
Ecrire une fonction SNR qui prend en argument 2 images y (l’image originale) et ỹ (l’image bruitée
ou restaurée) et qui calcule le SNR entre ces deux images.
3.2
PSNR
Pour comparer les performances des algorithmes de restauration on utilisera aussi le PSNR “Peak Signal
to noise ratio”.
255
(5)
P SN R = 10 log10
k y − ỹ k22
Exercice 4 (Calcul de PSNR)
Ecrire une fonction PSNR qui prend en argument 2 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 2 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 2 premiers sont
requis).
4
Méthodes de base pour la déconvolution
On est dans le cas particulier où
z = Dα ((h ? y))
(6)
où
– z : observations
– y : données originales
– h : noyau de l’opérateur de convolution
– Dα : perturbation de paramètre α (un bruit)
4.1
Méthode d’inversion
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.2
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 α = σ 2 . On se restreint
donc au cas où
z = (h ? y) + b
(7)
où
– z : observations
– y : données originales
– h : noyau de l’opérateur de convolution
– b : bruit additif Gaussien de variance σ 2
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
ĥ(ω)Sx (ω)
ĝ(ω) =
|ĥ(ω)|2 Sx (ω) + σ 2
où ĥ est la fonction de transfert du filtre de dégradation et Sx 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 Sx 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 σ 2 , et ressort la fonction de transfert du filtre de Wiener pour la restauration.
Nous avons une seule réalisation, donc on estime directement Sx =
Fourier finie de y et N1 N2 sa taille.
5
|ŷ|2
N1 N2
avec ŷ la transformée de
Méthode par troncation de la SVD
Nous allons à présent étudier un cas de reconstruction IRM. Le modèle dans ce cas est
z = Pα (Ry)
(8)
où
– z : observations
– y : données originales
– 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)
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 12 (Troncation de la SVD dans le cas bruité)
Effectuer les exercices précédants dans la cas bruité.