Vous êtes sur la page 1sur 14

1

TP3 : Création d’une interface graphique pour le contrôle


qualité d’images IRM

I. Quelques notions utiles pour la création d’interfaces

Une interface graphique permet de contrôler une application interactivement avec la souris, plutôt
que par un lancement des commandes par le clavier. Elle comprend des menus, des boutons, des
"ascenseurs", des cases à cocher, des listes de choix, des zones de texte.

Une interface graphique permet de "cliquer" directement sur des images, des graphiques ou des
objets pour modifier la valeur d'une variable, déclencher des fonctions ou simplement faire
apparaître des informations lors d'un survol à la souris.

I.1 Navigation entre deux pages


I.1.1 Création d’une page d’accueil
1. Lancer la fonction « guide » sous Matlab. Cette fonction permet de créer une interface
graphique.
2. Création d’une page d’accueil. Il faut adapter la dimension de cette fenêtre selon l’interface.
3. Créer un bouton non actif avec « edit text » pour l’intitulé de l’interface. Ajuster la taille des
caractères, couleur, etc….
4. Créer un bouton actif nommé « Démarrer » avec « push button ». Refaire la même chose
pour créer un bouton « quitter ».
5. Modifier les noms associés aux boutons « push button » dans le script ainsi dans l’afficheur
des caractéristiques du bouton (Figure 1).
Exemple :
function demarrer_Callback(hObject, eventdata, handles)

Figure 1: Modification du nom d’une fonction callback par le « Tag ».

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
2

6. Enregistrez les modifications de l’interface sous un nom « nomfichier.fig ». Notez qu’il faut
enregistrer toutes modifications. Exemple : « Page_d_accueil.fig ».

I.1.2 Passage d’une page à une autre


Poursuivre les étapes :

7. Créez une nouvelle page selon les étapes 1, 2, 3 (ou bien par la barre de menu sous la
rubrique File-new). Nommez cette page « parametres.fig ».

Rappelons que la première fenêtre du TP ‘Page_d_accueil.fig’ est une page de lancement de


l’application. Elle contient deux boutons de type « push button » nommés « Démarrer » et
« Quitter » :
 Le bouton «Démarrer» permet de lancer les différentes applications du TP dans une page 2
qu’on a nommée « paramètres.fig ».
 Le bouton « Quitter» permet de quitter la page d’accueil du TP.
8. Pour passer à la page « paramètres » il faut en premier désactiver la page d’accueil en
écrivant une instruction dans la fonction « demarrer_Callback » :
close Page_d_accueil
run parametres

Pour quitter écrire l’instruction dans la fonction «quitter_Callback » :


close Page_d_accueil

9. Faites tous les enregistrements des modifications et lancer l’application à partir de la page
d’accueil.fig par le bouton « run ». La deuxième page s’active.

Figure 2 : Lancement de l’interface

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
3

La deuxième fenêtre ‘parametre.fig’ est une page qui contient les différentes applications du TP. En
effet, elle contient deux boutons relatifs à chaque paramètre de qualité d’image IRM (Contraste,
Rapport S/B) ainsi qu’un bouton "Précédent" pour quitter et revenir à la page d’accueil.
App1 : Ecrire les instructions nécessaires pour :
 Fermer la page « parametre.fig » pour chaque action de bouton
 Aller à une nouvelle page en activant le bouton « Contraste » ou « Rapport S/B »

I.2 Extraction d’images à partir d’un répertoire


Dans une nouvelle page « Contraste.fig » (idem pour Rapport_S_B.fig) nous allons charger une ou
plusieurs images.

App2 : Chargement d’une image


Le bouton actif nommé « Load » permet de charger une seule image à partir d’un répertoire :

[fn,pn]=uigetfile('*.IMA','select IMA file','');% ouvrir un répertoire là où se


trouvent les images.
a = strcat(pn,fn);% concatenation du « path name » et du « file name »
I1 = dicomread(a);%Lecture de l’image
imshow(I1,[]),title('image 1');%[] considerer tous les NG

