Przetwarzanie i analiza obrazów w Matlabie



Podobne dokumenty
MATLAB - podstawy użytkowania

Matlab MATrix LABoratory Mathworks Inc.

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Zygmunt Wróbel i Robert Koprowski. Praktyka przetwarzania obrazów w programie Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Wprowadzenie do środowiska

MATLAB Wprowadzenie. Literatura po polsku: Niektóre cechy MATLABa. Dlaczego warto poznać MATLABa? bo : Co to jest "Środowisko programowania" czyli IDE

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

MATLAB ŚRODOWISKO MATLABA OPIS, PODSTAWY

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA

Techniki wizualizacji. Ćwiczenie 2. Obraz cyfrowy w komputerze

1 Podstawy c++ w pigułce.

Inżynieria obrazów cyfrowych. Ćwiczenie 1. Środowisko MATLAB + Image Processing Toolbox - wprowadzenie

dr inż. Tomasz Krzeszowski

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Matlab Składnia + podstawy programowania

MATLAB wprowadzenie śycie jest zbyt krótkie, aby tracić czas na pisanie pętli!

PODSTAWY PRZETWARZANIA INFORMACJI OBRAZOWEJ

Laboratorium Cyfrowego Przetwarzania Obrazów

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Obliczenia w programie MATLAB

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Zanim zaczniemy GNU Octave

Instalacja Pakietu R

WEKTORY I MACIERZE. Strona 1 z 11. Lekcja 7.

Wykład 4. Matlab cz.3 Tablice i operacje na tablicach

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Laboratorium Przetwarzania Sygnałów

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Treść wykładu. Przetwarzanie i analiza obrazów w Matlabie Cz.2. Badanie i filtracja szumu. Obraz i jego szum: Profile i histogram obrazu szumu

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

WPROWADZENIE DO ŚRODOWISKA SCILAB

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Pakiety matematyczne. Matematyka Stosowana. dr inż. Krzysztof Burnecki

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

PODSTAWY INFORMATYKI 1 MATLAB CZ. 3

Elementy metod numerycznych - zajęcia 9

Matlab Składnia + podstawy programowania

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

MATLAB Materiały pomocnicze do ćwiczeń z Podstaw Informatyki

Wprowadzenie do Scilab: macierze

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Ćwiczenie 6. Transformacje skali szarości obrazów

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Podstawy Programowania C++

Ćwiczenie 1. Wprowadzenie do programu Octave

Podstawy MATLABA, cd.

1 Podstawy c++ w pigułce.

Ćwiczenie 1. Wprowadzenie do programu Octave

Wstęp do Programowania Lista 1

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Modelowanie rynków finansowych z wykorzystaniem pakietu R

do MATLABa programowanie WYKŁAD Piotr Ciskowski

3. OPERACJE BEZKONTEKSTOWE

Ćwiczenie 4. Matlab - funkcje, wielomiany, obliczenia symboliczne

Matlab MATrix LABoratory Mathworks Inc.

Podstawy programowania skrót z wykładów:

n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.

Przetwarzanie sygnałów

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawowe operacje na macierzach

Wykład 4. Matlab cz.3 Tablice i operacje na tablicach

Metody numeryczne Laboratorium 2

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Laboratorium Przetwarzania Sygnałów

Komputerowa analiza obrazu Laboratorium 4

Maxima i Visual Basic w Excelu

Podstawowe operacje na macierzach, operacje we/wy

Laboratorium Cyfrowego Przetwarzania Obrazów

MATLAB tworzenie własnych funkcji

Zakłócenia w układach elektroenergetycznych LABORATORIUM

Ćwiczenie 3: Wprowadzenie do programu Matlab

Wykorzystanie programów komputerowych do obliczeń matematycznych

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

Laboratorium Algorytmy Obliczeniowe. Lab. 9 Prezentacja wyników w Matlabie

Pakiety matematyczne INP2708W,L

WYKŁAD 3. Przykłady zmian w obrazie po zastosowaniu Uniwersalnego Operatora Punktowego

