Laboratorium 5 Podstawowe operacje na obrazach w środowisku Matlab WPROWADZENIE MATLAB (MATrix LABoratory) środowisko programistyczne, zaprojektowane i rozwinięte celem udoskonalenia operacji na macierzach (w przeciwieństwie do np. JAVY, Matlab nie wymaga deklaracji rozmiaru tablicy, co znacznie zmniejsza złożoność obliczeniową projektowanych algorytmów). Toolbox zestaw funkcji, narzędzi i bibliotek zaimplementowanych w Matlabie, dobranych pod kątem określonego zastosowania. Toolbox y Matlaba wykorzystywane w przetwarzaniu obrazów: Przetwarzanie obrazów (Image Processing Toolbox) Przetwarzanie sygnałów (Signal Processing Toolbox) Sieci neuronowe (Neural Network Toolbox) Logika rozmyta (Fuzzy Logic Toolbox) Falki (Wavelet Toolbox) Pulpit Matlaba: Okno poleceń (Command Window) Przeglądarka przestrzeni roboczej (Workspace Browser) Okno aktualnej ścieżki (Current Directory Window) Okno historii poleceń (Command History Window) Okno wykresu (Figure Window) pojawia się tylko po wywołaniu
Licencja studencka: www.mathworks.com Gdzie szukać pomocy? (czyli polecenie >>helpbrowser) >>doc nazwa_funkcji %wyświetla pełną dokumentację funkcji >>help nazwa_funkcji %wyświetla podstawowe informacje o funkcji (np. o składni) >>whos pozwala podejrzeć zmienne i ich typ w pamięci. >>clear usuwa wszystkie zmienne z pamięci. Pliki Matlaba Nazwa.m (plik wykonywalny, podstawowy) Nazwa.mat (plik binarny podwójnej precyzji) do zapisu zmiennych lub całej przestrzeni roboczej Nazwa.fig (wykres) Wyrównanie a normalizacja histogramu Wyrównywanie histogramu polega upodobnieniu histogramu przetwarzanego obrazu do histogramu rozkładu równomiernego, w którym wszystkie poziomy intensywności mają jednakową częstotliwość występowania (zwiększenie kontrastu). Możliwe jest wyrównywanie lokalne. W praktyce wyrównywanie histogramu polega na przekształceniu obrazu przy pomocy odpowiedniej tablicy LUT. Operacja ta pozwala uwypuklić szczegóły obrazu, które z uwagi na niewielki kontrast są słabo widoczne. Normalizacja histogramu polega na rozciągnięciu zakresu tonalnego obrazu (jeżeli intensywność pikseli w obrazie wykorzystuje jedynie część dostępnej skali). Proces ten również może być przeprowadzony lokalnie. Detekcja krawędzi Filtry detekcji krawędzi możliwe do zaimplementowania w Matlabie Canny ego Zero crossing Laplasian of Gaussian (LoG) Prewitt a Roberts a Sobel a
Podstawy programowania w środowisku Matlab Zmienne Deklaracja zmiennych następuje po przypisaniu do zmiennej wartości. Matlab rozróżnia duże i małe litery! >> a = 5; >> A = 7; Aby wyświetlić wartość zmiennej należy wprowadzić jej oznaczenie i wcisnąć Enter. >> a a = 5 Zmienne w środowisku Matlab nie posiadają określonego typu, a więc w dowolnym momencie zmiennej liczbowej można przypisać wartość znakową. Zmienne znakowe podaje się w apostrofach. >> a = 'napis' a = napis Działania >> A + a; >> B = A - a; Średnik Umieszczony na końcu linii powoduje, że wynik operacji nie pojawi się na standardowym wyjściu. >> A + 5; >> A + 5 Ułamki Zapisuje się z kropką. >> d = 0.5; Wektory Tworzenie wektorów: >> [4 ] 4 W ten sposób można stworzyć wektor dowolnych rozmiarów: >> [ 5-6] 5-6 Aby utworzyć wektor pionowy używamy znaku transpozycji: >> [ 5 6]'
5 6 Często potrzebny jest wektor z kolejnymi liczbami całkowitymi. Tworzymy go następująco: >> [-:] - - - 0 Aby uzyskać analogiczny wektor, z tym że o odstępach różnych od należy dodać jeden parametr: >> [:.5:].0000.500.5000.7500.0000.500.5000.7500.0000 Dostęp do i-tej pozycji wektora zapewnia nam opcja: >> v().500 Tymczasowe wektory. >> 0::8 0 4 6 8 >> ans' 0 4 6 8 Operacje na wektorach >> u = [:8]; >> [8:-:]; >> u-v -7-5 - - 5 7 >> u+v 9 9 9 9 9 9 9 9 >> -*u - -4-6 -8-0 - -4-6 >> -*u+v/ 0.6667 -.6667-4.0000-6. -8.6667 -.0000 -. -5.6667
Macierze Definiowanie macierzy przebiega podobnie jak wektorów. Kolejne wiersze oddziela się średnikami. >> A = [ ; 4 5; 6 7 8] A = 4 5 6 7 8 Innym sposobem deklaracji wektora jest traktowanie go jako wektor wektorów transponowanych. >> B = [[ ]'[ 4 7]'[ 5 8]'] B = 4 5 7 8 Macierz wypełniona zerami: >> z = zeros() z = 0 0 0 0 0 0 0 0 0 >> z = zeros(,) z = 0 0 0 0 0 0 Operacje na macierzach >> A*v(:)' 6 8 46 >> A(:,:) 4 5 >> A(:,:)' 4 5 Odwracanie macierzy: >> inv(a) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =.469447e-08..0e+05 * -.70 4.506 -.804 5.404-9.007.609 -.70 4.506 -.804
Wartości i wektory własne: >> [v,e]=eig(a) -0.656-0.7444 0.408-0.49-0.907-0.865-0.895 0.699 0.408 e = 4.0664 0 0 0 -.0664 0 0 0-0.0000 >> diag(e) 4.0664 -.0664-0.0000 Dzielenie macierzy przez wektor. >> [ 5]' 5 >> x = A\v Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.56506e-8 x =.0e+5 *.804 -.609.804 >> x = B\v x = - >> B*x 5 >> x = v'/b x = 4.0000 -.0000.0000 >> x*b.0000.0000 5.0000
Operacje na wektorach Utwórzmy następujące wektory: >> [ ]' >> b = [ 4 6]' b = 4 6 Możemy wykonać na nich różne operacje, jak przedstawiono poniżej. >> v+b 6 9 >> v-b - - - Ponadto w środowisku Matlab występuje operacja mnożenia lub dzielenia po komórkach, które wykonujemy poprzez użycie znaku '.*' lub odpowiednio './'. >> v.*b 8 8 >> v./b 0.5000 0.5000 0.5000 Funkcje takie jak sin, cos, log również działają na wektorach. >> sin(v) 0.845 0.909 0.4 >> log(v) 0 0.69.0986
Rysowanie wykresów Do rysowania wykresów służy funkcja plot: >> y = sin(x).*x./(+cos(x)); >> plot(x,y) >> plot(x,y,'rx'); Do oznaczania etykiet służą funkcje: >> xlabel('x'); >> ylabel(' Error '); >> title('errors for h=/6') Pętle W środowisku Matlab wystepują dwa rodzaje pętli: For: >> for j=:, j j = j = j = >> for j=:4, v(j) = j; >> v 4 While: >> h = 0.00; >> x = [0:h:]; >> y = 0*x; >> y() = ; >> i = ; >> size(x) 00 >> max(size(x)) 00 >> while(i<max(size(x))) y(i+) = y(i) + h*(x(i)-abs(y(i))); i = i + ;
>> plot(x,y,'go') >> plot(x,y) Funkcje function [x] = gausselim(a,b) % File gausselim.m % This subroutine will perform Gaussian elmination % on the matrix that you pass to it. % i.e., given A and b it can be used to find x, % Ax = b % % To run this file you will need to specify several % things: % A - matrix for the left hand side. % b - vector for the right hand side % % The routine will return the vector x. % ex: [x] = gausselim(a,b) % this will perform Gaussian elminiation to find x. % % N = max(size(a)); % Perform Gaussian Elimination for j=:n, for i=j:n, m = A(i,j-)/A(j-,j-); A(i,:) = A(i,:) - A(j-,:)*m; b(i) = b(i) - m*b(j-); % Perform back substitution x = zeros(n,); x(n) = b(n)/a(n,n); for j=n-:-:, x(j) = (b(j)-a(j,j+:n)*x(j+:n))/a(j,j); Instrukcje warunkowe Schemat budowania instrukcji warunkowych "if". if (condition statement) (matlab commands) Bardziej skomplikowany schemat z większą ilością warunków. if (condition statement) (matlab commands) elseif (condition statement) (matlab commands) elseif (condition statement)
(matlab commands) else (matlab commands) Odczytywanie plików z danymi Zapis danych z sesji do pliku. >> u = [ -4]; >> [ - 7]; >> whos >> save stuff.mat >> ls stuff.mat Koma ls służy do wypisania listy plików w bieżacym katalogu. Odczyt sesji z pliku >> clear >> whos >> load stuff.mat >> whos >> u+v Wczytywanie jedynie wybranej zmiennej z pliku. W tym przypadku u. >> clear >> whos >> load stuff.mat u >> whos Zapis sesji jako tekst. >> diary save.txt... enter commands here... >> diary Zapis i odczyt w stylu języka C. fp = fopen('laser.dat','r'); fseek(fp,pos,'bof'); tmp = fread(fp,,'double'); pos = ftell(fp); fclose(fp); Literatura. Uhl T., Kurowski P., Zastosowanie środowisk Matlab i Siglab do analizy sygnałów, Katedra Automatyki AGH, 998. Semmlov J.L., Biosignal and Biomedical Image Processing. Matlab based Applications, Marcel Decker Inc., 004. www.mathworks.com (Oficjalna strona producenta programu Matlab)
4. www.ont.com.pl (Strona Wydawnictwa Naukowo-Technicznego, wyłącznego dystrybutora MathWorks w Polsce). Webinaria i bezpłatne szkolenia. 5. Gonzalez R.C., Woods R.E., Eddins S.L. Digital Image Processing Using MATLAB, Pearson Education 004 6. Semmlov J, Biosignal and Biomedical Image Processing (Matlab Based Applications), Marcel Dekker, 004 7. Zalewski A., Matlab. Obliczenia numeryczne i ich zastosowanie, Wydawnictwo Naukom, 999 8. Brzózka J, Programowanie w Matlab, Wydawnictwo Mikom, 998