Remarque : Le chargement de plusieurs images à partir d'un répertoire se fait en ajoutant le


paramètre « multiselect » dans la fonction :
[filename,pathname]=uigetfile('*.IMA','multiselect','on');

for f=1:4 %%% il faut fixer le nombre des images


img=dicomread(fullfile(pathname,filename{f}));

end
subplot(1,4,1),img=imshow(fullfile(pathname,filename{f}),'DisplayRange',[]);titl
e('image 1');
subplot(1,4,2),img=imshow(fullfile(pathname,filename{f}),'DisplayRange',[]);titl
e('image 2');
subplot(1,4,3),img=imshow(fullfile(pathname,filename{f}),'DisplayRange',[]);titl
e('image 3');
subplot(1,4,4),img=imshow(fullfile(pathname,filename{f}),'DisplayRange',[]);titl
e('image 4');

App3 : Défilement des images par « slider »


Le slider permet de sélectionner des images successivement. Il faut tout d’abord subdiviser le
« slider » en un certain nombre de blocs égal au nombre d’images à défiler (voir exemple de la
figure 3).

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
4

La création du « slider » se fait par le bouton « slider ».

Figure 3 : Le cas d’affichage de 5 images. Le « slider step » est d’un pas de 0.2 pour une longueur
du « slider » égale à 1 qui représente l’unité.

Il faut placer la succession des instructions suivantes sous la fonction « slider1_Callback » dans le
fichier « afficher_images_slider.m » :

a=get(handles.slider1,'value'); %charger le slider


e=0;f=2500;% la plage de NG
switch a %activer le slider
case 0.2
k1=dicomread('D:\TP_IRM\TD IRM\Resolution\Matrix\MATRICE_256_01.IMA');
subplot(1,3,2),imshow(k1,'DisplayRange',[e f]),title('image 1');
case 0.4
k2=dicomread('D:\TP_IRM\TD IRM\Resolution\Matrix\MATRICE_256_02.IMA');
subplot(1,3,2),imshow(k2,'DisplayRange',[e f]),title('image 2');
case 0.6
k3=dicomread('D:\TP_IRM\TD IRM\Resolution\Matrix\MATRICE_256_03.IMA');
subplot(1,3,2),imshow(k3,'DisplayRange',[e f]),title('image 3');
case 0.8
k4=dicomread('D:\TP_IRM\TD IRM\Resolution\Matrix\MATRICE_256_04.IMA');
subplot(1,3,2),imshow(k4,'DisplayRange',[e f]),title('image 4');
case 1
k5=dicomread('D:\TP_IRM\TD IRM\Resolution\Matrix\MATRICE_256_05.IMA');
subplot(1,3,2),imshow(k5,'DisplayRange',[e f]),title('image 5');
end

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
5

II. Contrôle qualité d’images IRM

La qualité des images IRM dépend essentiellement des quatre paramètres : Rapport signal sur bruit,
contraste, résolution et temps d’acquisition.

II.1 Le rapport signal sur bruit


a. Le signal dans l’image

Le signal dans l’image est défini comme la valeur moyenne des pixels dans une région d’intérêt
(ROI). Les paramètres influençant le signal sont :

 TR : temps de répétition
 TE : temps d’écho
 α : angle de l’impulsion d’excitation
 T1 : temps de relaxation longitudinale du tissu considéré
 T2 : temps de relaxation transversale du tissu considéré

b. Le bruit

Le bruit est défini comme un signal parasite qui dégrade l’image. Le bruit de l’image provient :

 du patient (bruit électromagnétique dans le corps dû à l’agitation thermique des protons à


l’origine des émissions parasites).
 de la chaîne de mesure (bruit "électronique").

Le bruit dans l’image dépend de:

 La taille de l’antenne : antenne corps, antenne locale …


 La largeur de bande de la séquence d’impulsion

