przetwarzanie i analiza obrazów w matlabie...1 przetwarzanie i analiza obrazów w matlabie...

26
1 Przetwarzanie i analiza obrazów w Matlabie Opracowal: dr inż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania matematycznego firmy MathWorks Inc. (od roku 1984) to język i środowisko programowania do obliczeń naukowo-technicznych oraz obszerny zestaw tematycznych bibliotek podprogramów (toolbox’ów) i wiele tysięcy stron podręczników

Upload: others

Post on 31-Dec-2019

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

1

Przetwarzanie i analiza

obrazów w Matlabie

Opracował: dr inż. Z. Rudnicki

ZKiEM AGH

MATLAB(MATrix LABoratory)

- pakiet oprogramowania matematycznego firmy

MathWorks Inc. (od roku 1984)

to

język i środowisko programowania

do obliczeń naukowo-technicznych

oraz

obszerny zestaw tematycznych

bibliotek podprogramów (toolbox’ów)

i wiele tysięcy stron

podręczników

Page 2: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

2

3

Literatura po polsku:

• Z.Wróbel, R.Koprowski: „Przetwarzanie obrazu w

programie MATLAB”. Wyd. Uniw. Śl., K-ce 2001

• A.Kamińska, B.Pańczyk: „Matlab - przykłady i zadania”

- wyd. Mikom 2002, z serii „ćwiczenia z...” (150 stron)

• Mrozek B, Mrozek Z, MATLAB 6, PLJ Warszawa 2001

• J.Brzózka, L.Dorobczyński: „Programowane w Matlab”

wyd.Mikom 1998. (314 stron)

4

Interaktywne środowisko Matlab’a:

Okno

KOMEND

i wyników

(dialogu)

Bieżący

folderPomoc

(podręczniki)

Historia

(poprzednie

komendy)

Page 3: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

3

5

Niektóre cechy MATLABa (wersja 6)

• Przyjazne dla użytkownika, interakcyjne środowisko

• Język programowania wysokiego poziomu

• Zbiór (ok.30) toolbox’ów - zestawów procedur i funkcji

• Zbiór podręczników (ok.70 x kilkaset stron, 433MB)

• MATLAB umożliwia m.in:

– wykonywanie obliczeń naukowych i inżynierskich,

– modelowanie i symulację,

– analizę danych (w tym: sygnałów i obrazów)

– graficzną wizualizację danych i wyników obliczeń.

• Podstawowym typem danych w MATLABie jest tablica

(macierz) o elementach rzeczywistych lub zespolonych.

6

Typy i nazwy zmiennych

�Wszystkie zmienne w MATLABie sa traktowane

jak macierze

�Wektory i skalary są szczególnymi przypadkami

macierzy

�Nazwy zmiennych rozpoczynają się od litery, a

po niej mogą być litery, cyfry i znaki podkreślenia

�Pamiętanych jest 19 pierwszych znaków

Page 4: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

4

7

Nazwy i deklarowanie zmiennych

• MATLAB rozróżnia duże i małe litery

– polecenia standardowe należy pisaćmałymi literami

– dla nazw własnych programów i zmiennych można

używać małych i dużych liter

• Deklarowanie typu i wymiarów macierzy odbywa

się automatycznie - przez rozpoznanie rodzaju

wpisanych wartości

oraz maksymalnych wskaźników

8

Znaki specjalne (1)

= znak równości przypisuje zmiennej wartość (wartości) wyrażenia

n.p.: x=2*sin(pi/6)

. kropka poprzedza część ułamkową liczby (lub nazwę pola

rekordu)

, przecinek rozdziela indeksy, argumenty funkcji lub poszczególne

instrukcje (zamiast zmiany linii)

; dajemy po instrukcjach jeśli nie chcemy wyświetlania wyników

ich realizacji w przeciwnym przypadku kończymy instrukcje

zmianą linii lub przecinkiem.

% znak procentu poprzedza komentarze w programach (m-plikach)

Page 5: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

5

9

Znaki specjalne (2) - dwukropek

:

1) do definiowania ciągów czyli wektorów na przykład:

5:2:13 oznacza: "ciąg od 5 z przyrostem 2 do 13"

5:10 oznacza: "ciąg od 5 do 10 domyślnie z przyrostem 1”

2) użyty zamiast wskaźnika macierzy zastępuje wszystkie

wartości tego wskaźnika na przykład:

