Zliczanie obiektow instrukcja

background image

Z

Z

l

l

i

i

c

c

z

z

a

a

n

n

i

i

e

e

o

o

b

b

i

i

e

e

k

k

t

t

ó

ó

w

w

-

-

a

a

n

n

a

a

l

l

i

i

z

z

a

a

o

o

b

b

r

r

a

a

z

z

ó

ó

w

w

r

r

a

a

s

s

t

t

r

r

o

o

w

w

y

y

c

c

h

h

-

-

M

M

a

a

t

t

l

l

a

a

b

b

I

I

m

m

a

a

g

g

e

e

P

P

r

r

o

o

c

c

e

e

s

s

s

s

i

i

n

n

g

g

T

T

o

o

o

o

l

l

b

b

o

o

x

x

Pakiet

MATLAB

jest środowiskiem służącym do rozwiązywania różnorodnych problemów

numerycznych. Składa się on z pogrupowanych tematycznie w katalogach bibliotek funkcji
nazywanych przybornikami (toolboxes). Funkcje te nazywane są m-plikami (od litery
określającej rozszerzenie nazwy pliku). Napisane są one w języku Matlaba, będącym
językiem wysokiego rzędu przystosowanym do operacji na macierzach. Tak też traktowane są
wszystkie zmienne w Matlabie – jako tablice jedno-, dwu- lub wielowymiarowe.

W środowisku Matlaba możliwe jest wykonywanie obliczeń na dwa sposoby. Pierwszy z nich
polega na tym, że tworzymy własny m-plik, umieszczamy w nim właściwy kod programu, a
na koniec uruchamiamy go. Drugi sposób polega na bezpośrednim wykonywaniu kolejnych
instrukcji i wywoływaniu funkcji jedna po drugiej w środowisku interpretera języka Matlab.
Matlab jest środowiskiem w którym wykonywane programy nie są kompilowane, lecz
interpretowane. Ma to oczywiścei swoje zalety i wady. Do zalet należy niewątpliwie to, że
możemy oglądać kod źródłowy dowolnego m-pliku z wybranego przybornika, do wad –
powolne wykonywanie interpretowanych funkcji.

Przybornikiem zaprojektowanym z myślą o przetwarzaniu i analizie obrazów jest

IMAGE

PROCESSING TOOLBOX

. Zawiera on wiele funkcji umożliwiających m. in.:

 czytanie, zapisywanie, wyświetlanie i konwersję plików graficznych
 wykonywanie korekcji zdjęć
 wykonywanie przekształceń geometrycznych
 wykonywanie operacji na pojedynczych pikselach oraz blokach pikseli
 stosowanie transformat obrazu
 definiowanie filtrów liniowych i liniowe filtrowanie obrazu
 maskowanie fragmentów obrazów
 wykonywanie operacji morfologicznych na obrazach binarnych
 analiza i rozpoznawanie obrazów

background image

Podstawową strukturą danych w Matlabie jest tablica (macierz). Skrót Matlab oznacza Matrix
Laboratory.

W przypadku przetwarzania obrazów mapy bitowe przechowywane są w tablicach
dwuwymiarowych lub trójwymiarowych. W przestrzeni roboczej Matlaba możliwe jest
przechowywanie czterech rodzajów map bitowych:

obraz RGB

(24-bitowa głęba kolorów)

obraz jest przechowywany w trójwymiarowej tablicy o wymiarach n pikseli x m pikseli x
3 składowe RGB opisujące kolor pojedynczego piksela w skali:

0 (brak składowej koloru) ... 1 (pełna składowa barwy) dla liczb rzeczywistych typu double

lub

0 (brak składowej koloru) ... 255 (pełna składowa barwy) dla liczb całkowitych

jednobajtowych typu uint8

obraz czarno-

biały o 256 odcieniach szarości

(8-bitowa głęba odcieni szarości)

obraz jest przechowywany w dwuwymiarowej tablicy o wymiarach n pikseli x m pikseli x
1 składowa opisująca odcienie szarości w skali:

0 (czarny) ... 1 (biały) dla liczb rzeczywistych typu double

lub

0 (czarny) ... 255 (biały) dla liczb całkowitych jednobajtowych typu uint8

background image

obraz indeksowany z paletą kolorów

(ilość kolorów określona jest przez rozmiar

tablicy zawierającej paletę używanych kolorów)
obraz jest przechowywany w dwóch tablicach dwuwymiarowych. Pierwsza o wymiarach
n pikseli x m pikseli zawiera numery kolorów (liczby typu double) zdefiniowanych w
tablicy o wymiarach k kolorów x 3 składowe RGB typu double (k jest ilością barw jakie
zawiera bitmapa).