c. Le rapport signal sur bruit (RSB)


Le rapport signal sur bruit est défini par le rapport de la valeur moyenne du signal dans une ROI par
la valeur moyenne du bruit dans une autre ROI (Figure 4).

RSB = Signal/ Bruit

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
6

Figure 4 : Zones relatives au bruit et au signal.

Le rapport signal sur bruit est influencé par :

 Epaisseur de coupe
 Bande passante
 Matrice d’acquisition
 Nombre d’acquisitions (NEX)
 La séquence et ses paramètres (TE, TR, FA, …)
 Résolution spatiale
 Champs statique B0
 Les antennes

App5 : Contrôle du rapport signal sur bruit en fonction de TE à TR fixe (Figure 7 d’interface).

1. Créez un bouton « load 3 images ».


2. Créez les zones (axes) pour l’affichage des images originales et des sous images (régions
d’intérêts du signal et du bruit) (Figure 5).

Figure 5 : Création des « axes ».

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
7

Les lignes d’instructions suivantes doivent être placées sous la fonction relative au bouton « load 3
images » :

global I1;% declaration d’une variable


global I2;
global I3;
info = dicominfo ('F:\Qualité Image\Signal Noise Ratio\TE\TR400TE11_01.IMA');% F
représente le flash disk
I1=dicomread(info);
axes(handles.axes1)%affichage de l’image I1 dans l’axes1
imshow(I1,'DisplayRange',[])
title('TE=11ms');
info = dicominfo ('F:\Qualité Image\Signal Noise Ratio\TE\TR500TE109_01.IMA');
I2=dicomread (info);
axes(handles.axes2)
imshow(I2,'DisplayRange',[])
title('TE=109ms');
info = dicominfo ('F:\Qualité Image\Signal Noise Ratio\TE\TR2000TE164_01.IMA');
I3=dicomread(info);
axes(handles.axes3)
imshow(I3,'DisplayRange',[])
title('TE=164ms');

3. Créez le bouton actif « ROI »

Le bouton « ROI » est utilisé une seule fois : il permet de tracer dans un premier temps une
première Région d'Intérêt pour calculer la valeur moyenne du signal à partir de la première image.
La valeur moyenne ainsi que la sous-image seront affichées sous l’image originale. Puis, il faut
refaire une sélection d’un deuxième ROI pour calculer la valeur moyenne du bruit. Par la suite, les
valeurs moyennes du bruit et du signal se calculent et s’afficheront sous les différentes images à TE
différents.

4. Créez des « edit text »


Les « edit text” sont des afficheurs qui seront placés sous les sous-images. Dans ces « edit
text » on placera la valeur moyenne du signal et du bruit pour chaque image TE (Figure 6).

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
8

Figure 6 : Création des zones d’affichage.

Dans le programme suivant se trouve aussi bien les lignes d’instructions qui permettent d’extraire
les sou-images et de calculer la valeur moyenne du signal et du bruit pour les images à différentes
TE.

