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
 23 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

Documents pareils