Sunteți pe pagina 1din 4

Recunoatere forme in MATLAB

1. Binarizarea si filtrarea Dupa ce imaginea este citita de pe disc si transformata in grayscale (vezi lab 1), se binarizeaza imaginea folosind un prag care sa favorizeze cel mai bine separarea obiectelor de fundal. Pentru aceasta imagine, se poate folosi pragul 250. In alte situatii, se poate folosi algoritmul de selectie automata a pragurilor prezentat in curs, disponibil in fisirul hist_threshold.m In functie de rezultatul binarizarii, se poate impune o operatie de filtrare morfologica, pentru eliminarea imperfectiunilor si identificarea cat mai corecta a obiectelor. Daca exista surplus de puncte in jurul obiectului, se cere o operatie de deschidere:

IC = imopen (IB, strel('disk', 5));

Daca exista prea multe gauri in obiect, se cere o operatie de inchidere:

IC = imclose (IB, strel('disk', 5));

2. Etichetarea Se apeleaza algoritmul de etichetare. Exemplu, incluzand afisarea rezultatelor [L N] = bwlabel (IC, 8); IRGB1 = label2rgb (L, @jet, 'k', 'shuffle'); imshow (IRGB1); 3. Proprietati geometrice Pentru recunoasterea obiectelor etichetate, se calculeaza proprietati geometrice relevante care vor discrimina intre diferitele tipuri de obiecte. In cazul nostru, vom calcula aria, perimetrul si factorul de excentricitate. Aria este numarul total de pixeli ai unui obiect, perimetrul este numarul de pixeli de granita ai obiectului, iar excentricitatea este o masura a gradului de deviatie de la o forma perfect circulara a elipsei care inconjoara obiectul (un obiect cu excentricitate zero este cerc, cu excentricitate 1 este o linie).
objprop = regionprops(L, 'Area', 'Perimeter', 'Eccentricity');

4. Folosirea proprietatilor geometrice pentru clasificare Un element care poate diferentia puternic intre tipuri de obiecte este raportul dintre perimetru si arie. Cu cat marginile obiectului sunt mai neregulate, si obiectul este mai concave, cu atat acest raport este mai mare. Vom crea o lista cu acest raport: T = [];
for i=1:N T = [T objprop(i).Perimeter/objprop(i).Area]; end

Lista T va avea forma urmatoare:

0.0453

0.0865

0.0427

Se observa ca obiectul din mijloc, steaua, are un raport mult mai mare decat obiectele de la margine, scutul si cercul. Acest lucru poate diferentia automat steaua de celelalte obiecte. Pentru a selecta intre cerc si scut, vom folosi excentricitatea. La un cerc, aceasta trebuie sa fie foarte aproape de zero. Valorile obtinute sunt: 0.1891 0.0612 0.5307

Se observa ca steaua are excentricitate foarte apropiata de cercul perfect, din cauza faptului ca elipsa care o cuprinde este de forma circulara. Pe baza celor doua proprietati putem sa scriem decizia de clasificare: CL = []; %lista claselor , initial vida

for i=1:N if (Ti)>0.07) %stea CL = [CL 2]; disp ('obiect'); disp(i); disp('stea'); else if objprop(i).Eccentricity > 0.2 CL = [CL 3]; % scut disp ('obiect'); disp(i); disp('scut'); else CL = [CL 1]; %cerc disp ('obiect'); disp(i); disp('cerc'); end end end

5. Afisarea grafica a rezultatelor clasificarii Pentru a ilustra clasificarea, putem folosi o metoda de afisare similara cu cea folosita pentru etichetare. Avantajele acestei tehnici sunt mai evidente in situatia in care avem mai multe obicte de acelasi tip, cum se vede in imaginea de mai jos, unde patru obiecte trebuie clasificate in doua clase, furculita si lingura. Imaginea din stanga este etichetarea, cu etichete distincte pentru fiecare obiect, iar cea din dreapta este clasificarea.

Primul pas este sa creem o imagine de dimensiune egala cu cea de etichete, cu valori nule.
LC = L * 0;

Apoi, pentru fiecare obiect vom adauga in imaginea de clase punctele corespunzatoare lui, cu valoarea de clasa asociata.
for i=1:N LC = LC +(CL(i) * (L==i)); end

Rezultatul clasificarii se poate astfel afisa.


IRGB2 = label2rgb (LC, @jet, 'k', 'shuffle'); figure, imshow (IRGB2);

Activitate practica 1. Sa se implementeze ca un program algoritmul descris. Sa se afiseze rezultatele intermediare (binarizare, etichetare, proprietarile geometrice, clase). Imaginea de incarcat este cercuri-stele.jpg. 2. Sa se scrie un alt program care sa fie capabil sa clasifice obiectele din imaginea furculita-lingura.jpg. Indicatie sa se foloseasca calculul automat al pragului. 3. Sa se scrie un alt program care sa fie capabil sa clasifice obiectele din imaginea cleste-surubelnita.jpg. Indicatie sa se foloseasca calculul automat al pragului. 4. Sa se scrie un program care sa identifice cheia si carcasa de CD din imaginea obiecte-diferite.jpg.

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