A(2, :) oznacza wszystkie elementy drugiego wiersza,

A(:, 3) oznacza wszystkie elementy trzeciej kolumny

A(:) oznacza wszystkie elementy macierzy przetworzonej na

wektor kolumnowy przez sklejenie poszczególnych kolumn

10

Znaki specjalne (3) - nawiasy:

[ ] - do definiowania macierzy np.: A= [7,5,3; -2,1,0]

A = 7 5 3

-2 1 0

( ) - używane są w wyrażeniach

np.: beta = (a^3 +sin(b)^2) / (4*a)

oraz dla wskaźników macierzy

np.: MX(i, j) = 2*i + j -1

i argumentów funkcji

np.: Przeciwprost = sqrt( a^2 +b^2)

Page 6: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

6

11

Łagodny start - kalkulator

Znak gotowości do przyjmowania komend:

>>

Wpisanie w oknie komend 2+3 i [enter] daje wynik:

>> 2+3

ans =

5

>>

Nie wstawiliśmy wyniku do żadnej zmiennej

dlatego MATLAB użył zmiennej „ans”

12

Obliczenia kalkulatorowe c.d.

Możemy wyniki obliczeń podstawiać do zmiennych np.:

>> x=sin(pi/2)

x =

1

>>

Komenda zakończona średnikiem wykona się lecz nie będzie

wyświetlony jej wynik:

>> x=sin(pi/2);

>>

Page 7: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

7

13

Jakie funkcje mamy do dyspozycji

- pokaże HELP

14

Ciągi i wektory

Przykłady definiowania ciągów:

>> i=1:6

i = 1 2 3 4 5 6_____________________________

>> a(i)=(i-1)/2

a = 0 0.5 1.0 1.5 2.0 2.5____________________________

>> x=-0.2:0.1:0.3

x = -0.2 -0.1 0 0.1 0.2 0.3____________________________

>> v=[12.1, -3.2, 0.03, 44.4]

v = 12.1000 -3.2000 0.0300 44.4000

Page 8: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

8

15

Macierze: wprowadzanie, wyświetlanie

>> A=[4,1,5; 2,3,6]

A =

4 1 5 2 3 6

Dwukropek zastępuje wszystkie wartości wskaźnika

A więc pierwszy wiersz macierzy to:

>> A(1,: )

ans = 4 1 5

Podobnie aby wybrać trzecią kolumnę wpisujemy:

>> A(:,3)

ans = 5

6

>> A(2,2)

ans = 3

16

Operacje na macierzach czy na ich elementach?

Wpisanie x=0 : 0.1 : 0.5 daje macierz wierszową (wektor wierszowy):

>> x=0 : 0.1 : 0.5

x = 0 0.1000 0.2000 0.3000 0.4000 0.5000

Operatory bez kropki to działania macierzowe a mnożenie dwu

macierzy to mnożenie wierszy przez kolumny a więc nie można:

>> y=x^2

??? Error using ==> ^ Matrix must be square.

ani nie da się:

>> y=x*x

??? Error using ==> * Inner matrix dimensions must agree.

trzeba użyć działanie na elementach czyli operator z kropką:

>> y=x .* xy = 0 0.0100 0.0400 0.0900 0.1600 0.2500

Page 9: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

9

17

Jak otrzymać wykres funkcji

>> x=0:0.1:4*pi;

>> plot(x,sin(x));

>> grid on

18

Programy czyli ”m-pliki”: skrypty i funkcje

Programy (wieloliniowe) można pisać w edytorze

MATLABa lub w Notatniku

Zapisywane są do plików z rozszerzeniem *.m

Uruchamiane są przez wpisanie nazwy pliku (bez

rozszerzenia „ .m ” w oknie komend

Rozróżniamy:

• skrypty - operujące na zmiennych przestrzeni

roboczej Matlaba

• funkcje - posiadające zmienne lokalne

Page 10: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

10

19

Przykład m-pliku skryptowego

% po znaku procentu są tzw. komentarze

% program rozwiazywania równania kwadratowego

a=input('a='); b=input('b='); c=input('c=');

delta = b*b-4*a*c;

if delta<0

disp('Brak pierwiastkow rzeczywistych');

else

x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a);

disp('x1='); disp(x1); disp('x2='); disp(x2);

end

20

To samo napisane jako funkcja prkw(a, b, c):

function [x1, x2] = prkw(a, b, c)

