AKADEMIA GÓRNICZO – HUTNICZA
im. Stanisława Staszica w Krakowie
Systemy Wizyjne
Sprawozdanie z laboratorium nr 2 MatLab
Michał Grudziński
Maciej Bajor
Mechatronika (IMiR)
grupa 26, rok III
Zadanie 1
Wczytanie obrazu do przestrzeni roboczej MatLaba oraz wyświetlenie go.
Polecenie:
img = imread('photo1.jpg');
figure(1), imshow(img);
Konwersja obrazu do skali szarości.
Polecenie:
gray = rgb2gray(img);
Wykonanie histogramu dla obrazu w skali szarości.
Polecenie:
imhist(gray);
W związku z brakiem możliwości jednoczesnego wyodrębnienia wszystkich obiektów, zastosowano różne progi binaryzacji. Następnie uzyskane obrazy poddano filtracji.
Poniżej proces binaryzacji podkładki (zaznaczona na czerwono), pozostałe obiekty były wyodrębnione analogicznie.
Polecenie:
bw = (gray>=0 & gray<=90);
imshow(bw);
Przeprowadzenie filtracji z zastosowaniem filtrów erozji i dylatacji morfologicznej z elementem strukturalnym w kształcie dysku.
Polecenie:
se = strel('disk',5);
bw1 =imdilate(bw,se); bw1 =imerode(bw1,se); imshow(bw1);
Przeprowadzenie segmentacji i nadanie etykiet obiektom. Czarne tło ma wartość zero a kolejne obiekty przyjmują naturalne wartości.
Polecenie:
[L1, num1] = bwlabel(bw1,8);
Znajomość przypisanej etykiety pozwala na wyodrębnienie i wyświetlenie obiektu.
Polecenie:
bw1_1 = ismember(L,10);
imshow(bw1_1);
Zsumowanie wyodrębnionych obiektów.
Zadanie 2
Instrukcja REGIONPROPS umożliwia wybór i pomiar charakterystyk elementów
obrazu.
Składnia funkcji: FEATS = REGIONPROPS(CC,PROPERTIES)
CC- macierz etykiet, lub obraz;
PROPERTIES- wybrana cecha do pomiaru.
Dostępne parametry:
All - pomiar wszystkich parametrów
Basic - pomiar parametrów bazowych(Area, Centroid, Bounding Box)
Area - zwrócenie liczby pikseli z których składa się obiekt
BoundingBox - przedstawia najmniejszy prostokąt w jakim mieści się dany obiekt
Centroid - środek ciężkości obiektu
MajorAxisLength – zwraca długość (w pikselach) głównej osi elipsy, która ma ten sam drugi moment centralny taki sam jak region
MinorAxisLength – j.w. lecz w odniesieniu do małej osi elipsy
Eccentricity – zwraca wartość między 0 a 1. Stosunek odległości między ogniskiem elipsy i długością jej osi wielkiej.
Orientation – zwraca kąt (w stopniach) między osią x a główną osią elipsy
Image - zwraca obcięty obraz obiektu wielkości BoundingBox danego obiektu
FilledImage - zwraca obraz jw. wraz z wypełnionymi lukami wewnątrz obiektu
Filled Area - zwraca liczbÄ™ pikseli FilledImage
ConvexHull – zwrot współrzędnych wierzchołków najmniejszego wielokąta wypukłego, zawierającego obiekt.
ConvexImage – zwraca obraz obiektu z wyeliminowanymi wklęśnięciami, rozmiarze BoundingBox
ConvexArea - zwraca liczbÄ™ pikseli ConvexImage
EulerNumber – równy liczbie obiektów w regionie minus liczba dziur w nim
Extrema –zwraca współrzędne punktów charakterystycznych
EquivDiameter – średnica koła o tym samym polu co region
Solidity – Stosunek między Area, a ConvexArea
Extent – Stosunek między Area, a BoundingBox Area
PixelIdxList – indeksy pikseli danego obiektu
PixelList – macierz współrzędnych pikseli danego obiektu
Perimeter - zwraca wartość skalarną określającą długość krawędzi obiektu
Zadanie 3
Środki ciężkości:
Polecenie:
% Wybranie cech obrazu oraz prezentacja położenia, orientacji,
% prostokÄ…ta opisanego
[L,num] = bwlabel(bw_ost,8);
feats = regionprops(L,'All');
% Położenie
figure(9)
hold on
h1 = imshow(L);
r1 = 100;
r2 = 300;
for i=1:size(feats)
h1 = line(feats(i).Centroid(1),feats(i).Centroid(2),'Marker','.','MarkerEdgeColor','r');
end
hold off
Orientacja
Polecenie:
% Orientacja
figure(10)
hold on
h2 = imshow(L);
for i=1:size(feats)
h2 = line([feats(i).Centroid(1),feats(i).Centroid(1)+r2*cos(feats(i).Orientation*(pi/180))
],[feats(i).Centroid(2),feats(i).Centroid(2)+r2*sin(feats(i).Orientation*(pi/180))]);
end
hold off
ProstokÄ…t opisany na obiekcie
Polecenie:
% Njmniejszy prostokÄ…t
figure(11)
hold on
h3 = imshow(L);
for i=1:size(feats)
h3 = rectangle('position',[feats(i).BoundingBox(1),feats(i).BoundingBox(2),feats(i).BoundingBox(3),feats(i).BoundingBox(4)],'EdgeColor','r');
end
hold off
Zadanie 4
Polecenie:
% Wyliczenie charakterystyk
for i=1:size(feats)
%form_factor
Char(i,1) = 4*pi*feats(i).Area / feats(i).Perimeter^2;
%roundness
Char(i,2) = 4*feats(i).Area / (pi*feats(i).MajorAxisLength^2);
%acpect_ratio
Char(i,3) = feats(i).MajorAxisLength / feats(i).MinorAxisLength;
%solidity
Char(i,4) = feats(i).Solidity;
%compactness
Char(i,5) = sqrt(4*feats(i).Area/pi) / feats(i).MajorAxisLength;
end
Char
Opis:
Wyniki:
|
|
|
|
|
|
1 |
|
|
|
|
|
2 |
|
|
|
|
|
3 |
|
|
|
|
|
4 |
|
|
|
|
|
5 |
|
|
|
|
|
6 |
|
|
|
|
|
7 |
|
|
|
|
|
8 |
|
|
|
|
|
9 |
|
|
|
|
|
10 |
|
|
|
|
|
11 |
|
|
|
|
|
Zawarte w tabeli charakterystyki pozwalają na identyfikację kształtu obiektu. Warto zauważyć, iż powiększenie obiektu nie ma na nie wpływu, w przeciwieństwie do orientacji.
Śruba ma wyraźnie większy współczynnik Aspect Ratio. Podkładkę charakteryzuje dość duży współczynnik Form Factor oraz Roundness. Nakrętkę identyfikuje niski poziom Roundness przy jednoczesnym wysokim współczynniku Compactness. Obiekt z numerem 9 można rozpoznać na podstawie niskiej wartości Form Factor oraz Roundness przy Wartości około 1 dla współczynnika Aspect Ratio.
Ogólnie parametr Aspect Ratio pozwala na wykrycie obiektów symetrycznych. Mały współczynnik Compactness charakteryzuje obiekty o smukłym kształcie. Natomiast Solidity określa drążenia elementów, im większe drążenie, tym współczynnik przyjmuje niższa wartość. Dla obiektów pełnych Solidity wynosi 1.