obraz binarny czarno-

biały

(1-bitowa reprezentacja barwy czarny/biały)

obraz jest przechowywany w tablicy n x m pikseli, w której dany piksel przyjmuje tylko
jedną z dwu wartości 1 – kolor biały lub 0 – czarny. Liczby są przechowywane w
formacie double lub uint8.

Problem, którym zajmiemy się w tym ćwiczeniu, polega na napisaniu w języku Matlaba
programu zliczającego obiekty występujące na przykładowych zdjęciach substancji
chemicznej. Program będzie również wyszukiwał największy obiekt na zdjęciu i podawał
jego położenie względem lewego górnego rogu zdjęcia oraz wymiary w milimetrach. Zdjęcia,
które będą poddawane analizie zawarte są w plikach: probka01.tif, probka02.tif, .... Proces
rozpoznawania obiektów będzie wykonywany w kilku etapach. Na początku zdjęcie kolorowe
zostanie przekształcone na zdjęcie w odcieniach szarości. Następnie zostanie zwiększony
kontrast oraz zostanie usunięty ewentualny szum. Potem zdjęcie zostanie przekształcone na

background image

binarne czarno-białe, a rozłączne obszary zostaną oznaczone i ponumerowane. Na koniec
określona zostanie ilość obiektów i wskazany zostanie największy.

Przed rozpoczęciem ćwiczenia warto zapoznać się poniższymi przydatnymi uwagami.

 dodatkowe informacje o każdej z funkcji Matlaba można uzyskać pisząc

help

nazwa_funkcji

lub uruchamiając opcję Help Desk i podając nazwę szukanej funkcji

 w każdej chwili można zobaczyć wartość zmiennej pisząc jej nazwę lub wywołując

komendę

disp(nazwa_zmiennej)

 aby sprawdzić jakie zmienne istnieją w przestrzeni roboczej Matlaba należy wywołać

instrukcję

who

lub

whos

albo przełączyć się na zakładkę Workspace

 wpisując kolejne liczby do tablicy, kolumny oddzielamy przecinkiem lub spacją, wiersze

średnikiem lub enterem

 komentarze umieszczamy w liniach zaczynających się od znaku %

 funkcje zakończone średnikiem nie wyświetlają na ekranie zwracanych parametrów
 aby w jednej linii umieścić więcej instrukcji oddzielamy je przecinkami lub średnikami

Wczytanie zdjęcia, wstępna obróbka mapy bitowej

Ćwiczenie rozpoczynamy od wczytania do tablicy RGB jednej z map bitowych zawierających
zdjęcia próbek i wyświetlenia jej.

RGB=imread(’probka01.tif’);
imshow(RGB)

Następnie przekształcamy zdjęcie kolorowe na zdjęcie czarno-białe w odcieniach szarości

GRAY=rgb2gray(RGB);

lub podając “ręcznie” współczynniki wagowe dla konwersji trzech składowych kolorów.

GRAY=uint8(0.299*double(RGB(:,:,1)) + 0.587*double(RGB(:,:,2)) +

0.114*double(RGB(:,:,3)));

Po każdym istotnym przekształceniu obrazu jeżeli chcemy go wyświetlić wykonujemy
instrukcję

imshow(nazwa_tablicy)

lub figure, imshow(nazwa_tablicy)

jeżeli

chcemy, aby obraz był umieszczony w nowym oknie.
Aby poszerzyć spektrum barw zdjęcia i tym samym zwiększyć kontrast, rozszerzamy zakres
kolorów od najciemniejszego do najjaśniejszego w zdjęciu na zakres od koloru czarnego do
koloru białego. Najpierw ustalamy najciemniejszy i najjaśniejszy odcień koloru szarego.

l=min(min(GRAY)); h=max(max(GRAY));

a następnie poszerzamy rozkład poziomów zdjęcia

GRAY_1=imadjust(GRAY,[double(l)/255, double(h)/255], [0,1]);

Rozkład tonalny zdjęcia przed i po rozszerzeniu zakresu możemy zobaczyć na wykresie
nazywanym histogramem.

figure, imhist(GRAY_1);

background image

W celu wyeliminowania szumu występującego na zdjęciach niektórych próbek, a także
lepszego przystosowania zdjęć do algorytmu wykrywania krawędzi, możemy zastosować
jedną z funkcji zmiękczających i uśredniających.

GRAY_2=uint8(filter2(F,GRAY_1,’valid’));
GRAY_2=uint8(medfilt2(GRAY_1,[3,3]));
GRAY_2=uint8(wiener2(GRAY_1,[3,3]));

Dla pierwszego filtru tablicę F określającą rodzaj filtru należy wcześniej wygenerować
funkcją

F=fspecial(’nazwa_filtru’,3);

podając nazwę filtru

’average’

(filtr uśredniający) lub

’gaussian’

(filtr rozmycia

gaussowskiego). Liczba 3 występująca jako parametr we wszystkich filtrach określa stopień
rozmywania.

Poleca się także poeksperymentować z parametrami powyższych funkcji, oraz zobaczyć efekt
działania innych filtrów możliwych do uzyskania funkcją

fspecial

.

Konwersja zdjęcia na postać binarną, zliczanie obiektów

Aby policzyć obiekty widoczne na zdjęciu musimy przekształcić je do postaci binarnej
czarno-białej. Konwersję możemy wykonać dwoma metodami i aby porównać uzyskane
wyniki i wybrać lepszą zastosujemy je obie.
Pierwsza metoda polega na progowej zamianie koloru piksela na biały lub czarny w
zależności od tego, czy kolor danego piksela jest jaśniejszy czy ciemniejszy od ustalonej
wartości progowej.

Po dobraniu odpowiedniej wartości z przedziału 0...1 dla zmiennej progowej

level

wywołujemy funkcję

BW_1=~im2bw(GRAY_2,level);

lub inaczej

BW_1=~(GRAY_2>level*255);

Symbol “

~

” oznacza negację.

Wartość zmiennej progowej

level

optymalną dla wyodrębnienia obiektów z tła można

wyznaczyć stosując funkcję

graythresh

.

Druga metoda polega na znalezieniu brzegów (krawędzi) obiektów występujących na zdjęciu.
Bazuje ona na funkcji

edge

wykrywającej krawędzie obiektów.

Jako drugi argument funkcji

edge

należy podać jedną z kilku dostępnych metod

wyszukiwana krawędzi obszarów:

’sobel’

,

’canny’

,

’prewitt’

,

’roberts’

,

’log’

oraz opcjonalnie ustawić parametr

thresh

określający czułość danej metody przy

wyznaczaniu krawędzi

BW_1=edge(GRAY_2,’nazwa_metody’[,thresh]);

background image

Na tym etapie ćwiczenia otrzymaliśmy binarną czarno-białą wersję analizowanego zdjęcia.
W obrazie binarnym możemy usunąć szum pojedynczych pikseli wywołując funkcję

BW_2=bwmorph(BW_1,’clean’);

Poleca się sprawdzić inne rodzaje przekształceń dostępne w funkcji

bwmorph

Do usuwania z obrazu małych, nieistotnych w analizie obiektów można zastosować funkcję

bwareaopen

. Obiekty, które składają się z liczby pikseli mniejszej niż wartość, podana jako

drugi argument przekazywany do funkcji, są usuwane.

Następnym etapem wykonywanej analizy zdjęć jest ponumerowanie rozłącznych obszarów
reprezentujących poszczególne obiekty na zdjęciu. Służy do tego funkcja

bwlabel

[LAB, N]=bwlabel(BW_2,8);

Wartość 8 oznacza zastosowanie przy wyszukiwaniu obiektów sąsiedztwa 8-punktowego dla
każdego piksela. Drugą możliwością jest zastosowanie sąsiedztwa 4-punktowego.

Różnicę między sąsiedztwem 8 i 4-punktowym ilustruje znajdujący się obok
rysunek. Stosując sąsiedztwo 8 punktowe funkcja

bwlabel

rozpozna na nim

jeden obiekt, stosując sąsiedztwo 4-punktowe – dwa obiekty.

Zwracane przez funkcję zmienne to

LAB

– tablica zawierająca ponumerowane obiekty,

N

– ilość obiektów w tablicy.

Ponumerowane obiekty wyświetlimy, każdy w innym kolorze, korzystając z funkcji

jet

generującej tablicę kolorów.

map=[0 0 0;jet(N)];
figure, imshow(LAB+1, map);

Funkcja

imshow

wyświetla indeksowaną mapę bitową pobierającą kolory z tablicy kolorów

map.

Ilość obiektów występujących na zdjęciu przechowuje teraz zmienna

N

. Jej wartość

wyświetlić można instrukcją

disp(N)

lub

sprintf(‘zdjęcie zawiera %d

obiektów’,N)

Dla kilku różnych zdjęć należy porównać wartość N określającą ilość rozpoznanych obiektów
z rzeczywistą policzoną ilością obiektów występujących na tych zdjęciach. Porównać
wartości otrzymane z zastosowaniem funkcji

im2bw

i

edge

.

Znalezienie największego obiektu, określenie jego położenia i wymiarów

Ostatnim etapem wykonywanej analizy obrazu jest znalezienie największego obiektu.
W przypadku zastosowania funkcji

im2bw

będzie to kryterium największej powierzchni, w

przypadku funkcji

edge

– kryterium największego obwodu.

Przy szukaniu największego obiektu zastosujemy instrukcję pętli, która w Matlabie ma
następującą składnię:

for i=wart_pocz:wart_końc,
...
end

background image

Skorzystamy także z instrukcji

find

wyszukującej wszystkie elementy tablicy spełniające

podany warunek. Funkcja ta zwraca tablicę zawierającą współrzędne tych punktów.

Poniżej znajduje się fragment programu odpowiedzialny za wyszukanie największego
obiektu.

[y,x]=find(LAB==1);

% znajdź wszystkie piksele składające się na pierwszy obiekt

max_pix=length(x);

% pierwszy obiekt składa się z max_pix pikseli

max_nr=1;

% największy jest obiekt 1

for i=2:N,

% przeszukaj obiekty od 2 do N

[y,x]=find(LAB==i);

% znajdź wszystkie piksele składające się na i-ty obiekt

if length(x)>max_pix

% sprawdź, czy nie znalazłeś nowego największego obiektu

max_pix=length(x);

% jeżeli tak, to zapamiętaj z ilu pikseli się składa

max_nr=i;

% i jaki ma numer

end
end

Największy obiekt wybieramy funkcją

bwselect

, a następnie wyświetlamy funkcją

imshow

.

[y,x]=find(LAB==max_nr);

% znajdź piksele składające się na największy obiekt

BW_MAX=bwselect(LAB,x(1),y(1),8);

% zaznacz tylko ten obiekt

figure, imshow(BW_MAX), title(’największy obiekt’);

% wyświetl go

Położenie i rozmiar tego obiektu (podane w milimetrach) obliczamy, a następnie
wyświetlamy wykonując podane poniżej instrukcje

DPI=72;

% rozdzielczość zdjęć

inch=25.4;
x_sr=0.5*(min(x)+max(x))*inch/DPI;

% położenie największego obiektu

y_sr=0.5*(min(y)+max(y))*inch/DPI;
szer=(max(x)-min(x))*inch/DPI;

% wymiary największego obiektu

wys =(max(y)-min(y))*inch/DPI;
sprintf(’największy obiekt: x=%.1f, y=%.1f, dx=%.1f, dy=%.1f’,
x_sr, y_sr, szer, wys)

Dla kilku różnych zdjęć należy porównać czy największy występujący na nich obiekt
rzeczywiście pokrywa się z największym obiektem wyznaczonym przez opracowany
algorytm. Porównać algorytm wykorzystujący funkcję

im2bw

z

algorytmem

wykorzystującym funkcję

edge

.

background image

Analizowane bitmapy

probka01

probka02

probka03

probka04

probka05

probka06

probka07

probka08

probka09

probka10

probka11

probka12

probka13

probka14


Wyszukiwarka

Podobne podstrony:
01-PRACOWNIK OBSŁUGI OBIEKTU, Instrukcje BHP, V - CPN
Instrukcja obiekt dynamiczny matlab 2015
instrukcja alarmowa w obiektach usługowych, instrukcje BHP
instrukcja do cw z prog obiektowego, Programowanie obiektowe, Sentenza
instrukcja bhp mycia i dezynfekcji pomieszczen urzadzen sprzetu i naczyn dla obiektow handlowych
instrukcja bhp dla placow cwiczen taktycznych oraz obiektow szkoleniowych
Instrukcja budowy obiektów kubaturowych z pustaków styropianowych, BUDOWLANKA
WARUNKI TECHNICZNE OBIEKTÓW [ 27 ], BEZPIECZEŃSTWO I HIGIENA PRACY, INSTRUKCJA BEZPIECZEŃSTWA POŻ
Instrukcja 9 Przeksztalcenia obiektow plaskich
Instrukcja 9 Przeksztalcenia obiektow plaskich
alarmowa w obiektach handlowych, instrukcje BHP
instrukcja postępowania w przypadku napadu na obiekt, Licencja Pracownika Ochrony
Instrukcja K1, 6-21, KATALOG OBIEKTÓW I ZNAKÓW UMOWNYCH
Instrukcja obiekt dynamiczny matlab 2015

więcej podobnych podstron