% ta funkcja oblicza pierwiastki x1, x2

% rownania: a*x^2 + b*x + c = 0

delta = b*b-4*a*c;

if delta<0

% dla delta<0 podstawimy NaN = "nieokreslone"

x1=NaN; x2=NaN

else

x1=(-b-sqrt(delta))/(2*a);

x2=(-b+sqrt(delta))/(2*a);

end

Page 11: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

11

21

Tematyka toolbox-ów Matlaba

SIMULINK - Symulacja układów

dynamicznych

Układy Sterowania

Przetwarzanie i analiza Sygnałów

Przetwarzanie i analiza Obrazów

Sieci Neuronowe;

Logika rozmyta

Statystyka;

Finanse i giełda

Akwizycja danych

Projektowanie filtrów

Bazy danych

Matematyka symboliczna

Identyfikacja systemów

Analiza falkowa i Fourier'a

Optymalizacja

Równania różniczkowe

Sterowanie nieliniowe

Sterowanie predykcyjne

Analiza chemiczna

Geografia i mapy

Funkcje sklejane (splajny)

Metoda elem. skończonych

Teoria grafów

. . . . . . . .

22

Image Processing Toolbox

to zbiór funkcji do przetwarzania i analizy obrazów w

Matlabie:

– 263 funkcje (w wersji 5 dla Matlaba 7)

– obsługa różnego typu obrazów

– przetwarzanie punktowe i operacje kontekstowe (filtrowanie)

– charakterystyki graficzne (histogramy, profile, ...)

– wyznaczanie liczbowych parametrów i miar

– możliwość montowania animacji (plików *.avi)

– podręcznik ponad 1000 stron (w jęz. angielskim)

Page 12: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

12

23

Typy obrazów w Matlabie

Matlab obsługuje 4 typy obrazów:

1) czarno-białe czyli binarne (BW image)

2) szare (gray, intensity image)

3) barwne typu RGB (Red, Green , Blue)

4) barwne indeksowane

24

Postaci cyfrowych zapisów obrazu różnego

typu o rozmiarach M x N pikseli:Obraz czarno-biały jest macierzą o rozmiarach M x N zawierającą

tylko zera i jedynki (0=czarny, 1=biały piksel)

Obraz szary to macierz o rozmiarach M x N o wartościach ze

zbioru [0,255] (typ uint8) lub [0, 1] (typ double) co odpowiada

256 odcieniom szarości.

Obraz barwny RGB to macierz trójwymiarowa (M x N x 3), a jej

trzy składowe macierze podają jasności składowych barw pikseli:

R – czerwony (Red), G – zielony (Green), B – niebieski (Blue).

Obraz indeksowany jest zapisany dwoma macierzami. Pierwsza o

wymiarach M x N podaje indeksy (numery) kolorów dla każdego

piksela. Druga macierz przechowuje paletę kolorów. Posiada trzy

kolumny odpowiadające odcieniom trzech barw podstawowych i

tyle wierszy ile kolorów w palecie

Page 13: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

13

25

Wyświetlanie nazw plików graficznych

i informacji o nich (w Matlabie)

• Po wybraniu odpowiedniego

foldera jako bieżącego,

komenda:

dir *.bmp

wyświetli nazwy plików typu

BMP

Na przykład:

>> imfinfo('r10k3.bmp')

Filename: 'r10k3.bmp'

FileModDate: '15-Apr-

2005 15:27:14'

FileSize: 198

Format: 'bmp'

Width: 10

Height: 10

BitDepth: 4

ColorType: 'indexed'

NumColormapEntries: 16

Colormap: [16x3

double]

. . . . . . . . . .

>> dir *.bmp

CIEN.BMP PIRAMID.BMP

GRACE_K.BMP R10G3.BMP

M432.BMP R10K3.BMP

MT24.bmp R10K7.BMP

MT8.bmp

NIEBO.BMP

•Informacje o pliku można

uzyskać komendą: imfinfo(‘nazwa_pliku)

26

Wczytywanie obrazów i sprawdzanie typu

Ogólna postać instrukcji wczytywania obrazu z pliku do

macierzy dla obrazów szarych i czarno-białych:

nazwa_macierzy = imread(nazwa_pliku);

dla obrazu kolorowego typu indeksowanego funkcja ta wczytuje

także drugą macierz - paletę (mapę) kolorów.

Wczytamy przykładowy obraz o rozmiarach 10x10 pikseli:

[A map]=imread('r10k3.bmp');

Typy (klasy) wszystkich zmiennych możemy sprawdzićkomendą whos a typ pojedynczej - funkcją class:

>> whos

Name Size Bytes Class

A 10x10 100 uint8 array

map 16x3 384 double array

Grand total is 148 elements using 484 bytes

>> class(A)

ans = uint8

Page 14: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

14

27

Wyświetlanie obrazów

do wyświetlenia obrazu służy instrukcja:

imshow(macierz_obrazu, macierz_palety);

a dla obrazów szarych wystarczy:

imshow(macierz_obrazu);

w naszym przypadku wpiszemy: imshow(A,map)

ale aby ten malutki obrazek powiększył się zastosujemy:

imshow(A,map,'notruesize');

28

Obraz indeksowany - postać cyfrowaa) macierz indeksów b) macierz mapy kolorów

A =

9 9 15 15 15 15 15 15 15 15

9 9 9 15 15 15 15 15 15 15

0 9 9 9 15 15 15 15 15 15

0 0 9 9 9 15 15 15 15 15

0 0 0 9 9 9 15 15 15 15

0 0 0 0 9 9 9 15 15 15

0 0 0 0 0 9 9 9 15 15

0 0 0 0 0 0 9 9 9 15

0 0 0 0 0 0 0 9 9 9

0 0 0 0 0 0 0 0 9 9

map =

0 0 0

0.7490 0 0

0 0.7490 0

0.7490 0.7490 0

0 0 0.7490

0.7490 0 0.7490

0 0.7490 0.7490

0.7529 0.7529 0.7529

0.5020 0.5020 0.5020

1.0000 0 0

0 1.0000 0

1.0000 1.0000 0

0 0 1.0000

1.0000 0 1.0000

0 1.0000 1.0000

1.0000 1.0000 1.0000

Page 15: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

15

29

Konwersja typu obrazu

Do sprawdzania typu obrazu służą funkcje:

isbw(obraz), isgray(obraz),

isrgb(obraz), isind(obraz),

dające wynik 0=nie lub 1=tak.

Do konwersji obrazu wraz z paletą na inny typ mamy

funkcje:

ind2rgb, ind2gray

30

Konwersja: indeksowany na RGB

Przykład: B=ind2rgb(A,map)>> B

B(:,:,1) =

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

0 1 1 1 1 1 1 1 1 1

0 0 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1

0 0 0 0 0 1 1 1 1 1

0 0 0 0 0 0 1 1 1 1

0 0 0 0 0 0 0 1 1 1

0 0 0 0 0 0 0 0 1 1

B(:,:,2) =

0 0 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1

0 0 0 0 0 1 1 1 1 1

0 0 0 0 0 0 1 1 1 1

0 0 0 0 0 0 0 1 1 1

0 0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

B(:,:,3) =

0 0 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1

0 0 0 0 0 1 1 1 1 1

0 0 0 0 0 0 1 1 1 1

0 0 0 0 0 0 0 1 1 1

0 0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

a) macierz odcieni

czerwonych

b) macierz odcieni

zielonych

c) macierz odcieni

niebieskich

Page 16: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

16

31

Konwersja kolorowego na szary (rgb2gray)

Jeśli chcemy z kolorowego uzyskać obraz szary (bo takimi będziemy

się dalej zajmować) to zastosujemy odpowiednią funkcję:C = rgb2gray(B) - która daje obraz szary typu double:

C=

0.2989 0.2989 1.0000 1.0000 1.0000 1.0000 1.0000

0.2989 0.2989 0.2989 1.0000 1.0000 1.0000 1.0000

0 0.2989 0.2989 0.2989 1.0000 1.0000 1.0000

0 0 0.2989 0.2989 0.2989 1.0000 1.0000

0 0 0 0.2989 0.2989 0.2989 1.0000

0 0 0 0 0.2989 0.2989 0.2989

0 0 0 0 0 0.2989 0.2989

0 0 0 0 0 0 0.2989

0 0 0 0 0 0 0

0 0 0 0 0 0 0

32

Konwersja double ���� uint8

Najczęściej obrazy szare mają typ uint8 i wartości pikseli w zakresie 0 do 255 czyli

jednobajtowe liczby całkowite.

Przekonwertujmy obraz C na typ uint8:

>> A=uint8(C*255)

76 76 255 255 255 255 255 255 255 255

