8

Click here to load reader

Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

Embed Size (px)

Citation preview

Page 1: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 2: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 3: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 4: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 5: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 6: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 7: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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

Page 8: Einfuhrung in Matlab¨ 1 Grundlagen - math.uni- · PDF fileEinfuhrung in Matlab ... funktionieren ebenfalls, z.B. springt man mit Control-A an den Anfang der Zeile, ... • load filename

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