Documente Academic
Documente Profesional
Documente Cultură
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.
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
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.
Axes AxaF
Static Text Titlu staticT
Push Button Incarca IM incarcaB
Button Group Tipul Afisarii grupRB
Radio Button Original originalB
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.
J=imread('chest-xray.tif');
axes(handles.AxaF);
imshow(J); axis off
a=get(hObject,'Value');
if (a==0)
set(handles.staticT, 'Visible', 'Off')
else
set(handles.staticT, 'Visible', 'On')
end
continut = cellstr(get(hObject,'String'));
b=continut{get(hObject,'Value')};
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
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
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.