global I1;
global I2;
global I3;
uiwait(msgbox('Veuillez Sélectionner les zones d intéret pour les trois
images'));
[handles.currentimagehandles.cropRect] = imcrop(handles.axes1);
axes(handles.axes4);% pour l’affichage de la première sous image en dessous de
l’image originale
imshow(handles.currentimage,'DisplayRange',[]); title('Signal');

guidata(hObject, handles);%appel la zone de « edit text »


A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string1 = sprintf('Moyenne Signal = %.3f', totmean);
set(handles.edit1, 'String', string1);

[handles.currentimage handles.cropRect1] = imcrop(handles.axes1);


axes(handles.axes5);
imshow(handles.currentimage,'DisplayRange',[]);title('Bruit');

guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);
string2 = sprintf('Moyenne Bruit = %.3f', totmean2);
set(handles.edit2, 'String', string2);

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
9

Resultat1 = totmean/totmean2;% calcul du S/B de l’image 1


string3 = sprintf('Signal/Bruit = %.3f',Resultat1);
set(handles.edit7, 'String', string3); %affichage S/B de l’image 1

save Resultat1

%traitement des autres images


handles.currentimage = imcrop(I2,handles.cropRect);
axes(handles.axes6);
imshow(handles.currentimage,'DisplayRange',[]);title('Signal');
guidata(hObject, handles);
A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string4 = sprintf('Moyenne Signal = %.3f', totmean);
set(handles.edit3, 'String', string4);
handles.currentimage = imcrop(I2,handles.cropRect1)
axes(handles.axes7);
imshow(handles.currentimage,'DisplayRange',[]);title('Bruit');
guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);
string2 = sprintf('Moyenne Bruit = %.3f', totmean2);
set(handles.edit4, 'String', string2);
Resultat2 = totmean/totmean2;
string3 = sprintf('Signal/Bruit = %.3f',Resultat2);
set(handles.edit8, 'String', string3);
saveResultat2

handles.currentimage = imcrop(I3,handles.cropRect)
axes(handles.axes8);
imshow(handles.currentimage,'DisplayRange',[]);title('Signal');
guidata(hObject, handles);
A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string1 = sprintf('Moyenne Signal = %.3f', totmean);
set(handles.edit5, 'String', string1);
handles.currentimage = imcrop(I3,handles.cropRect1)
axes(handles.axes9);
imshow(handles.currentimage,'DisplayRange',[]);title('Bruit');
guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);
string2 = sprintf('Moyenne Bruit = %.3f', totmean2);
set(handles.edit6, 'String', string2);
Resultat3 = totmean/totmean2;
string3 = sprintf('Signal/Bruit = %.3f',Resultat3);
set(handles.edit9, 'String', string3);
saveResultat3

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
10

Figure 7 : Proposition d’une interface


pour la détermination du S/B sur des images IRM à TE variable (TR constant).

App6 : Traçage de la courbe S/B=SNR=f(TR) (Figure 8)

1. Créez un bouton actif « courbe S/B »


2. Sous la fonction relative à ce bouton écrire les lignes d’instruction suivantes :

loadResultat1
loadResultat2
loadResultat3
rsb=[Resultat1, Resultat2 ,Resultat3 ];
TR=[400, 500 , 2000 ];
figure(1);
plot(TR ,rsb);
title('RSB=f(TR)');
xlabel('TR');
ylabel('RSB');

Figure 8: SNR=f(TR).
3. Créez un bouton actif « Reset » qui ferme l’interface « Rapport_S_B.fig » et la relancer de
nouveau.

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
11

II.2 Le contraste
a. Définition du contraste

Le contraste est la différence relative dans les intensités du signal de deux types de tissus (Figure 9,
Figure 10).

Le contraste de l’image est lié :

 à des facteurs propres aux tissus : T1, T2, DP


 aux paramètres de la séquence : TR, TE, FA

C= |

Figure 9: Régions d’intérêts.

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
12

b. Contrôle du contraste en fonction de TE à TR fixe

Le bouton ‘Lecture images’ permet de charger trois images avec différents TE et même TR :

global I1;
global I2;
global I3;
info = dicominfo ('F:\Qualité Image\contrast\TE\TR4000_TE11_01.IMA');
I1=dicomread(info);
axes(handles.axes1)
imshow(I1,'DisplayRange',[])
title('TE=11ms');
info = dicominfo ('F:\Qualité Image\contrast\TE\TR4000_TE44_01.IMA');
I2=dicomread (info);
axes(handles.axes2)
imshow(I2,'DisplayRange',[])
title('TE=44ms');
info = dicominfo ('F:\Qualité Image\contrast\TE\TR4000_TE164_01.IMA');
I3=dicomread(info);
axes(handles.axes3)
imshow(I3,'DisplayRange',[])
title('TE=164ms');

