You are on page 1of 6

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

LUCRAREA NR. 9
1. Scopul lucrrii
n lucrarea de fa continu tratarea descrierii formelor i propune un studiu de caz:
detectarea unor piese metalice dreptunghiulare situate pe o mas de culoare mai nchis.

2. Funcii Matlab utile n descrierea regiunilor:


etichetarea regiunilor - bwlabel
descrierea regiunilor imaginii regionprops
operaii morfologice bwmorph
umplerea imaginii imfill
obinerea perimetrului ntr-o imagine binar bwperim
eroziunea imaginii imerode
dilatarea imaginii imdilate
deshiderea imaginii imopen
nchiderea imaginii imclose
selectare a regiunilor bwselect

3. Studiu de caz
Se achiziioneaz mai multe imagini cu piese identice situate n diferite poziii pe masa de
lucru. Se consider c n imaginea img1.bmp, din directorul de lucru, sunt reprezentate piesele
de referin. Se realizeaz diferite msurtori asupra imaginii model. Se cere determinarea
pieselor de acest tip n alte imagini achiziionate folosind aceeai scen i aceleai
echipamente hardware. Se vor folosi imagini achiziionate n timpul laboratorului sau se vor
folosi imaginile img2.bmp, img3.bmp, img4.bmp, din directorul de lucru, ce reprezint piese
similare situate n diferite poziii. n continuare este prezentat o variant de implementare n
Matlab ce descrie piesa model i caracterizeaz piesele similare folosind anumii descriptori.
Se vor urmri comentariile existente n cod.

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

% Detectarea unor piese metalice dreptunghiulare - Studiu de caz


clear, close all;
% Pas 1: Citirea si afisarea imaginii
[J, MAP] = imread('img1.bmp');
figure, imshow(J), title('imaginea initiala');
pause
% Pas 2: Transformarea formatului imaginii intr-o imagine grayscale
I = ind2gray(J, MAP);
% I = uint8(I*255);
figure, imshow(I), title('transformarea formatului imaginii - imaginea grayscale')
% Pas 3: Afisarea histogramei imaginii grayscale
figure, imhist(uint8(I*255)), title('histograma imaginii')
% Pas 4: Calcularea nivelului de prag pentru segmentare
prag = graythresh(I);
% Pas 5: Segmentarea imaginii
BW = im2bw(I, prag);
str = sprintf('segmentarea imaginii - imaginea binarizata cu pragul %.1f',
prag*255);
figure, imshow(BW), title(str);
% Pas 6: Eliminarea regiunilor mici folosind operatia morfologica de
% deschidere - se foloseste ca obiect morfologic, un patrat de latura 5
se = strel('square',5);
BWopen = imopen(BW,se);
figure, imshow(BWopen), title('eliminarea regiunilor mici - deschiderea imaginii
folosind un patrat de latura 5')
% Pas 7: Calcularea frontierelor regiunilor si afisarea acestora
BWperim = bwperim(BWopen, 8);
figure, imshow(BWperim), title('perimetrele regiunilor obtinute')
2

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

% Pas 8: Afisarea frontierelor obtinute peste imaginea initiala pentru evaluarea


% intermediara a rezultatelor - se foloseste o nuanta de rosu pentru
% frontiere
I8 = uint8(I*255);
I8 = imadd(I8, -1);
Iperim = imadd(I8, uint8(BWperim*255));
map = gray(255);
map(255, :)=[1 0 0];
figure, imshow(Iperim, map);
% Pas 9: Afisarea regiunilor in culori diferite
[L, nrObiecte] = bwlabel(BWopen, 8);
pseudo_color = label2rgb(L, @spring, 'c', 'shuffle');
figure, imshow(pseudo_color);
% Pas 10: Calcularea proprietatilor regiunilor
prop = regionprops(L,'all');
% Pas 11: initializarea vectorului de trasaturi
% coloana 1: aria,
% coloana 2: perimetrul,
% coloana 3: compactitatea,
% coloana 4: lungimea axei mari,
% coloana 5: lungimea axei mici,
% coloana 6: excentricitatea
trasaturi = zeros(nrObiecte, 6);
% Pas 12: atribuirea valorilor trasaturilor
% coloana 1: aria,
trasaturi(:, 1)=[prop.Area]';
% for k = 1:nrObiecte,
%

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

% end

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

% 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
% coloana 4: lungimea axei mari,
trasaturi(:, 4)=[prop.MajorAxisLength]';
% coloana 5: lungimea axei mici,
trasaturi(:, 5)=[prop.MinorAxisLength]';
% coloana 6: excentricitatea
trasaturi(:, 6)=[prop.Eccentricity]';
% Pas 13: stabilirea modelului, stiind ca toate obiectele din imagine sunt identice
model = mean(trasaturi);

%==========================================
% Pas 14: Aplicarea pasilor 1-12 pentru imaginea 2
[J, MAP] = imread('img2.bmp');
figure, imshow(J), title('imaginea initiala');
I = ind2gray(J, MAP);
figure, imshow(I), title('transformarea formatului imaginii - imaginea grayscale')
figure, imhist(uint8(I*255)), title('histograma imaginii')
prag = graythresh(I);
BW = im2bw(I, prag);
str = sprintf('segmentarea imaginii - imaginea binarizata cu pragul %.1f',
prag*255);
4

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

figure, imshow(BW), title(str);


se = strel('square',5);
BWopen = imopen(BW,se);
figure, imshow(BWopen), title('eliminarea regiunilor mici - deschiderea imaginii
folosind un patrat de latura 5')
BWperim = bwperim(BWopen, 8);
figure, imshow(BWperim), title('perimetrele regiunilor obtinute')
I8 = uint8(I*255);
I8 = imadd(I8, -1);
Iperim = imadd(I8, uint8(BWperim*255));
map = gray(255);
map(255, :)=[1 0 0];
figure, imshow(Iperim, map);
[L, nrObiecte] = bwlabel(BWopen, 8);
pseudo_color = label2rgb(L, @spring, 'c', 'shuffle');
figure, imshow(pseudo_color);
prop = regionprops(L,'all');
trasaturi = zeros(nrObiecte, 6);
trasaturi(:, 1)=[prop.Area]';
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
for k = 1:nrObiecte,
trasaturi(k, 3)=trasaturi(k, 2)^2 / trasaturi(k, 1);
end
trasaturi(:, 4)=[prop.MajorAxisLength]';
trasaturi(:, 5)=[prop.MinorAxisLength]';
trasaturi(:, 6)=[prop.Eccentricity]';
% Pas 15: calcularea si afisarea erorilor relative
err = zeros(size(trasaturi));
for k = 1:size(trasaturi, 1)
err(k, :)=trasaturi(k,:)-model;
5

Sisteme de vedere artificial

Lucrarea de laborator nr. 9

for j = 1:size(trasaturi, 2)
err(k,j)=100*err(k,j)/model(j);
end
end
err

4. Exerciii
1. ncrcai n matlab exemplul de mai sus. Explicai folosirea fiecrei etape.
2. Realizai mai multe achiziii de imagine folosind calculatorul Ursula si camera video
din dotarea laboratorului de Sisteme de Vedere Artificial. Se vor folosi piese diferite
n scen. Modificai programul din exemplu astfel nct s observai detectarea
pieselor dorite i ignorarea celor care difer de piesa de referin. Comentai
rezultatele obinute.
3. Realizai un program care s caracterizeze o pies cu mai multe guri. Comentai
descriptorii suplimentari ce apar.

5. Tem
Realizai un referat n care s explicai rezultatele experimentale obinute.

You might also like