Sunteți pe pagina 1din 7

Laboratorul 7-8

Utilizarea GUIDE pentru creerea de aplicaţii destinate procesarii imaginilor medicale

1. Scopul lucrarii
Lucrarea prezintă noţiuni introductive şi exemple pentru creearea unei aplicaţii grafice pentru
procesarea imaginilor medicale, folosind pachetul GUIDE (Graphical User Interface
Development Environement) disponibil in MATLAB.

2. Consideraţii teoretice
Pachetul de procesarea a imaginilor din MATLAB (Image Processing Toolbox) dispune de o
gama largă de algoritmi, funcţii şi aplicaţii pentru procesarea imaginilor care pot fi aplicate
imaginilor medicale, ajutând în procesul de diagnosticare şi evaluare a stării de sanătate a
pacientului. Deşi acestea pot fi implementate şi utilizate în cadrul MATLAB, există situaţii
când se doreşte creearea unei aplicaţii care poate fi rulată independent de MATLAB, cu o
funcţionalitate adaptată cerinţelor utilizatorului, prin intermediul unei interfaţe grafice
intuitive.
Pachetul de interfaţare grafică disponibil în MATLAB GUIDE poate fi folosit la
implementarea unei asemenea aplicaţii utilizator.

Accesarea pachetului se face prin tastarea comenzii guide în fereastra de comandă a


MATLAB, urmată de selectarea opţiunii Blank GUI (Default), care va deschide un nou
panou de lucru.

Figure 1 Deschiderea panoului de lucru GUIDE

A. Crearea interfetei utilizator (design)

Panoul de lucru (având extensia .fig) permite în acest moment adăugarea elementelor
grafice de tipul butoanelor, zonelor de afişare, a câmpurilor de text, etc. Aceste elemente
grafice se regăsec în stânga zonei de lucru. Poziţionarea obiectelor dorite în zona de lucru
se va face prin operaţiunea de „drag and drop”.

Exercitiu
Sa se creeze o interfata utilizator care sa permita:
- citirea si afisarea unei imagini din folderul curent (chest-xray.tif) prin apasarea unui
buton
- afisarea unui titlu deasupra imaginii (ChestX), in momentul bifarii unui camp optional
de pe interfata
- selectarea dintr-un meniu derulant si aplicarea functiilor de egalizare a histogramei,
filtrare (folosind un filtru prewit), si rotire cu 45 de grade in sens opus acelor de ceasornic
- selectarea modului de afisare al imaginii (original sau prelucrata) prin intermediul a
doua butoane radio

1. Plasaţi cursorul deasupra obiectelor din stânga panoului de lucru şi indentificaţi tipul
acestora. Pentru afişarea numelor obiectelor selectaţi din meniul fişierului de lucru
GUIDE: File-> Preferences-> GUIDE şi bifaţi: Show names in component pallet
(OK).
2. Poziţionaţi în panoul de lucru următoarele obiecte:
 Axes
 Static Text
 Push Button
 Button Group
 Radio Button (2)
 Check Box
 Pop-up Menu

Figure 2 Exemplu de aranjare a obiectelor pe panoul de lucru

Pentru ca butoanele radio să poată fi folosite cu caracter exclusiv, de tip OR, ele
trebuiesc grupate prin intermediul Button Group.
3. Salvaţi fişierul: File -> Save as -> „nume_fisier” -> Save
Salvarea va genera un fisier de tip .m şi unul de tip figură, .fig având acelaşi nume.
Fişierul .m conţine toate comezile şi funcţiile care descriu interfaţa grafică. În lipsa
unui mediu interactiv, precum GUIDE, este posibilă generarea unei interfeţe grafice
prin linia de comandă. In general, fiecarui obiect din fisierul .fig ii corespunde o
functie care il descrie si ii specifica atributele (callback). Functiile de tip callback vor
rula doar atunci cand evenimentul pentru care au fost programate are loc. Mai precis,
in momentul in care un buton de pe interfata grafica a fost activat (si-a schimbat
starea initiala), atunci functia callback atasata obiectului (in cazul nostru, butonul), va
rula, executand comenzile specificate in interior.

4. Închideţi figura.
5. Dechideţi figura: click dreapta pe fisierul cu extensia .fig si selectati : open in GUIDE.
Deschideti si fisierul .m si observati functile generate din fisier care corespund
obiectelor. Cele doua fisiere, .m si .fig sunt legate intre ele si drept urmare, orice
modificare (urmata de salvare) aplicata unuia dintre ele va fi regasita si in cel de-al
doilea.

Figure 3 Exemplu (print screen) al modulul de re-deschidere a figurii in GUIDE

6. Schimbaţi denumirea obiectelor astfel:


Table 1 Lista obiectelor de plasat pe panoul de lucru

tipul obiectului String Tag

Axes AxaF
Static Text Titlu staticT
Push Button Incarca IM incarcaB
Button Group Tipul Afisarii grupRB
Radio Button Original originalB

Radio Button Modificat modificatB

Check Box Afisare titlu checkB


EgalizareH
Pop-up Menu Filtrare menuB
Rotire

Schimbarea oricarei proprietati a obiectelor se va face din meniul Property Inspector.


Acesta se acceseaza prin click dreapta pe obiect, selectandu-se din meniul care s-a deschis.
Meniul Property Inspector permite schimbarea dimensiunii, a fontului, culorii textului,
culoarea de fundal, vizibilitatea, numele obiectului s.a, dar tot aici pot fi adaugate ‚etichete
intuitive (tag-uri) fiecarui obiect. Tag-urile, nu sunt vizibile utilizatorului interfetei, dar sunt
extrem de utile programatorului, care poate atasa un nume sugestiv, stiind in timpul codarii,
care este obiectul asupra caruia actioneaza. In Property Inspector al fiecarui obiect, modificati
campurile String si Tag folosind notatiile din tabel. Bara oblica din tabel sugereaza absenta
campului tag pentru obiectul respectiv. De asemenea, meniul derulant (pop-up), permite
specificarea unei liste de nume; introduceti toate cele trei nume specificate in tabel.

