Einführung in Visual Computing Einführung in MATLAB · 9 Sebastian Zambanini - EVC - MATLAB...
Transcript of Einführung in Visual Computing Einführung in MATLAB · 9 Sebastian Zambanini - EVC - MATLAB...
Einführung in Visual Computing
Einführung in MATLABSebastian Zambanini
Computer Vision Lab
Institut f. Rechnergestützte Automation
TU Wien
Überblick
Allgemeines
Arbeiten mit MATLAB
Dateneingabe
Vektoren und Matrizen
Programme schreiben in MATLAB
Visualisierung/Bilder
Häufige Probleme, Tipps & Tricks
Sebastian Zambanini - EVC - MATLAB Einführung2
MATLAB-Übungen
Benötigte Tools für die Übung: MATLAB und Blender
Blender-Einführung morgen (11.3.2015)
Angaben für MATLAB-Einführungs-
beispiel ab heute (15 Uhr) verfügbar
4 Teile
Basics
Triangles
Images
Transformations
Weitere Aufgaben im Laufe des Semesters, die mithilfe von MATLAB zu lösen sind (Kamerasensoren,…)
Sebastian Zambanini - EVC - MATLAB Einführung3
MATLAB = MATrix LABoratory
Software zur numerischen Berechnung mathematischer Probleme
Gegenstück: Mathematica, Maple für symbolische Algebra
Alternativen: eigentlich keine wg. des Umfangs
Freier MATLAB-Klon: Octave (für die Übung nicht zu empfehlen, Octave-Lösungen werden nicht akzeptiert)
Hersteller: The MathWorks Inc.
aktuelle Version 8.4 (R2014b)
Viele Toolboxen für verschiedenste Anwendungsbereiche
Signalverarbeitung, Bildverarbeitung, Finanzmathematik, …
Proprietäre Programmiersprache
Was ist MATLAB?
4 Sebastian Zambanini - EVC - MATLAB Einführung
Was ist MATLAB?
Vorteile
Interpreter und interaktive Befehlseingabe: Schnelle und einfache Entwicklung von Programmen (Rapid Prototyping)
Gutes Hilfesystem
Sehr umfangreich und mächtig dank zahlreicher Toolboxen
Erweiterbarkeit: C oder FORTRAN Code durch mex-Bibliotheken
Grafische Ausgaben: Bilder, 3D Plots,….
Nachteile
Nicht frei verfügbar
Durch Interpretersprache vergleichsweise langsame Ausführung von Programmen
Sebastian Zambanini - EVC - MATLAB Einführung5
Warum soll ich MATLAB erlernen?
Um die LVA zu bestehen ;-)
MATLAB kann für verschiedene Gebiete verwendet werden (z.B. Statistik, Optimierung, Signalverarbeitung,…)
Kann auch für spätere LVAs hilfreich sein und wird auch teilweise verwendet
MATLAB wird gerade in den Bereichen Bildverarbeitung, Computer Vision und Mustererkennung sehr häufig eingesetzt
Studierende des Bakk-Studiums 532 Medieninformatik und Visual Computing sowie Master-Studium 932 Visual Computing
Sebastian Zambanini - EVC - MATLAB Einführung6
Wie kann ich MATLAB erlernen?
Die heutige Einführung ist ein guter Start Aber wie immer: „Learning by doing“
Probieren Sie die heute vorgestellten Code-Beispiele zuhause oder im Labor aus
Einführungsbeispiel: MATLAB Basics MATLAB Primer
http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdfErstes Kapitel: „Quick Start“
MATLAB ist leicht zu erlernen und bietet ein umfangreiches Hilfesystem help befehl bzw. doc befehl
Wenn Sie nicht mehr weiterwissen Google www.informatik-forum.at Tutoren im Pac-Man-Raum (Favoritenstrasse) zu den betreuten
Übungszeiten
Sebastian Zambanini - EVC - MATLAB Einführung7
Benützung von MATLAB für die LVA
Lokale Installation auf eigenem Rechner
MATLAB-Studentenversion für Windows, Mac und Linux über ZID erhältlich (€ 13,90): http://www.sss.tuwien.ac.at/sss/mla/
In den Labors Favoritenstrasse
Einloggen per ssh auf Servern thales.inflab.tuwien.ac.at oder euklid.inflab.tuwien.ac.at
In der Linux-Umgebung in der Shell ssh –X thales oder ssh –X euclid eintippen
Account-Daten und Details zur Benützung werden noch bekannt gegeben
Sebastian Zambanini - EVC - MATLAB Einführung8
MATLAB Desktop
Sebastian Zambanini - EVC - MATLAB Einführung9
Command Window: Eingabe von Befehlen
Workspace: Variablen im Speicher
Command History: Liste aller eingegebenen Befehle
Current Folder: Dateien im aktuellen Arbeitsverzeichnis
Details: Details zu Datei
Arbeitsverzeichnis
Arbeiten mit MATLAB: Befehlseingabe
Zwei Möglichkeiten: Eingabe über Command Window oder Skriptdatei (sog. .m-File)
1. Command Window
Befehl wird nach dem Enter-Zeichen sofort ausgeführt
2. Skript
Durch den Befehl wird das gleichnamige .m-File gestartet, welches wiederum eine Folge von Befehlen enthält
Erzeugen von .m-Files mithilfe des Editorsedit dateiname.m
Kommentare mit %
Ein Semikolon (;) unterdrückt die Ausgabe in der Kommandozeile
Sebastian Zambanini - EVC - MATLAB Einführung10
Datei mytest.m:
MATLAB Editor
Sebastian Zambanini - EVC - MATLAB Einführung11
Skript starten (alternativ F5 drücken)
Dateneingabe - Variablen
Keine Variablendeklaration erforderlich
Alle Variablen sind standardmäßig Fließkommazahlen doppelter Präzision (Typ double)
Einfache Konvertierung in andere Datentypen möglich (single, uint8, int16…)
Variablennamen sind case-sensitive
Falls keine Variable für Rückgabewert angegeben wird: Standardvariable ans
Sebastian Zambanini - EVC - MATLAB Einführung12
Dateneingabe - Vektoren
Eingabe der Werte in
Trennen der Spalten mittels ,
oder Leerzeichen
Trennen der Zeilen mittels ;
Zahlenreihen: von:schrittweite:bis bzw. von:bis
Sebastian Zambanini - EVC - MATLAB Einführung13
Dateneingabe - Matrizen
Mehrere Zeilen und Spalten
Verschiedene Befehle zum Erzeugen von Matrizen
Nullermatrix: zeros(zeilen,spalten)
Einsermatrix: ones(zeilen,spalten)
Matrix mit Zufallszahlen: rand(zeilen,spalten)
…
Sebastian Zambanini - EVC - MATLAB Einführung14
Zugriff auf Matrix- oder Vektor-Elemente
Zugriff auf Einzelelemente: A(zeile,spalte) = wert
Indizes beginnen bei 1!
Beim Überschreiten der Indexgrenzen wird die Matrixgröße angepasst und Elemente mit 0 aufgefüllt
Matrixbereiche ansprechen: Angabe der Zeilen und Spalten als Vektor
Sebastian Zambanini - EVC - MATLAB Einführung15
Zugriff auf Matrix- oder Vektor-Elemente
Matrixbereiche können auch mit einem skalaren Wert befüllt werden
end: max. Indexwert
Transponieren (Zeilen und Spalten vertauschen) mittels
Alle Zeilen bzw. Spalten ansprechen mittels :
Sebastian Zambanini - EVC - MATLAB Einführung16
Zugriff auf Matrix- oder Vektor-Elemente
Zugriff auf Elemente kann auch über logische Indizierung erfolgen
Benutzung einer logischen Indexvariable derselben Größe
Sebastian Zambanini - EVC - MATLAB Einführung17
Bilder und Mehrdimensionale Arrays
Grauwertbild: Matrix (2D Array)
Es sind auch Arrays mit mehr als 2 Dimensionen möglich
Beispiel: RGB-Bild (3 Dimensionen)
Größe des Bildes anzeigen und roten Kanal extrahieren:
Bildauschnitt extrahieren
Sebastian Zambanini - EVC - MATLAB Einführung18
Funktionen
Funktionen sind .m-Skripts mit Eingabe- und Rückgabewerten
Name der Funktion = Dateiname
Funktionen können auch Unterfunktionen haben, von außen ist aber nur die Hauptfunktion aufrufbar
Kein expliziter Befehl zur Parameterrückgabe, sondern einfaches Zuweisen der Rückgabevariable
Sebastian Zambanini - EVC - MATLAB Einführung19
Datei absdiff.m:
Workspace
Alle über Skripts oder Command Window erzeugten Variablen bleiben im Workspace, bis sie überschrieben oder explizit gelöscht werden
Funktionen haben einen lokalen, von außen unsichtbaren Workspace
Alle lokalen Variablen werden nach Beendigung der Funktion gelöscht
Anzeigen des Workspaces im Command Window: whos
Sebastian Zambanini - EVC - MATLAB Einführung20
Löschen von Variablen: clear variable
Löschen aller Variablen: clear all
Programmflusssteuerung
while-Schleife
for-Schleife
if-else-Block
Sebastian Zambanini - EVC - MATLAB Einführung21
Operatoren
Sebastian Zambanini - EVC - MATLAB Einführung22
< kleiner> größer<= kleiner gleich>= größer gleich== gleich~= ungleich
Vergleichsoperatoren
+ Addition - Subtraktion* Matrix-Multiplikation/ Matrix-Division^ Matrix-Potenzierung.* Elementweise Multiplikation./ Elementweise Division .^ Elementweise Potenzierung
Arithmetische Operatoren
Vergleichsoperatoren können auch element-weise angewendet werden: Unterschied zw.
Matrix-Multiplikation und elementweiser Multiplikation:
Vektorisierung
Nahezu alle Funktionen akzeptieren sowohl skalare als auch mehrdimensionale Eingaben
(for-) Schleifen werden sehr ineffizient ausgeführt
Schleifen können großteils vermieden werden
Sebastian Zambanini - EVC - MATLAB Einführung23
Dauert 4,38 s Dauert 0,02 s
Visualisierung
MATLAB stellt leistungsfähige Funktionen und Tools zur Visualisierung von Daten bereit, unter anderem:
Sebastian Zambanini - EVC - MATLAB Einführung24
2D Plots
BilderMehrere Abbildungen
3D Plots
Figures
Visualisierungen werden in eigenen Fenstern (sog. figures) gezeichnet
figure öffnet ein neues Fenster
figure(n) wählt das n-te Fenster zum Zeichnen aus oder öffnet es, falls noch nicht vorhanden
close n schließt das n-te Fenster
close all schließt alle Fenster
Eine figure bietet zahlreiche Tools zurUntersuchung der Daten (Zoomen,Wertebereich anpassen,…)
Sebastian Zambanini - EVC - MATLAB Einführung25
2D Plots
Plotten von Wertepaaren: plot(x,y,‘formatstring‘)
: rote durch-gängige Linie
Formatierung derPlots: doc plot
Sebastian Zambanini - EVC - MATLAB Einführung26
2D Plots
Mittels hold on können mehrere Plots überlagert werden
Sebastian Zambanini - EVC - MATLAB Einführung27
Bilder – Einlesen und Speichern
Bilder sind Matrizen!
Grauwert: m x n
Farbbild (RGB): m x n x 3
Einlesen von Bildern: imread
Kennt alle gängigen Formate (jpg,png,tif,…)
Sebastian Zambanini - EVC - MATLAB Einführung28
Typ der Variable von Bildformat abhängig, in der Regel aber uint8 (0…255)
Viele Bildoperationen verlangen Fließkommawerte, daher Umwandlung in double oder single sinnvoll
Speichern von Bildern: imwrite
Bilder - Anzeige
Darstellen von Bildern/Matrizen: imshow
imshow nimmt Werte zw. 0…255 (uint8) bzw. 0…1 (single, double) an
Alles darüber oder darunter wird als schwarz bzw. weiß angezeigt
Darzustellender Wertebereich kann in [] angegeben werden
Leere [] bedeuten automatische Kontrastanpassung an den Wertebereich der Matrix (min. Wert: schwarz, max. Wert: weiß)
Sebastian Zambanini - EVC - MATLAB Einführung29
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung30
Variable bild ist vom Typ uint8
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung31
imshow erwartet bei double Werte im Bereich 0…1
Die Werte sind aber im Bereich 0…255
Alle Werte >= 1 werden als weiß dargestellt
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung32
Mit expliziter Angabe des Bereichs 0…255 wird das double-Bild korrekt dargestellt
im2double konvertiert uint8-Bilder so, dass das Bild im Bereich 0…1 ist
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung33
Automatische Anpassung: maximale Kontrastausnutzung
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung34
Explizite Angabe des Bereichs: alle Werte >= 100 werden weiß dargestellt
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung35
Explizite Angabe des Bereichs: alle Werte <= 150 werden schwarz dargestellt
Farbbilder
imshow interpretiert m x n x 3 Matrizen als Farbbilder
Roter Kanal anzeigen:
Sebastian Zambanini - EVC - MATLAB Einführung36
Image Processing Toolbox
Import und Export von Bildern
Vor- und Nachbearbeitung von Bildern
Bildanalysen
Anzeige und Auswertung von Bildern und Videos
Räumliche Transformationen und Bildregistrierung
Sebastian Zambanini - EVC - MATLAB Einführung37
Beispiel: Grauwertumwandlung
Sebastian Zambanini - EVC - MATLAB Einführung38
Beispiel: Kantendetektion
Sebastian Zambanini - EVC - MATLAB Einführung39
Resizing & Rotation
Sebastian Zambanini - EVC - MATLAB Einführung40
Debugging
Setzen von Breaktpoints in MATLAB-Skripts (Klick neben Zeilennummer)
Die Ausführung der Funktion/Skripts wird am Breaktpoint angehalten
Im Command Window können nun Variablen untersucht und verändert werden
K: Debug Modus
Sebastian Zambanini - EVC - MATLAB Einführung41
Debugging
Buttons zur Navigation im Debug-Modus
Step, Step in, Continue….
Breakpoints können auch mit Haltebedingungen versehen werden
Sebastian Zambanini - EVC - MATLAB Einführung42
Wichtige und nützliche Befehle
Details zu den Befehlen: siehe Hilfe
Länge eines Vektors (Anzahl der Elemente): length
Speichern von Variablen in .mat-Datei: save
Laden von Variablen aus .mat-Datei: load
Mauscursor mit Anzeige von Pixelkoordinaten und Pixelwerten: impixelinfo
Neue Matrix aus Kopien einer Matrix erzeugen: repmat
Matrizen zusammenfügen: cat
Filter erzeugen: fspecial
Bild filtern: imfilter
Sebastian Zambanini - EVC - MATLAB Einführung43
Häufige Probleme, Tipps & Tricks
Problem: das angezeigte Bild ist komplett weiß/schwarz
Das Problem ist wahrscheinlich imshow
Ist das Bild wirklich weiß/schwarz? -> Werte der Matrix untersuchen
Darzustellenden Wertebereich bei imshow in []
angeben
Achtung: In MATLAB sind Matrixkoordinaten ungleich Bildkoordinaten
Funktionen der Image Processing Toolbox arbeiten mit Bildkoordinaten,z.B. impixelinfo
Sebastian Zambanini - EVC - MATLAB Einführung44
Matrix
x
y
Bild
y
x
Häufige Probleme, Tipps & Tricks
Tipp: Möglichkeiten der MATLAB-Programmiersprache ausnutzen
Elementweise Operationen
multiplizieren der Pixelwerte eines Bildes mit einer Konstante
Binäres Bild mit logical-Werten, bei denen alle Werte größer 100 auf 1 (true) gesetzt werden
alle Werte kleiner 0 auf 0 setzen
Sebastian Zambanini - EVC - MATLAB Einführung45
Häufige Probleme, Tipps & Tricks
Obwohl MATLAB es erlaubt: Variablen sollten nicht nach Funktionsnamen benannt werden!
Das führt zu schwer auffindbaren Fehlern
Beispiel:
Für Operationen, die Fließkomma-Arithmetik verlangen, keine Integer-Variablen verwenden
Keine Fehlermeldung, aber unerwartete Ergebnisse
Sebastian Zambanini - EVC - MATLAB Einführung46
Variable mit selben Namen wie Funktion für Cosinus
Berechnet nicht den Cosinus von 2, sondern gibt das Element an der 2. Stelle des Vektors zurück
3. Übungsbeispiel (Kamerasensoren): Filtern von Bildern
j k l
m n o
p q r
x
y Bild f(x, y)
eneu = n∙e + j∙a + k∙b + l∙c
+ m∙d + o∙f + p∙g
+ q∙h + r∙i
Filter3x3 Nachbarschaft
e 3x3 Filter
a b c
d e f
g h i
UrsprünglichePixelwerte
*
Diese Operation wird für jeden Pixel im Bild durchgeführt, um das gefilterte Bild zu erhalten
47 Sebastian Zambanini - EVC - MATLAB Einführung
3. Übungsbeispiel (Kamerasensoren): Filtern von Bildern
Sebastian Zambanini - EVC - MATLAB Einführung48
Filtern von Bildern in MATLAB: imfilter bzw. conv2
Beispiel: Interpolieren fehlender Werte (0) über Werte der Nachbarpixel
Filter
5∙0 + 0∙0.25 + 10∙0 + 0∙0.25
+ 3∙1 + 0∙0.25 + 4∙0 + 0∙0.25
+ 2∙0 + 0∙0 = 3
bild = imfilter(bild,[0 0.25 0;0.25 1 0.25;0 0.25 0],‘same‘);
0∙0 + 5∙0.25 + 0∙0 + 7∙0.25 +
0∙1 + 3∙0.25 + 0∙0 + 4∙0.25 +
0∙0 = 4.75
Weitere (für die LVA irrelevante) Konzepte von MATLAB
Objektorientierte Programmierung
Einbindung von C-Code: mex Funktionen
GUI-Programmierung
Error Handling (try-catch)
Arrays von Matrizen unterschiedlicher Größe – cells
Laufzeitanalyse: Profiler
Sebastian Zambanini - EVC - MATLAB Einführung49
Viel Spaß mit MATLAB!