76 76 76 255 255 255 255 255 255 255

0 76 76 76 255 255 255 255 255 255

0 0 76 76 76 255 255 255 255 255

0 0 0 76 76 76 255 255 255 255

0 0 0 0 76 76 76 255 255 255

0 0 0 0 0 76 76 76 255 255

0 0 0 0 0 0 76 76 76 255

0 0 0 0 0 0 0 76 76 76

0 0 0 0 0 0 0 0 76 76

Page 17: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

17

33

OBRAZY SZARE

34

Wczytywanie, zmiana jasności, wyswietlanie (1)

Zadanie:

a) wczytać obraz NIEBO.BMP i zbadać typ macierzy:

>>A = imread (‘NIEBO.BMP’); class(A)

ans = uint8

b) wyznaczyć wartość najjaśniejszego i najciemniejszego piksela:

>> Amin=min(A(:)), Amax=max(A(:))

Amin =

0

Amax =

212

c) skorygować jasność:

>> A=A+20;

??? Error using ==> +

Function '+' not defined for variables of class 'uint8'.

BŁĄD !!!Dodawanie i inne działania

arytmetyczne NIE są

dopuszczalne dla liczb klasy

uint8

Page 18: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

18

35

Wczytywanie, zmiana jasności, wyświetlanie (2)

c) skorygować jasność:

>> A=uint8(double(A)+20);

d) wyświetlić rezultat:

>> imshow(A)

Poprawiono błąd

przez zastosowanie

konwersji typów

36

Obrazy szare - konwersja uint8 ���� double

Dowolne operacje arytmetyczne na macierzy obrazu

w Matlabie wymagają przekonwertowania

na typ double. Są dwa różne sposoby takiej konwersji.

1) Konwersja tylko typu (klasy) bez zmiany wartości:

- macierz typu double o zakresie [0..255] uzyskujemy z obrazu

funkcją double(..); konwersja odwrotna do klasy uint8 i zakresu

[0..255] musi być wtedy wykonana funkcją uint8(..)

2) Zmiana typu i przeskalowanie wartości z zakresu [0..255] na

zakres [0..1]:

- macierz typu double o zakresie [0..1] uzyskujemy z obrazu

funkcją im2double(..); konwersja odwrotna do klasy uint8 i

zakresu [0..255] musi być wtedy wykonana funkcją im2uint8(..)

Page 19: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

19

37

Obraz jako powierzchnia 3DA=imread('NIEBO.BMP');

subplot(1,2,1); imshow(A);

subplot(1,2,2); surf(double(A)); colormap 'gray'

38

Profile obrazunaz='NIEBO.BMP'; A=imread(naz);

[Lw,Lk]=size(A); X0=250;

profil = improfile(A,[X0,X0],[1,Lw]);

subplot(1,2,1); imshow(A); title(naz); line([X0,X0],[1,Lw])

subplot(1,2,2); plot(profil); grid on

Page 20: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

20

39

Histogram obrazu% Podaje liczby pikseli dla poszczególnych odcieni

naz='NIEBO.BMP'; A=imread(naz);

subplot(1,2,1); imshow(A); title(naz);

subplot(1,2,2); imhist(A); title(['Histogram ',naz]); grid on;

40

Normalizacja obrazu% rozciąga zakres odcieni do maksymalnegonaz='NIEBO.BMP'; A=im2double(imread(naz));

Amin=min(A(:)), Amax=max(A(:))

B=imadjust(A, [Amin Amax], [0 1]);

subplot(1,2,1); imshow(B); title([naz,' po normalizacji']);

subplot(1,2,2); imhist(B); title(['Histogram ',naz]); grid on;

Page 21: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

21

41

„Wyrównywanie histogramu”naz='NIEBO.BMP'; A=imread(naz);

B=histeq(A);

subplot(1,2,1); imshow(B); title([naz,' po wyr.histogr.']);

subplot(1,2,2); imhist(B); title(['Histogram ',naz]); grid on;

42

Filtracja medianowa

naz='NIEBO.BMP'; A=im2double(imread(naz));

B = medfilt2(A,[9 9]);

subplot(1,2,1); imshow(A); title(naz);

subplot(1,2,2); imshow(B); title([naz,' po filtracji 9x9']);

Page 22: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

22

43

Wycinanie fragmentu obrazunaz='GRACE_K.BMP'; GR=imread(naz); [Lw Lk]=size (GR);

