Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Proiect sisteme de vedere artificiala

Matematica


Universitatea “Gh. Asachi”

Falcultatea de Automatica si Calculatoare



proiect Sisteme de vedere artificiala

Cerinte proiect(Tema nr. 4

Realizati o prelucrare a imaginii astfel incat sa:

a. Se obtina o imbunatatire a contrastului si eliminarea zgomotelor (argumentati alegerile filtrelor) pentru imaginea 'piese.jpg'.

b. Sa se realizeze detectia muchiilor folosind operatorii Log, Canny si Prewitt comentandu-se performantele fiecaruia.

c. Sa se determine nr. de obiecte din imaginea 'piese.jpg' (aplicandu-se eventuale operatii morfologice necesare).

d. Sa se determine perimetrul fiecarui obiect din imagine.

e. Sa se determine aria, compactitatea fiecarui obiect din imagine.

f. Sa se coloreze diferentiat obiectele din scena in functie de asemanarea dintre ele.

Prezentarea aplicatiei :

- citesc imaginea

I = imread('piese.jpg');

- afisez imaginea

figure, imshow(I), title('Imaginea originala');

- transform imaginea originala intr-o imagine grayscale folosind functia rgb2gray.

a = rgb2gray(I);

- preprocesare(filtrare si ajustare)

- filtrez imaginea cu operatorul unsharp si gaussian

H=fspecial('unsharp',0.01);

a=imfilter(a,H);

H=fspecial('gaussian',[3 3],0.5);

a=imfilter(a,H);

I=imadjust(a,stretchlim(a),[]);

Am considerat ca cea mai buna metoda de eliminare a zgomotelor din imagine este prin a imbina cele doua filtre cu parametrii cosrespunzatori;parametrii i-am ales prin mai multe incercari considerand ca cestia sunt cei mai convenabili.

Ajustarea imaginii s-a facut cu fuctia imadjust ce ajustateaza intensitatea unei imagini de tip grayscale,impreuna cu functia stretchlim ce calculeaza limitele necesare fuctiei imadjust pentru obtinerea unui contrast cat mai bun al imaginii.

- detectarea muchiilor folosind binarizarea imaginii

- binarizarea imaginii

BW=im2bw(I,graythresh(I));

- detectarea muchiilor

BW1=edge(I,'log');

BW2=edge(I,'canny');

BW3=edge(I,'prewitt');

Fara filtrare, toti cei 3 operatori evidentiaza puternic zgomotul.

Canny afiseaza cele mai multe detalii.

Se observa ca filtrarea are ca efect o mai buna evidentiere a muchiilor dar si a zgomotului.

Operatorul LoG ne da rezultate bune;insa cele mai bune rezultate ni le da Operatorul Prewitt.

- determinarea numarului de obiecte din imagine

- eliminarea regiunilor mici folosind operatia morfologica de deschidere - se foloseste ca obiect morfologic, un disc de raza 2

se = strel('disk',2);

BWopen = imopen(BW,se);

[labeled,nrObiecte]=bwlabel(BWopen,4);

fprintf('nNumarul obiectelor gasite in imagine este: %d.nn',nrObiecte);

- determinarea perimetrului, aria si compactitatea fiecarui obiect din imagine.

- se eticheteaza regiunile

prop = regionprops(labeled,'all');

- initializarea vectorului de trasaturi

trasaturi = zeros(nrObiecte, 3);

- calculul ariei celor 6 obiecte

trasaturi(:, 1)=[prop.Area]';

for k = 1:nrObiecte,

trasaturi(k, 1)=bwarea(prop(k).Image);

end

- calculul perimetrului celor 6 obiecte folosind formula :

for k = 1:nrObiecte,

bw4 = bwperim(prop(k).Image, 4);

bw8 = bwperim(prop(k).Image, 8);

trasaturi(k,2)=sqrt(2)*sum(bw8(:)) + (1-sqrt(2))*sum(bw4(:));

end

- calculu compactitatii celor 6 obiecte folosind formula

for k = 1:nrObiecte,

trasaturi(k, 3)=trasaturi(k, 2)^2 / trasaturi(k, 1);

end

Am construit o matrice care contine cele 3 trasaturi ale celor 6 obiecte gasite in imagine,prima coloana continand perimetrele celor 6 obiete,in coloana a doua ariile celor 6 obiecte iar in cea de-a treia coloana compactitatiel lor.

for k=1:nrObiecte,

fprintf('Aria obicetului %.0f este %.2fn',k,trasaturi(k,1));

fprintf('Perimetrul obicetului %.0f este %.2fn',k,trasaturi(k,2));

fprintf('Compactitatea obicetului %.0f este %.2fnn',k,trasaturi(k,3));

end

- colorarea obicetelor in functie de asemanare

color=label2rgb(labeled,@jet,'w','shuffle');

figure, imshow(color);

Colorarea obiectelor se face cu ajutorul functiei label2rgb afisand pe un fundal alb diferite culori ale celor 6 piese,ele fiind diferite intre ele.

Programul in Matlab:

clc;clear all;close all;

I = imread('piese.jpg');

figure, imshow(I), title('Imaginea originala');

a = rgb2gray(I);

figure,imshow(a), title('Imaginea grayscale');

H=fspecial('unsharp',0.01);

a=imfilter(a,H);

H=fspecial('gaussian',[3 3],0.5);

a=imfilter(a,H);

I=imadjust(a,stretchlim(a),[]);

figure,imshow(a),title('Imagine filtrata si ajustata');

pause

close all;

BW=im2bw(I,graythresh(I));

figure, imshow(BW), title('Imaginea binarizata');

BW1=edge(I,'log');

BW2=edge(I,'canny');

BW3=edge(I,'prewitt');

figure, imshow(BW1), title('Detectarea muchiilor - Operatprul LoG');

figure, imshow(BW2), title('Detectarea muchiilor - Operatorul Canny');

figure, imshow(BW3), title('Detectarea muchiilor - Operatorul Prewitt');

pause;close all;

se = strel('disk',2);

BWopen = imopen(BW,se);

figure, imshow(BWopen), title('eliminarea regiunilor mici - deschiderea imaginii folosind un disc de raza 2')

[labeled,nrObiecte]=bwlabel(BWopen,4);

fprintf('nNumarul obiectelor gasite in imagine este: %d.nn',nrObiecte);

BWperim = bwperim(BWopen, 8);

figure, imshow(BWperim), title('perimetrele regiunilor obtinute')

prop = regionprops(labeled,'all');

figure

for i=1:nrObiecte,

img=bwperim(prop(i).Image,8);

subplot(2,3,i);

imshow(img);

end

pause;close all;

prop = regionprops(labeled,'all');

trasaturi = zeros(nrObiecte, 3); 

trasaturi(:, 1)=[prop.Area]'; 

% coloana 1: aria,

for k = 1:nrObiecte,

trasaturi(k, 1)=bwarea(prop(k).Image);

end

%coloana 2: perimetrul,

for k = 1:nrObiecte, 

bw4 = bwperim(prop(k).Image, 4);

bw8 = bwperim(prop(k).Image, 8);

trasaturi(k,2)=sqrt(2)*sum(bw8(:)) + (1-sqrt(2))*sum(bw4(:));

end

% coloana 3: compactitatea,

for k = 1:nrObiecte, 

trasaturi(k, 3)=trasaturi(k, 2)^2 / trasaturi(k, 1);

end

for k=1:nrObiecte,

fprintf('Aria obicetului %.0f este %.2fn',k,trasaturi(k,1));

fprintf('Perimetrul obicetului %.0f este %.2fn',k,trasaturi(k,2));

fprintf('Compactitatea obicetului %.0f este %.2fnn',k,trasaturi(k,3));

end

end

color=label2rgb(labeled,@jet,'w','shuffle');

figure, imshow(color);

pause;close all;

Concluzii:

Am ales operatorii Unsharp si Gaussian deoarece combinandui mi-au permis o filtrare mai buna si o eliminare a zgomotelor foarte buna.

Operatorul Prewitt este cel care a detectat cel mai bine muchiile, pentru aceasta imagine.

Am obtinut o imagine indexata, avand obiecte diferite cu diferite proprietati.

Imaginile obtinute de-a lungul aplicatiei :

Bibliografie

note de curs la disciplina Sisteme de Vedere Artificiala, prof. Dr. Ing. Corneliu Lazar ;

note de laborator la disciplina Sisteme de Vedere Artificiala, ing. Adrian Burlacu


Document Info


Accesari: 1829
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )