Zliczanie obiektów
Zliczanie obiektów
- analiza obrazów rastrowych -
- analiza obrazów rastrowych -
Matlab Image Processing Toolbox
Matlab Image Processing Toolbox
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 zró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
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
Øð 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
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);
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]);
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
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); % znajdz 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); % znajdz wszystkie piksele składające się na i-ty obiekt
if length(x)>max_pix % sprawdz, 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); % znajdz 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.
Analizowane bitmapy
probka01 probka02 probka03
probka04 probka05 probka06
probka07 probka08 probka09
probka10 probka11 probka12
probka13 probka14
Wyszukiwarka
Podobne podstrony:
Instrukcja 9 Przeksztalcenia obiektow plaskichInstrukcja obiekt dynamiczny matlab 15instrukcja bhp mycia i dezynfekcji pomieszczen urzadzen sprzetu i naczyn dla obiektow handlowychinstrukcja przeciwpozarowa dla obiektow uslugowychinstrukcja bhp dla placow cwiczen taktycznych oraz obiektow szkoleniowychinstrukcja prezentacja2instrukcja bhp przy obsludze euro grillaDS1000PL InstrukcjaBlaupunkt CR5WH Alarm Clock Radio instrukcja EN i PLInstrukcja do cwiczenia 4 Pomiary oscyloskopoweInstrukcja F (2010)Instrukcja Programowania Zelio Logic 2 wersja polskawięcej podobnych podstron