Le bouton ‘ROI’ permet de tracer une première Région d'intérêt (ROI1) pour déterminer la valeur
moyenne du signal et une deuxième région ROI2 pour aussi déterminer la valeur moyenne du
signal dans une autre région. Afin d’étudier l’influence du TE, nous devons aussi calculer le
contraste relative aux trois autres images sur les mêmes régions ROI1 et ROI2 :

global I1;
global I2;
global I3;
uiwait(msgbox('Veuillez Sélectionner les zones d intéret pour les trois
images'));
[handles.currentimage handles.cropRect] = imcrop(handles.axes1);
axes(handles.axes4);
imshow(handles.currentimage,'DisplayRange',[]); title('ROI1');
guidata(hObject, handles);
A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string1 = sprintf('Moyenne ROI1 = %.3f', totmean);
set(handles.edit1, 'String', string1);
[handles.currentimage handles.cropRect1] = imcrop(handles.axes1);
axes(handles.axes5);
imshow(handles.currentimage,'DisplayRange',[]);title('ROI2');
guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
13

string2 = sprintf('Moyenne ROI2 = %.3f', totmean2);


set(handles.edit2, 'String', string2);
Resultat1 = abs((totmean-totmean2)/(totmean+totmean2));
string3 = sprintf('contraste = %.3f',Resultat1);
set(handles.edit7, 'String', string3);
save Resultat1
handles.currentimage = imcrop(I2,handles.cropRect);
axes(handles.axes6);
imshow(handles.currentimage,'DisplayRange',[]);title('ROI1');
guidata(hObject, handles);
A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string4 = sprintf('Moyenne ROI1 = %.3f', totmean);
set(handles.edit3, 'String', string4);
handles.currentimage = imcrop(I2,handles.cropRect1)
axes(handles.axes7);
imshow(handles.currentimage,'DisplayRange',[]);title('ROI2');
guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);
string2 = sprintf('Moyenne ROI2 = %.3f', totmean2);
set(handles.edit4, 'String', string2);
Resultat2 = abs((totmean-totmean2)/(totmean+totmean2));
string3 = sprintf('contraste = %.3f',Resultat2);
set(handles.edit8, 'String', string3);
save Resultat2
handles.currentimage = imcrop(I3,handles.cropRect)
axes(handles.axes8);
imshow(handles.currentimage,'DisplayRange',[]);title('ROI1');
guidata(hObject, handles);
A=double(handles.currentimage);
[r,c]=size(A);
totmean=sum(A(:))/(r*c);
string1 = sprintf('Moyenne ROI1 = %.3f', totmean);
set(handles.edit5, 'String', string1);
handles.currentimage = imcrop(I3,handles.cropRect1)
axes(handles.axes9);
imshow(handles.currentimage,'DisplayRange',[]);title('ROI2');
guidata(hObject, handles);
B=double(handles.currentimage);
[r,c]=size(B);
totmean2=sum(B(:))/(r*c);
string2 = sprintf('Moyenne ROI2 = %.3f', totmean2);
set(handles.edit6, 'String', string2);
Resultat3 = abs((totmean-totmean2)/(totmean+totmean2));
string3 = sprintf('Signal/Bruit = %.3f',Resultat3);
set(handles.edit9, 'String', string3);
save Resultat3

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.
14

Figure 10 : Exemple d’interface pour le calcul du contraste.

Le bouton ‘Courbe contraste’ permet de tracer la courbe du contraste C=f(TE) :

load Resultat1;load Resultat2;load Resultat3


C=[Resultat1, Resultat2 ,Resultat3 ];
TE=[11, 44 , 164 ];
figure(1); plot(TE ,C);
title('contraste=f(TE)');
xlabel('TE');
ylabel('contraste');

INSAT Travaux pratiques


Dpt de physique et IMI5-2015-2016
d’instrumentations Instrumentation biomédicale
TP réalisé par Melle Tbini Zeineb et Mme Marrakchi Charfi O.

Vous aimerez peut-être aussi