MATrix LABoratory. A C21 delta tvx444 omega_zero. hxx J23 aaa g4534 Fx_38

ŚRODOWISKO MATLAB cz.3 Implementowanie algorytmów w skryptach i funkcjach programu

Cyfrowe Przetwarzanie Obrazów i Sygnałów

Metody i analiza danych

Instalacja

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

Wprowadzenie do systemu Scilab

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA, cz2.

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Metody komputerowe w obliczeniach inżynierskich

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Transkrypt:

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 1

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) 3 Interaktywne środowisko Matlab a: Pomoc (podręczniki) Bieżący folder Historia (poprzednie komendy) Okno KOMEND i wyników (dialogu) 4 2

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. 5 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 6 3

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 7 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) 8 4

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 9 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) 10 5

Ł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 11 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); >> 12 6

Jakie funkcje mamy do dyspozycji - pokaże HELP 13 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 14 7

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 15 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.* x y = 0 0.0100 0.0400 0.0900 0.1600 0.2500 16 8

Jak otrzymać wykres funkcji >> x=0:0.1:4*pi; >> plot(x,sin(x)); >> grid on 17 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 18 9

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 19 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 20 10

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 21........ 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) 22 11

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 23 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 24 12

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 Informacje o pliku można uzyskać komendą: imfinfo( nazwa_pliku) >> dir *.bmp Na przykład: >> imfinfo('r10k3.bmp') CIEN.BMP PIRAMID.BMP Filename: 'r10k3.bmp' GRACE_K.BMP FileModDate: R10G3.BMP '15-Apr- 2005 15:27:14' M432.BMP R10K3.BMP FileSize: 198 MT24.bmp MT8.bmp NIEBO.BMP R10K7.BMP Format: 'bmp' Width: 10 Height: 10 BitDepth: 4 ColorType: 'indexed' NumColormapEntries: 16 Colormap: [16x3 double].......... 25 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 26 13

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'); 27 Obraz indeksowany - postać cyfrowa a) macierz indeksów b) macierz mapy kolorów A = map = 9 9 15 15 15 15 15 15 15 15 0 0 0 9 9 9 15 15 15 15 15 15 15 0.7490 0 0 0 0.7490 0 0 9 9 9 15 15 15 15 15 15 0.7490 0.7490 0 0 0 9 9 9 15 15 15 15 15 0 0 0.7490 0 0 0 9 9 9 15 15 15 15 0.7490 0 0.7490 0 0 0 0 9 9 9 15 15 15 0 0.7490 0.7490 0 0 0 0 0 9 9 9 15 15 0.7529 0.7529 0.7529 0 0 0 0 0 0 9 9 9 15 0.5020 0.5020 0.5020 0 0 0 0 0 0 0 9 9 9 1.0000 0 0 0 1.0000 0 0 0 0 0 0 0 0 0 9 9 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 28 14

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 29 >> 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 a) macierz odcieni czerwonych Konwersja: indeksowany na RGB Przykład: B=ind2rgb(A,map) 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) macierz odcieni zielonych 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 c) macierz odcieni niebieskich 30 15

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 31 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 32 16

OBRAZY SZARE 33 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 34 17

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 35 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(..) 36 18

Obraz jako powierzchnia 3D A=imread('NIEBO.BMP'); subplot(1,2,1); imshow(a); subplot(1,2,2); surf(double(a)); colormap 'gray' 37 Profile obrazu naz='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 38 19

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; 39 Normalizacja obrazu % rozciąga zakres odcieni do maksymalnego naz='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; 40 20

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; 41 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']); 42 21

Wycinanie fragmentu obrazu naz='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'); 43 Przykład przetwarzania 44 22

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'); 45 Nieco inny sposób wyrównywania cienia 46 23

Problemy przetwarzania (1) 47 Problemy przetwarzania (2) 48 24

Problemy przetwarzania (3) 49 Problemy przetwarzania (4) 50 25

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. 51 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. 52 26