Figure 4 Exemplu privind lista optiunilor din meniul derulant

7. Salvati si rulati aplicatia. Rularea poate fi facuta atat din fisierul .fig (pe care au fost
amplasate obiectele) cat si din cel .m. In acest moment, interfata grafica nu este
functionala. Pentru aceasta este necesara stabilirea legaturilor dintre obiecte si codul
MATLAB, prezentata in paragrafele urmatoare.

Figure 5 Interfata grafica in urma plasarii obiectelor si rularii

B. Stabilirea legăturii dintre interfaţă şi codul MATLAB (functionalitate)


B1. Incarcarea si afisarea imaginii in AxaF la apasarea butonului IncarcaM
- Click dreapta pe butonul Incarca IM
- Selectati View Callbacks -> Callback
- In functia incarcaB_Callback tastati comezile de citire si afisare a unei imagini
(exemeplu chest x-ray)

J=imread('chest-xray.tif');
axes(handles.AxaF);
imshow(J); axis off

- Variabila J care stocheaza imaginea ‘chest-xray.tif’ este vizibila doar in interiorul


functiei incarcaB_Callback. Intrucat este necesara procesarea ulterioara a
imaginii, se recomanda stocarea temporara a variabilei prin segventa:
save([tempdir 'J'],'J')

B2. Afisarea titlului ‘ChestX’


- Click dreapta pe obiectul Afisare Titlu
- Selectati View Callbacks -> Callback
- In functia checkB_Callback tastati segventa de program care conditioneaza
afisarea titlului in cazul in care optiunea a fost selectata

a=get(hObject,'Value');
if (a==0)
set(handles.staticT, 'Visible', 'Off')
else
set(handles.staticT, 'Visible', 'On')
end

- Click dreapta pe butonul Incarca IM


- Selectati View Callbacks -> Callback
- In functia incarcaB_Callback tastati segventa de program care atribuie numele
‘ChestX’ titlului imaginii

set(handles.staticT, 'String', 'ChestX')

B3. Selectarea dintr-un meniu derulant si aplicarea functiilor de egalizare a histogramei,


filtrare (folosind un filtru prewit), si rotire cu 45 de grade in sens opus acelor de ceasornic
- Click dreapta pe obiectul meniu derulant (EgalizareH)
- Selectati View Callbacks -> Callback
- In functia menuB_Callback tastati segventa de program care citeste etichetele
meniului derulant

continut = cellstr(get(hObject,'String'));
b=continut{get(hObject,'Value')};

- Incarcati din directorul temporar imaginea chest-xray, salvata anterior sub


variabila J

load([tempdir 'J']);
- Implementati segventa de program care interogheaza optiunea selectata din
meniul derulant, aplicand functiile de egalizare a histogramei, filtrare prewit si
rotire cu 45 de grade.
if(strcmp(b,'EgalizareH')) %egalizare histograma
G=histeq(J, 256);
elseif(strcmp(b,'Filtrare'))% filtrare
w=fspecial('prewitt');
G = imfilter(J, w, 'replicate');
else %rotire
G=imrotate(J,45,'bilinear');
end

- Salvati temporar imaginea modificata


save([tempdir 'G'],'G');

B4. Selectarea modului de afisare al imaginii (original sau prelucrata) prin intermediul a
doua butoane radio
- Click dreapta pe obiectul buton radio (Original)
- Selectati View Callbacks -> Callback
- In functia originalB_Callback tastati segventa de program care afiseaza imaginea
originala, indiferent de optiunea executata sub meniul derulant

a=get(hObject,'Value');
if(a==1)
load([tempdir 'J']);
axes(handles.AxaF);
imshow(J); axis off;
end
- Click dreapta pe obiectul buton radio (Modificat)
- Selectati View Callbacks -> Callback
- In functia modificatB_Callback tastati segventa de program care afiseaza
imaginea prelucrata si salvata temporar in variabila G

a=get(hObject,'Value');
if(a==1)
load([tempdir 'G']);
axes(handles.AxaF);
imshow(G); axis off;
end

- Click dreapta pe obiectul meniu derulant (EgalizareH)


- Selectati View Callbacks -> Callback
- In functia menuB_Callback tastati segventa de program care verifica ce buton
radio este activ in grupul de butoane (grupRB) si afiseaza imaginea originala
(stocata in J) daca aceasta butonul Original este cel activ, respectiv imaginea
prelucrata comform optiunii din meniul derulant, in caz contrar.

h_selectedRadioButton = get(handles.grupRB,'SelectedObject');
selectedRadioTag = get(h_selectedRadioButton,'tag');
switch selectedRadioTag
case 'originalB'
radio_val=1;
case 'modificatB'
radio_val=2;
end

if(radio_val==1)
axes(handles.AxaF);
imshow(J); axis off;
elseif(radio_val==2)
axes(handles.AxaF);
imshow(G); axis off;
end

Figure 6 Interfata grafica in urma realizarii legaturilor dintre obiecte si segventele de program

Aplicatii
1. Introduceti o noua optiune in meniul derulant care sa permita afisarea imaginii in
oglinda fata de una dintre axe
2. Plasati pe panou un camp de text (static text), care, dupa incarcarea imaginii sa afiseze
valoarea intensitatii maxime din imagine
3. Adaugati un camp de text tip edit text, in care sa specificati unghiul sub care va fi
rotita imaginea.

S-ar putea să vă placă și