x1=50; x2=190; y1=130; y2=235; dx=x2-x1; dy=y2-y1;

B=imcrop(GR, [x1, y1, dx, dy]);

subplot(1,2,1); imshow(GR); title(naz);

line([x1 x2],[y1 y1]); line([x2 x2],[y1 y2]);

line([x1 x2],[y2 y2]); line([x1 x1],[y1 y2]);

subplot(1,2,2); imshow(B); title('Wycinek');

44

Przykład przetwarzania

Page 23: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

23

45

Program do tego przykładu przetwarzania

% A - obraz oryginalny i jego rozmiary: Lw, Lk

% Do przetwarzania konwertujemy na double:

% Filtracja medianowa tworzy składowąniskoczęstotliwościową L:

% Dla "wyrównania cienia" odejmujemy L od

obrazu a dodajemy 120:

% oraz wykonujemy "wyrównanie histogramu":

% Wyznaczamy profile:

% (1) dla oryginału:

% (2) po wyrównaniu cienia:

% (3) dla obrazu wynikowego:

% Sporządzamy wykres profili

A=imread('cien.bmp'); [Lw,Lk]=size(A)

subplot(2,2,1); imshow(A); title('a) Oryginał');

ha=line([100,100],[1,Lw]); set(ha,'Color','red');

Ad=double(A);

L=medfilt2(Ad,[15 15]);

B=Ad - L+120;

subplot(2,2,2); imshow(uint8(B));

title('b) Po wyrównaniu cienia');

C=histeq(uint8(B));

subplot(2,2,3); imshow(C);

title('c) Po wyrównaniu histogramu');

pr1 = improfile(A,[100,100],[1,Lw]);

pr2 = improfile(B,[100,100],[1,Lw]);

pr3 = improfile(C,[100,100],[1,Lw]);

k=1:Lk-1;

subplot(2,2,4); plot(k, pr1,'r', k,pr2,'g')

title('d) Profile obrazów (a), (b)'); legend('a','b');

46

Nieco inny sposób wyrównywania cienia

Page 24: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

24

47

Problemy przetwarzania (1)

48

Problemy przetwarzania (2)

Page 25: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

25

49

Problemy przetwarzania (3)

50

Problemy przetwarzania (4)

Page 26: Przetwarzanie i analiza obrazów w Matlabie...1 Przetwarzanie i analiza obrazów w Matlabie Opracował: dr in ż. Z. Rudnicki ZKiEM AGH MATLAB (MATrix LABoratory) - pakiet oprogramowania

26

51

Numerowanie obiektów - BWLABEL

Funkcja bwlabel – numeruje (indeksuje) spójne obszary na obrazie

binarnym BW przy założonym sąsiedztwie typu s (domyślnie s=8 czyli

rozpatrywane jest sąsiedztwo 8-miopikselowe)

Składnia:

L = bwlabel(BW,s)

[L, n] = bwlabel(BW,s)

Wynikiem jest macierz o rozmiarach takich samych jak BW w której

liczby wyrażające jasność pikseli zastąpiono numerami kolejnych

obiektów do których te piksele należą. Tło jest obiektem o numerze

zerowym a pozostałe obiekty numerowane są kolejnymi liczbami

naturalnymi od 1 do n.

52

Cechy obiektu - Funkcja imfeature

Składnia: 1) stats = imfeature(L,measurements)

2) stats = imfeature(L,measurements,n)

Oblicza (mierzy) parametry dla każdego indeksowanego regionu

macierzy L.

Dodatnie całkowite elementy macierzy L odpowiadają różnym

regionom na przykład elementy równe 1 odpowiadają regionowi

numer 1, elementy równe 2 – regionowi nr 2 itd.

stats jest tablicą strukturalną o długości max(L(:)). Pola tej tablicy

reprezentują miary regionu wyspecyfikowane w measurements

measurements to zbiór nazw parametrów (typu string):

'Area' 'Image' 'EulerNumber' 'Centroid' 'FilledImage'

'Extrema' 'BoundingBox' 'FilledArea 'EquivDiameter' 'MajorAxisLength'

'ConvexHull' 'Solidity' 'MinorAxisLength' 'ConvexImage' 'Extent'

'Eccentricity' 'ConvexArea' 'PixelList' 'Orientation'

Zamiast listy może być użyte słowo 'all' – rozkaz wyznaczenia wyznaczenie

wszystkich parametrów.