Einführung in Matlab
Transcription
Einführung in Matlab
Messtechnik Praktikum SS 2004 Einführung in Matlab1 1 Grundlagen Hilfe, Kommentare, Befehlseingabe. • % leitet einen Kommentar ein. • help gibt eine Liste von Themen, help Thema oder help Befehl gibt Hilfe zu einem Thema oder einem Befehl. • lookfor Suchwort durchsucht die Hilfetexte nach einem Wort. • um lange Befehlszeilen umzubrechen werden . . . (drei Punkte) am Ende der Zeile 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 Tasten funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, mit Ctrl-E ans Ende. Objekte in Matlab. Die grundlegenden mathematischen Objekte in Matlab sind Skalare, Vektoren und Matrizen. Wobei man Skalare als 1×1-Matrizen und Vektoren als n × 1- (Spaltenvektor), bzw. 1 × n- (Zeilenvektor) Matrizen auffassen kann. • A = [1 2; 3 4]; · ¸ 1 2 erzeugt zeilenweise eine 2 × 2 Matrix: 3 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 (äquivalent zu einem Länge 5 Zufalls-Spaltenvektor). rand entspricht einer uniformen Verteilung, randn ergibt Normalverteilung. • v = [1 2 3 4]; ¡ ¢ erzeugt einen Zeilenvektor: 1 2 3 4 1 Übersetzt und angepasst aus http://www.stanford.edu/class/cs223b/matlabIntro.html Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 1 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 • v = [1;2;3;4]; oder v = [1 23 4]’; 1 2 erzeugt einen Spaltenvektor: 3, der Apostroph ’ bildet das Transponierte 4 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 erste Index bei Matrizen ist der Zeilenindex, der zweite der Spaltenindex (wie im mathematischen Sinn). A = rand(10,6); A(2,3) entspricht daher dem Element a23 der Matrix A. Ganze Zeilen oder Spalten oder Bereiche können über 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¶ a12 weils ein Element übersprungen wird, also der Vektor bestehend aus: a32 A(3:7,2:4) entspricht der Untermatrix mit linker oberer Ecke (3,2) und rechter unterer Ecke (7,4). • size(A) liefert die Größ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. • who listet alle Variablen in der Arbeitsumgebung (Workspace) whos listet Variablen mit Informationen über Größe, Typ, etc. Einfache Matrix und Vektoroperationen. 1. Elementweise Operationen Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 2 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 • Sowohl Addition und Subtraktion von Vektoren und Matrizen als auch Multiplikation bzw. Division mit einem Skalar werden elementweise durchgeführt. Für die elementweise Multiplikation, Division, Potenzierung, etc. wird ein Punkt ’.’ zusammen mit dem Operator (*/^) verwendet. a = [1 2 3 4]; 2 * a a / 2 b = [5 6 7 8]; a + b a - b a .* b a ./ b a .^ 2 ... Skalare Multiplikation Skalare Division elementweise Addition elementweise Subtraktion elementweise Multiplikation elementweise Division elementweises Quadrieren • Elementweise arithmetische Operationen log(a) sin(a) sin(a) ./ a ... elementweiser Logarithmus elementweiser Sinus elementweise Sinc-Funktion 2. Vektor Operationen a = [1 2 3 4]; sum(a) mean(a) var(a) std(a) max(a) min(a) ... Summe von Vektorelementen Durchschnittswert Varianz Standardabweichung Maximum Minimum Falls das Argument eine Matrix ist operieren diese Funktionen jeweils auf jedem Spaltenvektor der Matrix und liefern einen Zeilenvektor der Ergebnisse zurück. A = [1 2 3; 4 5 6]; max(A) Zeilenvektor mit den Maxima der Spalten max(max(A)) oder max(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 für Bildverarbeitung, Mustererkennung und Computergrafik 3 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 • [1 2 3]’ * [4 5 6] 3 × 1- mal 1 × 3-Matrix ergibt 3 × 3-Matrix: äußeres Produkt. • A = zeros(3,4); B = ones(3,4); [A B] Horizontale Aneinanderhängung von Matrizen, Ergebnis ist eine 3 × 8 Matrix. [A; B] Vertikale Aneinanderhängung von Matrizen, Ergebnis ist eine 6 × 4 Matrix. Kontrollstrukturen. 1. For-Schleife for VARIABLE = EXPRESSION, STATEMENT, ..., STATEMENT end; 2. While-Schleife while EXPRESSION, STATMENTS end; 3. If-Then-Else if EXPRESSION, STATEMENTS elseif EXPRESSION, STATEMENTS else STATEMENTS end; Vektorisierung. Da Schleifen in Matlab sehr lange brauchen versucht man diese wenn möglich zu vermeiden, indem man entsprechenden Code so umschreibt, dass Vektoroperationen daraus werden. Beispiel 1: von einer m × n Matrix A soll von jeder Zeile ein 1 × n Vektor v abgezogen 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 Größe soll erstellt werden, in die alle positiven Werte von A geschrieben werden. Für negative Werte 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); end end end Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 4 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 Dies kann auch ohne Schleife folgendermaßen formuliert werden: B = zeros(m,n); ind = find(A > 0); B(ind) = A(ind); % Finde Indices mit positiven Elementen von A % Kopiere in B nur Elemente von A > 0 Die Arbeitsumgebung (Workspace). • save filename speichert die Arbeitsumgebung (alle Variablen) in der Datei “filename.mat”. • save filename a b speichert nur Variablen a und b in “filename.mat”. • load filename lädt die Arbeitsumgebung aus “filename.mat”. • clear a b löscht Variablen a und b von der Arbeitsumgebung. • clear all löscht die komplette Arbeitsumgebung. Skripte und Funktionen. Matlab Skripte werden in Dateien mit der Endung “.m” (“m-file”) gespeichert. Sie können dann aus dem aktuellen Verzeichnis mittels “dateiname” aufgerufen werden, die Endung “.m” erspart man sich. Alle Variablen in Skripten sind global, d.h. sie verändern direkt die Variablen in der Arbeitsumgebung. Funktionen werden ebenfalls m-files gespeichert. Die erste Zeile in der Datei ist dabei der Funktionskopf. Der Funktionsname entspricht dem Dateinamen (ohne die Endung “.m”). Die zweite Zeile ist eine Kommentarzeile, eine Kurzbeschreibung der Funktion. Alle folgenden Kommentarzeilen werden zusätzlich ausgegeben wenn der Benutzer help name aufruft für 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 für Bildverarbeitung, Mustererkennung und Computergrafik 5 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 Funktionen besitzen ihre eigene Arbeitsumgebung und alle Variablen sind lokal. Unterfunktionen, die nicht von extern aufgerufen werden sollen, können in dasselbe m-file geschrieben werden mit gleicher Syntax. Plotting. x = [0 1 2 3 4]; plot( x ); plot( x, 2*x ); axis( [0 8 0 8] ); % basic plotting 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; subplot( 1,2,1 ); plot( x, sin(x) ); axis square; subplot( 1,2,2 ); plot( x, 2.*cos(x) ); axis square; % multiple functions in separate graphs figure; plot( x,sin(x) ); hold on; plot (x, 2.*cos(x), ’--’ ); legend( ’sin’, ’cos’ ); hold off; % multiple functions in single graph figure; m = rand(64,64); imagesc(m) colormap gray; axis image axis off; % matrices as images Aufgaben. Verwenden Sie bei den folgenden Aufgaben immer Vektorisierung anstatt Schleifen, sofern dies möglich ist. 1. Erstellen Sie zwei normalverteilte Zufallsmatrizen, A ∈ R10×5 , B ∈ R5×10 und einen (Spalten-)Zufallsvektor v ∈ R10 . 2. Multiplizieren Sie (von rechts) die Matrix B mit dem Vektor v. Multiplizieren Sie (von links) die Matrix A mit dem transponierten Vektor v> . Überlegen Sie sich jeweils vorher, welche Dimension das Ergebnis hat. Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 6 Martin Bergtholdt Matthias 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 erhält und dann die sinc-Funktion (sin(x)/x) an den Stellen in x berechnet und diese als Vektor zurückliefert. Achten Sie dabei darauf, dass in x keine Null steht und ersetzen sie 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 für den Bereich -20 bis 20 mit einem Punktabstand von 0.2. Die Lösung zu den Aufgaben finden Sie auf der Website. 2 Die Image Processing Toolbox Auf den Rechnern an unserem Lehrstuhl ist zusätzlich die Image Processing Toolbox installiert, die viele nützliche Funktionen bereithält für die Bildverarbeitung. Idealerweise sollten Sie sich die Online-Hilfe2 zu der Toolbox ansehen und, falls sie Zeit haben, einige der Tutorien durchführen. Hier nur einige Hinweise3 : • Bilder werden als n × m Matrizen (Grau- und Binärbilder) oder als n × m × 3 Arrays (RGB-Farbbilder) gespeichert und interpretiert. Der erste Index ist der Zeilenindex (Bildkoordinaten: y-Achse), der zweite Index ist der Spaltenindex (Bildkoordinaten: x-Achse), wobei der Punkt (1,1) dem linken oberen Bildpunkt entspricht und der dritte Index ist der Farbkanal. • Laden, Ansehen, Speichern: imread, imshow, imwrite: I = imread(’myimage.jpg’); [m, n, k] = size(I) % Farbbild einlesen % Groesse ansehen imshow(I); % Anzeigen I(1:10, 1:10, :) = 0; imshow(I); % schwarzes Quadrat oben links % Anzeigen • 4 Bildarten: Index, Grauwert (Intensity), Binärbild (Binary) und Farbbild (RGB). 2 3 http://www.mathworks.com/access/helpdesk/help/toolbox/images/images.shtml Verwenden sie “help befehl” für weitere Hinweise zu den genannten Befehlen Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 7 Martin Bergtholdt Matthias Heiler Messtechnik Praktikum SS 2004 • Bild umwandeln: ind2gray, ind2rgb, gray2ind, rgb2gray, rgb2ind • 3 Bildklassen: double, uint8 und uint16. • Bildarithmetik. Für Bilder der Klasse double können die standardmäßigen arithmetischen Operationen angewendet werden. Binärbilder werden mit I = double(I) zunächst umgewandelt. Beispiele: [I,map]=imread(’trees.tif’); % read a TIFF image figure imshow(I,map) % display it as indexed image w/colormap I2=ind2gray(I,map); % convert it to grayscale figure imagesc(I2,[0 1]) % scale data to use full colormap % for values between 0 and 1 % use gray colormap % make displayed aspect ratio proportional % to image dimensions colormap(’gray’) axis(’image’) I=imread(’flowers.tif’); % read a TIFF image into 3D array figure imshow(I) rect=getrect; I2=imcrop(I,rect); I2=rgb2gray(I2); imagesc(I2) colormap(’gray’) colorbar pixval truesize truesize(2*size(I2)) I3=imresize(I2,0.5,’bil’); I3=imrotate(I2,45,’bil’,’crop’); I3=double(I2); imagesc(I3.^2) imagesc(log(I3)) Lehrstuhl für Bildverarbeitung, Mustererkennung und Computergrafik 8 % % % % % select rectangle crop convert cropped image to grayscale scale data to use full colormap between min and max values in I2 % % % % % % turn on color bar display pixel values interactively display at resolution of one screen pixel per image pixel display at resolution of two screen pixels per image pixel % % % % % % % % resize by 50% using bilinear interpolation rotate 45 degrees and crop to original size convert from uint8 to double, to allow math operations display squared image (pixel-wise) display log of image Martin Bergtholdt Matthias Heiler