Click here to load reader
Upload
buixuyen
View
215
Download
0
Embed Size (px)
Citation preview
Messtechnik Praktikum SS 2004
Einfuhrung in Matlab1
1 Grundlagen
Hilfe, Kommentare, Befehlseingabe.
• % leitet einen Kommentar ein.
• help gibt eine Liste von Themen, help Thema oder help Befehl gibt Hilfezu einem Thema oder einem Befehl.
• lookfor Suchwort durchsucht die Hilfetexte nach einem Wort.
• um lange Befehlszeilen umzubrechen werden . . . (drei Punkte) am Ende derZeile verwendet.
• ein Strichpunkt ; am Ende der Zeile verhindert die Ausgabe des Ergebnisses,ohne ; wird das Ergebnis ausgegeben.
• mit Hoch/Runter geht man durch die Befehle in der History. Emacs Tastenfunktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang derZeile, mit Ctrl-E ans Ende.
Objekte in Matlab. Die grundlegenden mathematischen Objekte in Matlab sindSkalare, Vektoren und Matrizen. Wobei man Skalare als 1×1-Matrizen und Vektorenals n× 1- (Spaltenvektor), bzw. 1× n- (Zeilenvektor) Matrizen auffassen kann.
• A = [1 2; 3 4];
erzeugt zeilenweise eine 2× 2 Matrix:[1 23 4
]
• A = zeros(3,4);erzeugt eine 3× 4 Matrix deren Elemente Null sind.
• A = ones(3,4);erzeugt eine 3× 4 Matrix deren Elemente Eins sind.
• A = eye(4);erzeugt eine 4× 4 Einheitsmatrix.
• A = rand(5,1);erzeugt eine 5×1 Zufallsmatrix (aquivalent zu einem Lange 5 Zufalls-Spaltenvektor).rand entspricht einer uniformen Verteilung, randn ergibt Normalverteilung.
• v = [1 2 3 4];erzeugt einen Zeilenvektor:
(1 2 3 4
)
1Ubersetzt und angepasst aus http://www.stanford.edu/class/cs223b/matlabIntro.html
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
1 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
• v = [1;2;3;4]; oder v = [1 2 3 4]’;
erzeugt einen Spaltenvektor:
1234
, der Apostroph ’ bildet das Transponierte
zu einer Matrix/Vektor.
• x = 1:10;erzeugt einen Vektor mit den Elementen von 1 bis 10:
(1 2 3 . . . 9 10
)
• x = 1:0.2:10;erzeugt einen Vektor mit den Elementen von 1 bis 10 im Abstand 0.2:
(1.0 1.2 1.4 . . . 9.8 10.0
)
• Indizes zu Vektor- oder Matrixelementen beginnen immer bei 1. Der ersteIndex bei Matrizen ist der Zeilenindex, der zweite der Spaltenindex (wie immathematischen Sinn).A = rand(10,6);A(2,3)entspricht daher dem Element a23 der Matrix A. Ganze Zeilen oder Spaltenoder Bereiche konnen uber Indexfelder angegeben werden (Operator :):A(:,1)entspricht der ersten Spalte,A(2,:)der zweiten Zeile.A(1:2:4,2)entspricht den Elementen 1 bis 4 der zweiten Spalte der Matrix A, wobei je-
weils ein Element ubersprungen wird, also der Vektor bestehend aus:(
a12
a32
)
A(3:7,2:4)entspricht der Untermatrix mit linker oberer Ecke (3,2) und rechter untererEcke (7,4).
• size(A)liefert die Große der Matrix A, also im Beispiel von oben [10 6]size(A,1)liefert die Anzahl der Zeilen,size(A,2)liefert die Anzahl der Spalten.
• wholistet alle Variablen in der Arbeitsumgebung (Workspace)whoslistet Variablen mit Informationen uber Große, Typ, etc.
Einfache Matrix und Vektoroperationen.
1. Elementweise Operationen
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
2 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
• Sowohl Addition und Subtraktion von Vektoren und Matrizen als auchMultiplikation bzw. Division mit einem Skalar werden elementweise durch-gefuhrt. Fur die elementweise Multiplikation, Division, Potenzierung, etc.wird ein Punkt ’.’ zusammen mit dem Operator (*/^) verwendet.
a = [1 2 3 4];2 * a Skalare Multiplikationa / 2 Skalare Divisionb = [5 6 7 8];a + b elementweise Additiona - b elementweise Subtraktiona .* b elementweise Multiplikationa ./ b elementweise Divisiona .^ 2 elementweises Quadrieren. . .
• Elementweise arithmetische Operationen
log(a) elementweiser Logarithmussin(a) elementweiser Sinussin(a) ./ a elementweise Sinc-Funktion. . .
2. Vektor Operationen
a = [1 2 3 4];sum(a) Summe von Vektorelementenmean(a) Durchschnittswertvar(a) Varianzstd(a) Standardabweichungmax(a) Maximummin(a) Minimum. . .
Falls das Argument eine Matrix ist operieren diese Funktionen jeweils aufjedem Spaltenvektor der Matrix und liefern einen Zeilenvektor der Ergebnissezuruck.
A = [1 2 3; 4 5 6];max(A) Zeilenvektor mit den Maxima der Spaltenmax(max(A)) odermax(A(:)) Maximum der Matrix. . .
3. Matrix Operationen
• [1 2 3] * [4 5 6]’1×3- mal 3×1-Matrix ergibt Skalar: Vektorprodukt oder inneres Produkt.
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
3 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
• [1 2 3]’ * [4 5 6]3× 1- mal 1× 3-Matrix ergibt 3× 3-Matrix: außeres Produkt.
• A = zeros(3,4);B = ones(3,4);[A B]Horizontale Aneinanderhangung von Matrizen, Ergebnis ist eine 3 × 8Matrix.[A; B]Vertikale Aneinanderhangung von Matrizen, Ergebnis ist eine 6× 4 Ma-trix.
Kontrollstrukturen.
1. For-Schleifefor VARIABLE = EXPRESSION, STATEMENT, ..., STATEMENT end;
2. While-Schleifewhile EXPRESSION, STATMENTS end;
3. If-Then-Elseif EXPRESSION, STATEMENTS elseif EXPRESSION, STATEMENTS else STATEMENTS end;
Vektorisierung. Da Schleifen in Matlab sehr lange brauchen versucht man diesewenn moglich zu vermeiden, indem man entsprechenden Code so umschreibt, dassVektoroperationen daraus werden.
Beispiel 1: von einer m × n Matrix A soll von jeder Zeile ein 1 × n Vektor vabgezogen werden. Mit Schleife:
for i=1:n,A(i,:) = A(i,:) - v;
end
Dies kann man auch mittels Matrix-Vektor-Operationen schreiben:
A = A - ones(m,1)*v;
Beispiel 2: gegeben sei eine m × n Matrix A. Eine Matrix B selber Große sollerstellt werden, in die alle positiven Werte von A geschrieben werden. Fur negativeWerte soll stattdessen eine Null eingetragen werden. Mit Schleifen:
B = zeros(m,n);for i=1:m,for j=1:n,if A(i,j)>0,B(i,j) = A(i,j);
endend
end
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
4 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
Dies kann auch ohne Schleife folgendermaßen formuliert werden:
B = zeros(m,n);ind = find(A > 0); % Finde Indices mit positiven Elementen von AB(ind) = A(ind); % Kopiere in B nur Elemente von A > 0
Die Arbeitsumgebung (Workspace).
• save filenamespeichert die Arbeitsumgebung (alle Variablen) in der Datei “filename.mat”.
• save filename a bspeichert nur Variablen a und b in “filename.mat”.
• load filenameladt die Arbeitsumgebung aus “filename.mat”.
• clear a bloscht Variablen a und b von der Arbeitsumgebung.
• clear allloscht die komplette Arbeitsumgebung.
Skripte und Funktionen. Matlab Skripte werden in Dateien mit der Endung“.m” (“m-file”) gespeichert. Sie konnen dann aus dem aktuellen Verzeichnis mittels“dateiname” aufgerufen werden, die Endung “.m” erspart man sich. Alle Variablen inSkripten sind global, d.h. sie verandern direkt die Variablen in der Arbeitsumgebung.Funktionen werden ebenfalls m-files gespeichert. Die erste Zeile in der Datei istdabei der Funktionskopf. Der Funktionsname entspricht dem Dateinamen (ohne dieEndung “.m”). Die zweite Zeile ist eine Kommentarzeile, eine Kurzbeschreibung derFunktion. Alle folgenden Kommentarzeilen werden zusatzlich ausgegeben wenn derBenutzer help name aufruft fur die Funktion “name”.
function [outarg_1, ..., outarg_m] = myfunction( inarg_1, ..., inarg_n )% MYFUNCTION Computes myvalues%%% The MYFUNCTION is a great function that computes myvalues% for the input arguments inarg_1, ..., inarg_n. The arguments are:%% inarg_1: the first argument%% ...%% myvalues will be saved in the output arguments outarg_1, ..., outarg_m.% They are:%% outarg_1: the first myvalue%% ...
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
5 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
Funktionen besitzen ihre eigene Arbeitsumgebung und alle Variablen sind lokal.Unterfunktionen, die nicht von extern aufgerufen werden sollen, konnen in dasselbem-file geschrieben werden mit gleicher Syntax.
Plotting.
x = [0 1 2 3 4]; % basic plottingplot( x );plot( x, 2*x );axis( [0 8 0 8] );
x = pi*[-24:24]/24;plot( x, sin(x) );xlabel( ’radians’ );ylabel( ’sin value’ );title( ’dummy’ );gtext( ’put cursor where you want text and press mouse’ );
figure; % multiple functions in separate graphssubplot( 1,2,1 );plot( x, sin(x) );axis square;subplot( 1,2,2 );plot( x, 2.*cos(x) );axis square;
figure; % multiple functions in single graphplot( x,sin(x) );hold on;plot (x, 2.*cos(x), ’--’ );legend( ’sin’, ’cos’ );hold off;
figure; % matrices as imagesm = rand(64,64);imagesc(m)colormap gray;axis imageaxis off;
Aufgaben. Verwenden Sie bei den folgenden Aufgaben immer Vektorisierung an-statt Schleifen, sofern dies moglich ist.
1. Erstellen Sie zwei normalverteilte Zufallsmatrizen, A ∈ R10×5, B ∈ R5×10 undeinen (Spalten-)Zufallsvektor v ∈ R10.
2. Multiplizieren Sie (von rechts) die Matrix B mit dem Vektor v. MultiplizierenSie (von links) die Matrix A mit dem transponierten Vektor v>. Uberlegen Siesich jeweils vorher, welche Dimension das Ergebnis hat.
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
6 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
3. Berechnen Sie die Spaltensummen von A.
4. Berechnen Sie die Summe aller Elemente von A.
5. Schreiben Sie eine Funktion, die als Eingabe einen Vektor x erhalt und danndie sinc-Funktion (sin(x)/x) an den Stellen in x berechnet und diese als Vektorzuruckliefert. Achten Sie dabei darauf, dass in x keine Null steht und ersetzensie ggf. den Wert an dieser Stelle in y mit 1.
function y = sinc( x )% Berechnet sinc-Funktion (sin(x)/x) fuer jeden Wert in x%% x: Eingabevektor an denen die sinc-Funktion ausgewertet werden soll%% y: Ausgabevektor, der Wert der sinc-Funktion fuer die% entsprechenden Werte von x
6. Plotten Sie die sinc-Funktion fur den Bereich -20 bis 20 mit einem Punktab-stand von 0.2.
Die Losung zu den Aufgaben finden Sie auf der Website.
2 Die Image Processing Toolbox
Auf den Rechnern an unserem Lehrstuhl ist zusatzlich die Image Processing Tool-box installiert, die viele nutzliche Funktionen bereithalt fur die Bildverarbeitung.Idealerweise sollten Sie sich die Online-Hilfe2 zu der Toolbox ansehen und, falls sieZeit haben, einige der Tutorien durchfuhren. Hier nur einige Hinweise3:
• Bilder werden als n×m Matrizen (Grau- und Binarbilder) oder als n×m× 3Arrays (RGB-Farbbilder) gespeichert und interpretiert. Der erste Index istder Zeilenindex (Bildkoordinaten: y-Achse), der zweite Index ist der Spalten-index (Bildkoordinaten: x-Achse), wobei der Punkt (1,1) dem linken oberenBildpunkt entspricht und der dritte Index ist der Farbkanal.
• Laden, Ansehen, Speichern: imread, imshow, imwrite:
I = imread(’myimage.jpg’); % Farbbild einlesen[m, n, k] = size(I) % Groesse ansehen
imshow(I); % Anzeigen
I(1:10, 1:10, :) = 0; % schwarzes Quadrat oben linksimshow(I); % Anzeigen
• 4 Bildarten: Index, Grauwert (Intensity), Binarbild (Binary) und Farbbild(RGB).
2http://www.mathworks.com/access/helpdesk/help/toolbox/images/images.shtml3Verwenden sie “help befehl” fur weitere Hinweise zu den genannten Befehlen
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
7 Martin BergtholdtMatthias Heiler
Messtechnik Praktikum SS 2004
• Bild umwandeln: ind2gray, ind2rgb, gray2ind, rgb2gray, rgb2ind
• 3 Bildklassen: double, uint8 und uint16.
• Bildarithmetik. Fur Bilder der Klasse double konnen die standardmaßigenarithmetischen Operationen angewendet werden. Binarbilder werden mit I = double(I)zunachst umgewandelt.
Beispiele:
[I,map]=imread(’trees.tif’); % read a TIFF image
figureimshow(I,map) % display it as indexed image w/colormap
I2=ind2gray(I,map); % convert it to grayscale
figureimagesc(I2,[0 1]) % scale data to use full colormap
% for values between 0 and 1colormap(’gray’) % use gray colormapaxis(’image’) % make displayed aspect ratio proportional
% to image dimensions
I=imread(’flowers.tif’); % read a TIFF image into 3D array
figureimshow(I)rect=getrect; % select rectangleI2=imcrop(I,rect); % cropI2=rgb2gray(I2); % convert cropped image to grayscaleimagesc(I2) % scale data to use full colormap
% between min and max values in I2colormap(’gray’)colorbar % turn on color barpixval % display pixel values interactivelytruesize % display at resolution of one screen pixel
% per image pixeltruesize(2*size(I2)) % display at resolution of two screen pixels
% per image pixel
I3=imresize(I2,0.5,’bil’); % resize by 50% using bilinear% interpolation
I3=imrotate(I2,45,’bil’,’crop’); % rotate 45 degrees and crop to% original size
I3=double(I2); % convert from uint8 to double, to allow% math operations
imagesc(I3.^2) % display squared image (pixel-wise)imagesc(log(I3)) % display log of image
Lehrstuhl fur Bildverarbeitung,Mustererkennung und Computergrafik
8 Martin BergtholdtMatthias Heiler