Bonjour
Voila je dois réaliser un exercice sous MATLAB, mais je suis novice et j'ai besoin de votre aide.
J'ai des soucis à plusieurs questions , notamment à la 8) et 9)
J'aimerais qu'on m'aide à réaliser cet exercice.
Donc si vous avez le temps, merci de vérifier mon code et de m'aider à le compléter. C'est très gentil de votre part.
Initialisation de l'environnement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 clear all; % Supprime les variables de la mémoire close all; % Ferme l'ensemble des figures clc; % Efface les écrits en fenètre
- Lire l'image du fantôme mesuré ('fantome_mesure.bmp')
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 I_fantome=imread('fantome_mesure.bmp'); % la fonction "imread" permet de lire le fichier "fantome_mesure.bmp" figure(1); subplot(111);imshow(I_fantome);- Fabriquer le sinogramme R de l'image du fantôme mesuré en utilisant 180 projections de 1°
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 theta1=[0:1:180] [R,xp] = radon(I_fantome,theta1);- Fabriquer Rnorm le sinogramme R normalisé par rapport à sa valeur max
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 theta2=[0:180] [R_norm,xp] = radon(R,theta2);- Ajouter à Rnorm un bruit gaussien de moyenne 0 et de variance 0.005 pour obtenir Rb, sinogramme bruité
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rb = imnoise(R_norm,'gaussian',0,0.005);- Fabriquer un filtre gaussien de dimension 5x5 et d'écart-type 0.8 puis l'appliquer à Rb pour produire une version filtrée Rb_f
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 filtregauss = fspecial('gaussian',[5 5] , 0.8); Rb_f = imfilter(Rb,filtregauss);- Fabriquer les images reconstruites IR, IRb et IRb_f correspondantes par transformée de Radon inverse (interpolation linéaire, fenêtre Hamming)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IR = iradon(R,0:1:180,'linear','hamming'); IRb= iradon(Rb,0:180,'linear','hamming'); IRb_f = iradon(Rb_f,0:180,'linear','hamming');- Déterminer les paramètres de transformation (translations uniquement) par recherche de la corrélation max avec une image fantôme de référence 256x256
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 %translation X=100; Y=50; T=[1 0 0;0 1 0;X Y 1]; tform = maketform('affine',T); phantom_translated=imtransform(I_fantome,tform,'bicubic',... 'XData', [1 (256+X)],... 'YData', [1 (256+Y)]); Correlation_max=normxcorr2(I_fantome,phantom_translated); [tX tY] = size(Correlation_max); max=Correlation_max(1,1) for i=1:(tY-1) for j=1:(tX-1) if(Correlation_max(j,i)>max) max=Correlation_max(j,i); mX=j; mY=i; end end end figure(2) subplot(131);imshow(I_fantome);title('image originale'); subplot(132);imshow(phantom_translated);title('translation'); subplot(133);imshow(Correlation_max);title('Corrélation max');- Calculer l'erreur entre l'image fantôme initial et chacune des 3 images reconstruites (de même taille) comme la somme des différences au carré pixel à pixel
- Calculer les rapports S/N en dB = 20log(somme(fantome)/erreur)
- Afficher sur la même figure R, Rb et Rb_f et IR, IRb et IRb_f. Ajouter dans les légendes les valeurs des erreurs calculées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 figure(3); subplot(331);imshow(R);title('Sinogramme R'); subplot(332);imshow(Rb);title('Sinogramme bruité par un bruit gaussien'); subplot(333);imshow(Rb_f);title('Sinogramme filtré par un bruit gaussien'); subplot(334);imshow(IR);title('Image IR reconstruite '); subplot(335);imshow(IRb);title('Image IRb reconstruite '); subplot(336);imshow(IRb_f);title('Image IRbf reconstruite ');
Partager