Post on 21-Aug-2019
Einführung in Visual Computing
Einführung in MATLAB Sebastian Zambanini Computer Vision Lab
Institut f. Rechnergestützte Automation TU Wien
Reminder
Deadline für Eingangsbeispiel ist heute Mitternacht Abgabe des Eingangsbeispiel ist Voraussetzung, um an der LVA
teilzunehmen und ein Zeugnis zu bekommen Nachfrist: Übermorgen Donnerstag, 20.3., Mitternacht 2 Punkte Abzug pro Tag (von 5)
Sebastian Zambanini - EVC - MATLAB Einführung 2
Ü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ührung 3
MATLAB-Übungen
Benötigte Tools für die Übung: MATLAB und Blender Blender-Einführung am 26.3.2014 Angaben für MATLAB-Einführungs- beispiel ab heute 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ührung 4
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.3 (R2014a)
Viele Toolboxen für verschiedenste Anwendungsbereiche Signalverarbeitung, Bildverarbeitung, Finanzmathematik, …
Proprietäre Programmiersprache
Was ist MATLAB?
5 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ührung 6
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ührung 7
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.pdf Erstes 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ührung 8
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 (online: € 13,90, DVD: € 12,50): 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 per Mail versendet
Sebastian Zambanini - EVC - MATLAB Einführung 9
MATLAB Desktop
Sebastian Zambanini - EVC - MATLAB Einführung 10
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 Editors edit dateiname.m
Kommentare mit % Ein Semikolon (;) unterdrückt die Ausgabe
in der Kommandozeile Sebastian Zambanini - EVC - MATLAB Einführung 11
Datei mytest.m:
MATLAB Editor
Sebastian Zambanini - EVC - MATLAB Einführung 12
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ührung 13
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ührung 14
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ührung 15
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ührung 16
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ührung 17
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ührung 18
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ührung 19
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ührung 20
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ührung 21
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ührung 22
Operatoren
Sebastian Zambanini - EVC - MATLAB Einführung 23
< 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ührung 24
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ührung 25
2D Plots
Bilder Mehrere 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 zur
Untersuchung der Daten (Zoomen, Wertebereich anpassen,…)
Sebastian Zambanini - EVC - MATLAB Einführung 26
2D Plots
Plotten von Wertepaaren: plot(x,y,‘formatstring‘)
‘r-‘: rote durch- gängige Linie
Formatierung der Plots: doc plot
Sebastian Zambanini - EVC - MATLAB Einführung 27
2D Plots
Mittels hold on können mehrere Plots überlagert werden
Sebastian Zambanini - EVC - MATLAB Einführung 28
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ührung 29
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ührung 30
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung 32
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ührung 33
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ührung 34
Automatische Anpassung: maximale Kontrastausnutzung
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung 35
Explizite Angabe des Bereichs: alle Werte >= 100 werden weiß dargestellt
Bilder - Anzeige
Sebastian Zambanini - EVC - MATLAB Einführung 36
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ührung 37
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ührung 38
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ührung 42
Debugging
Buttons zur Navigation im Debug-Modus
Step, Step in, Continue…. Breakpoints können auch mit Haltebedingungen versehen
werden
Sebastian Zambanini - EVC - MATLAB Einführung 43
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ührung 44
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ührung 45
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ührung 46
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ührung 47
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
Vorschau zur 12. VO-Einheit: 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
Filter 3x3 Nachbarschaft e 3x3 Filter
a b c
d e f
g h i Ursprüngliche
Pixelwerte
*
Diese Operation wird für jeden Pixel im Bild durchgeführt, um das gefilterte Bild zu erhalten
48 Robert Sablatnig, Computer Vision Lab, EVC-11: Local Operations
Vorschau zur 12. VO-Einheit: Filtern von Bildern
Sebastian Zambanini - EVC - MATLAB Einführung 49
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ührung 50