51
Einführung in Visual Computing Einführung in MATLAB Sebastian Zambanini Computer Vision Lab Institut f. Rechnergestützte Automation TU Wien

Einführung in Visual Computing Einführung in MATLAB · help befehl bzw. doc befehl ... Zugriff auf Matrix- oder Vektor-Elemente Zugriff auf Einzelelemente: A(zeile,spalte) = wert

  • Upload
    lediep

  • View
    226

  • Download
    0

Embed Size (px)

Citation preview

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 31

Variable bild ist vom Typ uint8

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

Beispiel: Grauwertumwandlung

Sebastian Zambanini - EVC - MATLAB Einführung 39

Beispiel: Kantendetektion

Sebastian Zambanini - EVC - MATLAB Einführung 40

Resizing & Rotation

Sebastian Zambanini - EVC - MATLAB Einführung 41

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

Viel Spaß mit MATLAB!