Lab09

download Lab09

of 6

description

yyy

Transcript of Lab09

  • Sisteme de vedere artificial Lucrarea de laborator nr. 9

    1

    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

    2

    % 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')

  • Sisteme de vedere artificial Lucrarea de laborator nr. 9

    3

    % 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

    4

    % 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);

  • Sisteme de vedere artificial Lucrarea de laborator nr. 9

    5

    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;

  • Sisteme de vedere artificial Lucrarea de laborator nr. 9

    6

    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.