• Keine Ergebnisse gefunden

Kapitel 4 Raster-Daten

N/A
N/A
Protected

Academic year: 2022

Aktie "Kapitel 4 Raster-Daten"

Copied!
156
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

www.martinwerner.de

Kapitel 4

Raster-Daten

(2)

381

www.martinwerner.de

Motivation

 Die Übungsaufgabe, in der eine Menge aus Polygonen A mit Labels versehen werden soll, indem eine andere Menge gelabelter Polygone B mit diesen Polygonen geschnitten wird und als Label des Polygons das Label genommen wird, mit dem die Polygone die meiste Fläche haben, ist in Geometrie sehr aufwändig zu lösen, zum Beispiel

Für jedes Polygon in A

 Finde zu einem Polygon aus A alle scheidenden Polygone aus B

 Berechne den Schnitt und dann die Fläche für jeden Schnitt

 Summiere die Flächen der gleichen Labels

 Weise das Label zu

(3)

www.martinwerner.de

A litte inaccuracy saves a lot of calculation…

 Eine einfachere Lösung des Problems wird geliefert, indem man den komplexen Schnitt zweier Polygone durch eine geeignete Menge an Punkt-in-Polygon-Tests ersetzt.

 Dazu benötigen wir eine Menge an Punkten, die Flächeninhalt mit einer gewählten Genauigkeit repräsentieren kann.

 Eine Möglichkeit besteht in einem regulären Gitter: Setze Punkte mit

(4)

383

www.martinwerner.de

Gitter

 Ein n-dimensionales reguläres Gitter ist eine Menge an Punkten,

deren Abstände in jeder Koordinate fest sind. Diese Abstände heißen Gitterabstände.

 Ein georeferenziertes Gitter ist ein Gitter mit Koordinaten in einem Referenzsystem (Koordinatensystem)

(5)

www.martinwerner.de

Gitter Labeln

Werte, die einem regulären Gitter zugeordnet werden, sind in natürlicher Weise als Matrix aufzufassen:

j

i

(6)

385

www.martinwerner.de

Gitter Labeln

Werden bei festem Gitter jedem Gitterpunkt mehrere Werte zugeordnet, spricht man von Bändern.

(7)

www.martinwerner.de

Beispiel: Wellenlängen in optischen Bildern

+ +

(8)

387

www.martinwerner.de

Zur Übungsaufgabe

1. Wähle Gitterabstand.

2. Berechne Gitter / Raster

3. Fülle Raster-Layer mit Klassen aus Datensatz B (z.B. int8) 4. Fülle Raster-Layer mit ID aus Datensatz B (z.B. int64)

5. Reduziere auf ID und zähle

Bem.: Das ist durch ein Ablaufen des Rasters einfach möglich.

(9)

www.martinwerner.de

Raster- und Vektorkarten

Vektorkarten

 Liste von geometrischen Primitiven (Line, …)

+ beliebig genau

+ verlustfrei skalierbar

+ Datengröße abhängig von Komplexität - Komplexe Flächen- und

Rasterkarten

• Information pro Flächenelement / Gitterpunkt

+ konstante Genauigkeit

+ Flächen- und Kollisionsanfragen einfach

+ Systeme können für Bildbearbeitung optimiert sein (MMX, SSE, CUDA etc.)

~ Datengröße abhängig von Fläche

(10)

389

www.martinwerner.de

Struktur einer Vektorkarte

(11)

www.martinwerner.de

Struktur einer Rasterkarte

(12)

391

www.martinwerner.de

Geometrie in Rasterkarte (horizontal, vertikal)

(13)

www.martinwerner.de

Geometrie in Rasterkarte (Diagonal)

(14)

393

www.martinwerner.de

Schneiden sich diese zwei Linien?

(15)

www.martinwerner.de

Pixel werden

entsprechend ihres

Flächenanteils gefüllt oder gefärbt.

Für Farben einfach (weil vom menschlichen Auge korrekt wahrgenommen).

Für z.B. Raster mit

diskreten Werten (unsere Lösung: Sub-Pixeling / Anti-Aliasing

(16)

395

www.martinwerner.de

Raster-Darstellung in der echten Welt

gdalinfo germany-cloudfree-simple.tiff Driver: GTiff/GeoTIFF

Files: germany-cloudfree-simple.tiff Size is 67235, 94080

Coordinate System is:

LOCAL_CS["WGS 84 / Pseudo-Mercator", GEOGCS["WGS 84",

DATUM["unknown",

SPHEROID["unretrievable - using WGS84",6378137,298.257223563]], PRIMEM["Greenwich",0],

UNIT["degree",0.0174532925199433]], AUTHORITY["EPSG","3857"],

UNIT["metre",1,

AUTHORITY["EPSG","9001"]]]

Angaben zu - Format

- Anzahl Pixel

- Koordinatensystem (WKT)

(17)

www.martinwerner.de

Raster-Darstellung in der echten Welt

Origin = (641594.910993173718452,7370990.488857678137720) Pixel Size = (15.545613327413848,-15.545613327413848)

Metadata:

AREA_OR_POINT=Area Image Structure Metadata:

INTERLEAVE=PIXEL Corner Coordinates:

Upper Left ( 641594.911, 7370990.489) Lower Left ( 641594.911, 5908459.187) Upper Right ( 1686804.223, 7370990.489)

- Ursprung in Geokoordinaten - Größe der Pixel - Fläche oder Punkt - Strukturinformation - Geokoordinaten

(berechnet) - Bänder

(18)

397

www.martinwerner.de

Bemerkungen

 Rastergeometrie im Detail:

Ein GeoTIFF-Raster besteht aus einer rechteckigen Matrix mit Werten pro Band. Eine Geotransformation besagt, wie sich mit einem Schritt nach rechts (bzw. nach unten) in dieser Matrix die Weltkoordinaten ändern. Diese Veränderung ist konstant.

Elt. Bedeutung

GT[0] X-Koordinate in CRS oben links (für Pixel 0,0)

GT[1] X-Offset in X-Richtung für jeden Pixel-Schritt nach Rechts GT[2] X-Offset in Y-Richtung für jeden Pixel-Schritt nach rechts

(Drehung, oft 0)

GT[3] Y-Koordinate in CRS oben links (für Pixel (0,0))

GT[4] Y-Offset in X-Richtung für jeden Pixel-Schritt nach unten (Drehung, oft 0)

GT[5] Y-Offset in Y-Richtung für jeden Pixel-Schritt nach unten

(19)

www.martinwerner.de

Berechne Weltkoordinaten für beliebigen Pixel

 Mit der Geotransformation bestimmen die folgenden Gleichungen die Weltkoordinaten eines Pixels mit (ganzen) Koordinaten i,j:

= + ⋅ + ⋅

= + ⋅ + ⋅

(20)

399

www.martinwerner.de

Einfache Rasteroperationen

gdal_info:

Zeige Raster-Informationen an gdal_warp:

Zusammensetzen von Teilrastern

Ändern des Gitters / der Projektion (Warping) gdal_translate

Ändere Format

Subsetting / Resampling / Interpolation gdal_rasterize

Übersetze (OGR-)Geometrie in Raster gdal_grid

Erzeuge Raster aus Werten an irregulären Punkten gdal_calc

Einfaches Rechnen mit Rasterlayern (numpy)

(21)

www.martinwerner.de

Kapitel 4.1

Rasterisierung

(22)

401

www.martinwerner.de

Rasterisierung

 Übersetzen von

Geometrieobjekten in Raster

 Beispiel: Punkte (mit Radius)

 Berechne Pixelkoordinaten in Fließkomma

 Berechne anteilige Fläche pro Pixel

 Modifiziere Pixel (Blending

 Computergrafik / Visual Computing)

Ist der Radius klein genug, kann die Berechnung der Fläche entfallen

(23)

www.martinwerner.de

Rasterisierung: Linien

 Einfachste Möglichkeit: Interpoliere und Raster Punkte

= + ⋅

Problem: Welche Schrittweite? Tradeoff zwischen Aufwand und Wahrscheinlichkeit, alle Pixel auch zu treffen.

(24)

403

www.martinwerner.de

Bresenham-Algorithmus

 Beobachtung: Nach Setzen einen Pixels kann der nächste Pixel nur ein Nachbarpixel sein

 Einschränkung auf Oktant: Linien, die nach unten-Rechts gehen

 Folge:

 Der Y-Schritt pro X-Schritt ist kleiner 1  1 Pixel pro X-Schritt zu setzen

Nur Linien in diesem Oktant

(25)

www.martinwerner.de

Welcher Y-Schritt

 Allgemeine Liniengleichung

− = −

/

/ /

(26)

405

www.martinwerner.de

Optimierung

Der Bresenham-Algorithmus berechnet jetzt nicht die echte Y-

Koordinate, sondern verfolgt die ganzzahlige Y-Koordinate und den Fehlerterm (also die Differenz des echten Y-Wertes und des aktuellen ganzzahligen Y-Wertes. Sobald dieser Fehler größer wird als 1, wird er um 1 verringert und die Y-Koordinate angepasst.

Explizit also Pseudo-Code also:

error=0, int y = y0, float deltaerr = abs( (y1-y0)/(x1-x0)) for x from x0 to x1

putpixel(x,y)

error := error + deltaerr if error ≥ 0.5 then

y := y + sign(deltay) error := error - 1.0

(27)

www.martinwerner.de

Beispiel: Bresenham-Algorithmus für Linien (2)

 Eine Fallunterscheidung unter Ausnutzung der Symmetrie wird jetzt verwendet, um den Basisalgorithmus auf alle 8 Oktanten abzubilden.

Merke: Der Bresenham-Algorithmus hat immer eine schnelle Richtung und eine langsame Richtung. In die schnelle Richtung (X oder Y)

macht man immer einen Schritt, in die langsame Richtung nur ab und zu.

(28)

407

www.martinwerner.de

Bresenham-Algorithmus in Python

− 1

Fehler übersteigt 0.5 Durch Y-Schritt reduziert sich auf − 1 und kann dann negativ sein!

(29)

www.martinwerner.de

Beispiel: Bresenham-Algorithmus (Anti-Aliasing)

 Das Fehlerglied kann für Anti- Aliasing verwendet werden

 es kommen in die langsame Richtung nur der richtige Pixel nach Bresenham und die beiden vertikalen Nachbarn in Frage

 Ist der Fehler groß, beeinflusst es den Pixel darüber

(30)

409

www.martinwerner.de

Einfaches Beispiel

 Mit diversen Vereinfachungen (z.B.

ist die Liniendicke von der Steigung abhängig), können wir eine einfache Anti-Aliasing-Regel umsetzen.

 Wäre der Fehler 1 oder -1, so wäre der zentrale Pixel nicht getroffen und müsste Gewicht 0 bekommen

(31)

www.martinwerner.de

Linie mit und ohne Anti-Aliasing (einfaches)

(32)

411

www.martinwerner.de

Bresenham-Algorithmus für Kreise

 Bei einem Kreis ist im ersten Oktant die schnelle Richtung die Y- Richtung. Alle anderen Oktanten entstehen durch symmetrische Operationen (verschieben, spiegeln) der Koordinaten

Abbildung: Wikipedia, abgerufen 2019

 Wir betrachten den Kreis um Ursprung

+ =

 Für einen (negativen) Schritt in X-Richtung ändert sich die rechte Seite wie folgt:

− 1 + − + = −2 + 1

 Analog für Y: + + 1 − − = 2 + 1

 Damit kann der Fehler fortgeschrieben werden und ein Schritt ausgeführt werden ,sobald der Fehler zu groß wird.

(33)

www.martinwerner.de

Rasterisieren von Polygonen

Zum Rasterisieren von Polygonen gibt es zwei gängige Methoden mit ihren Vor- und Nachteilen

 Angenommen, ein Punkt-im-Polygon-Test ist verfügbar, dann kann man für jeden Pixel einen solchen Test mit dem gegebenen Polygon durchführen. Ein Pixel wird gesetzt, wenn er im Innern des Polygons liegt.

 Vorteil: Genauigkeit und Kompatibilität mit Projektionen

 Nachteil: Langsam, Rundungsartefakte möglich

(34)

413

www.martinwerner.de

Kapitel 4.1.2

Punkt-Im-Polygon-Test

(35)

www.martinwerner.de

Beispiel: Punkt in Polygon

Gegeben sei ein Polygon durch seine Eckpunkte in Umlaufrichtung und ein Punkt. Liegt dieser Punkt im Innern des Polygons?

(36)

415

www.martinwerner.de

Beispiel: Punkt in Polygon

Gegeben sei ein Polygon durch seine Eckpunkte in Umlaufrichtung und ein Punkt. Liegt dieser Punkt im Innern des Polygons?

Jordanscher Kurvensatz:

Jede stetige, schnittpunktfreie Kurve (Jordankurve) teilt den Raum in zwei disjunkte Mengen, deren Rand die Kurve selbst ist. [Beweis

ziemlich aufwändig…]

(37)

www.martinwerner.de

Beispiel: Punkt in Polygon

Gegeben sei ein Polygon durch seine Eckpunkte in Umlaufrichtung und ein Punkt. Liegt dieser Punkt im Innern des Polygons?

Jordanscher Kurvensatz:

Jede stetige, schnittpunktfreie Kurve (Jordankurve) teilt den Raum in zwei disjunkte Mengen, deren Rand die Kurve selbst ist. [Beweis

ziemlich aufwändig…]

Algorithmus: Jordan-Test

Werfe ausgehend vom Punkt einen Strahl in irgendeine Richtung und zähle die Schnittpunkte. Fälle:

(38)

417

www.martinwerner.de

Außerhalb

(39)

www.martinwerner.de

Innerhalb

(40)

419

www.martinwerner.de

Nicht entscheidbar

(41)

www.martinwerner.de

Rasterisieren mit Punkt-im-Polygon-Test

Der Algorithmus zum Rasterisieren ist nun ziemlich einfach:

Für jeden Pixel, berechne die Koordinaten im Koordinatensystem des Polygons und führe den Jordan-Test durch.

Optimierungen:

 Es reicht, horizontale Strahlen zu schicken.

 Man kann das Kreuzprodukt verwenden, um zu testen, ob ein Schnitt vorliegt.

(42)

421

www.martinwerner.de

Kapitel 4.1.3

Scanline-Algorithmus für Polygone

(43)

www.martinwerner.de

Rasterisieren von Polygonen – Scanlines

Grundidee:

 Wir durchlaufen das Raster in eine Richtung, typischerweise Zeilenweise (deswegen Scanline-Algorithmus).

 Für jede Zeile berechnen wir

 die Schnittpunkte mit dem Polygon

 Ordnen diese nach der X-Koordinate

 Zeichnen von links nach rechts „Runs“ ein

(44)

423

www.martinwerner.de

Implementierung

 Da die Kanten, die eine Zeile schneiden, meist auch die Kanten der darunter liegenden Zeile schneiden, werden diese vernünftig

organisiert und nicht jedesmal neu berechnet.

 Sortiere alle Kanten des Polygons nach minimaler Y-Koordinate

 Berechne aus dieser Kantenliste eine lister „aktiver“ Kanten („Active Edge Table“, AET)

 Speichere Steigungsinformationen um den Wechsel der Scanline ohne Berechnung durchführen zu können

 Ignoriere horizontale Linien

 Behandele Punkte geeignet (doppelt zählen…)

(45)

www.martinwerner.de

Polygon-Füllen

1. Edge-Table (sortiere nach Y- Anfang der Kanten, danach nach X)

Ignoriere horizontale Kanten

1 2

3

4

(46)

425

www.martinwerner.de

Polygon-Füllen

2. Initialisiere Active Edge Table Nutze Anfang der Liste, um die erste Scanline zu suchen.

Fülle Active Edge Table, Bestimme Schnittpunkte im Raster und sortiere nach X

Jeder Schnittpunkt schaltet um von Füllen zu Nicht-Füllen und umgekehrt.

Zeichne Scanline

(47)

www.martinwerner.de

Polygon-Füllen

3. Zeilenschritt

- Aktualisiere Edge Table

- Entferne Kanten, die enden

- Füge nächste Kante ein, wenn wir die Y- Koordinate erreicht haben

- Verarbeite Schnittpunkte wie

(48)

427

www.martinwerner.de

Polygon-Füllen

3. Zeilenschritt

- Aktualisiere Edge Table

- Entferne Kanten, die enden

- Füge nächste Kante ein, wenn wir die Y- Koordinate erreicht haben

- Verarbeite Schnittpunkte wie gehabt

(49)

www.martinwerner.de

Polygon-Füllen

3. Zeilenschritt

- Aktualisiere Edge Table

- Entferne Kanten, die enden

- Füge nächste Kante ein, wenn wir die Y- Koordinate erreicht haben

- Verarbeite Schnittpunkte wie

(50)

429

www.martinwerner.de

Polygon-Füllen

(51)

www.martinwerner.de

Polygon Füllen

 Vorteile vom Scanline-Algoirthmus

 Speicher-Lokal im Raster (zeilenweise von links nach rechts

 Nachteile

 Sortieren ist komplex

 Auflösungsdifferenz wird nicht ausgenutzt Weitere Alternativen:

 z.B. Rasterisiere Randlinie (dicht!) und Fülle im Inneren

(52)

431

www.martinwerner.de

Bemerkung

 Scanline-Algorithmen sind eine gängige Klasse in der Computational Geometry

 Formuliere Algorithmen so, dass sie in einer Richtung monoton (hier mit steigendem Y) verarbeitet werden können

(53)

www.martinwerner.de

Kapitel 4.2

Vektorisieren

(54)

433

www.martinwerner.de

Vektorisierung

 Vektorisierung ist der Versuch, eine im Raster gefasste Geometrie wieder als Vektor-Geometrie darzustellen

 Vektorisierung ist komplex, da z.B. nicht klar ist, welche Objekte zusammen gehören.

 Wir betrachten nur einen vereinfachten Fall: Ein einzelnes Polygon ist mit Bresenham-Linienalgorithmus gemalt worden, hat daher keine Löcher. Wie rekonstruieren wir die Geometrie?

(55)

www.martinwerner.de

Möglichkeit: Direkt als Umlauf

 Starte mit blauem Pixel

 Suche unter den 9 Nachbarn gegen den Urzeigersinn von der Umkehrung des eigenen Schrittes ausgehend den ersten Pixel

 Konstruiere Liniensegment

(56)

435

www.martinwerner.de

Strukturverbesserung

 Das sind nun zu viele Ecken, einer pro Pixel

 Ecken in dieselbe Richtung (180°) können entfernt werden

 Polygon war mit großer Wahrscheinlichkeit nicht im Gitter, in dem nur 45° dargestellt werden können

 Dieses Problem löst man mit Linienvereinfachung:

 Gegeben eine Linie (einen Polygonring), finde einen Ring mit weniger Punkten, der geometrisch und/oder visuell so wenig wie möglich abweicht.

(57)

www.martinwerner.de

Kapitel 4.3

Line Simplification

(58)

437

www.martinwerner.de

Kartographische Vereinfachung

Beispiel: Douglas-Peucker-Algorithmus: Gegeben ein Fehlermaß pro Punkt.

So lange Summe aller Fehler zu groß, unterteilte Objekt am Punkt mit größtem Fehler und fahre mit beiden Hälften fort.

(59)

www.martinwerner.de

Kartographische Vereinfachung

(60)

439

www.martinwerner.de

Kartographische Vereinfachung

Beispiel: Douglas-Peucker-Algorithmus: Gegeben ein Fehlermaß pro Punkt.

So lange Summe aller Fehler zu groß, unterteilte Objekt am Punkt mit größtem Fehler und fahre mit beiden Hälften fort.

(61)

www.martinwerner.de

Im Detail / in Python

 Rekursion in der Programmierung

 Die Fähigkeit eines

Unterprogramms, sich selbst aufzurufen.

Vorteil:

 Einfache Formulierung vieler Algorithmen

Nachteil:

(62)

441

www.martinwerner.de

Beispiel: Line Simplification mit Douglas Peucker

 Wir erweitern den Parameter um den Bereich der Verarbeitung

 Array mit den Punkten

 Fehlerschranke

 Anfangs und End-Index

 Rückgabe der Vereinfachung: Indizes der noch enthaltenen Punkte

 Algorithmus

Berechne den Fehler für jeden Punkt im Bereich der Verarbeitung, der entsteht, wenn der gesamte Bereich durch ein Liniensegment vom

Anfangs zu Endpunkt ersetzt wird. Bestimme Index des maximalen Fehlers. Ist der Fehler größer als die gegebene Fehlerschranke, rufe rekursiv auf mit den Bereichen Anfangspunkt bis Punkt maximalen Fehlers und Punkt maximalen Fehlers bis Endpunkt.

(63)

www.martinwerner.de

Kartographische Vereinfachung

 Der Algorithmus terminiert?!

 Falls der Fehler die Eigenschaft hat, dass der Fehler der Eingabe verglichen mit sich selbst Null wird und der Fehler nicht-negativ ist, terminiert diese Vorschrift – im Worst Case mit der Eingabe

 Ist der Algorithmus korrekt?

 Der Algorithmus ist korrekt, weil zum Zeitpunkt der Terminierung kein Segment entsteht, in dem das Fehlermaß überschritten wird.

(64)

443

www.martinwerner.de

Welchen Fehler?

 Wir verwenden im klassischen Douglas-Peucker-Algorithmus den orthogonalen Fehler, also den Abstand eines Punktes aus der Ursprungstrajektorie zum Kandidaten-Liniensegment.

 Dieser ist lokal und generalisiert (wenn an keiner Stelle im Innern eines Segmentes der Fehler der Vereinfachung gegenüber dem Original größer ist als die Fehlerschranke, dann gilt dies auch für die zusammengesetzte vereinfachte Trajektorie, da der Fehler an den Stützpunkten Null ist (sie liegen ja auf der

Ursprungstrajektorie!)

(65)

www.martinwerner.de

Implementierungsbeispiel

void simplify(TrajectoryType &u, size_t istart, size_t iend, DistanceType max_error) {

// simplify segment and recurse

#ifdef DEBUG_douglas_peucker_simplify

std::cout << istart << "," << iend << std::endl;

#endif

if ((istart -iend) < 2) return; // there is nothing I can add.

size_t the_index=0;

DistanceType the_contribution = largest_contribution(u,istart,iend,the_index);

if (the_contribution > max_error) {

booleanMap[the_index] = 1;

Diese Implementierung verwendet eine (Klassen-)globale

(66)

445

www.martinwerner.de

Implementierungsbeispiel

DistanceType largest_contribution(TrajectoryType &u, size_t istart, size_t iend,size_t &the_index) {

// find the point which contributes most DistanceType the_contribution = -1;

typename TrajectoryType::value_type s = u[istart];

typename TrajectoryType::value_type e = u[iend];

for (size_t i=istart+1; i < iend; i++) {

DistanceType contribution = (*d)(s,e,u[i]);

if (contribution > the_contribution) {

the_contribution = contribution;

the_index = i;

} }

return the_contribution;

}

Aus libtrajcomp – https://www.github.com/mwernerds/trajcomp

Hier wird eine Point-Line-Distanzfunktion aufgerufen, die verändert werden kann. Ist in der Regel die orthogonale Distanz.

(67)

www.martinwerner.de

Implementierungsbeispiel

std::vector<size_t> indizes(TrajectoryType u, DistanceType max_error,

element_segment_distance<typename TrajectoryType::value_type,DistanceType> &d) {

this->d = &d;

booleanMap.resize(u.size());

for (size_t i=0; i < u.size(); i++) booleanMap[i] = 0;

booleanMap[0] = booleanMap[u.size()-1] = 1;

numericMap.resize(u.size());

simplify(u,0,u.size()-1,max_error);

// now build the simplified trajectory std::vector<size_t> ret;

for (size_t i=0; i < booleanMap.size(); i++)

Initialisiere die Property Map, berechne die

(68)

447

www.martinwerner.de

Implementierungsbeispiel

TrajectoryType operator()(TrajectoryType u, DistanceType max_error,

element_segment_distance<typename TrajectoryType::value_type,DistanceType> &d) {

auto which = indizes(u,max_error,d);

TrajectoryType ret;

for (auto w:which) ret.push_back(u[w]);

return ret;

}

Aus den Indizes kann man auch wieder eine Trajektorie bauen, indem man die Punkte zusammensetzt.

(69)

www.martinwerner.de

Beispiel: Douglas-Peucker (vereinfacht, in Python)

(70)

449

www.martinwerner.de

Beispiel: Douglas-Peucker (vereinfacht, in Python)

(71)

www.martinwerner.de

Douglas-Peucker Hauptprogramm

(72)

451

www.martinwerner.de

Kapitel 4.4

Rasteroperationen / „Map Algebra“

(73)

www.martinwerner.de

Typische Rasteroperationen

 Bei Operationen zwischen zwei Rastern unterscheidet man zunächst

Local

Der Wert des Ausgaberasters ist berechnet aus den Werten an denselben Orten des Eingaberasters

Focal

Der Wert des Ausgaberasters ist berechnet aus den Werten in einer (rechteckigen) Umgebung des Ortes im Eingaberaster

Zonal

(74)

453

www.martinwerner.de

Eingabedaten für die Raster-Operationen

Local Focal Zonal Global

(75)

www.martinwerner.de

Beispiel: Lokale Operationen

Lokale Operationen sind gebräuchlich für zwei oder mehr (Stacks) Raster mit gleicher Größe und Projektion.

Zum Beipsiel:

 Arithmetic operations (addition, subtraction, multiplication, division)

 Statistical operations (minimum, maximum, average, median)

 Relational operations (greater than, smaller than, equal to)

(76)

455

www.martinwerner.de

Beispiel: Fokale Operation

 Gauss‘sche Unschärfe

 Berechne Pixel als Mischung der 9 umgebenden Pixeln, z.B. mit Gewichtsmatrix

1 1 1 1 4 1 1 1 1

 An jeder Stelle wird der Pixel erzeugt, indem die Pixel aus dem Quellbild gelesen werden, mit der Matrix gewichtet werden und die Summe gebildet wird, die dann den Wert des Pixels ergibt.

Ein ICAML-Tutorial zu diesem Thema:

https://icaml.org/canon/data/images-videos/Python_Convolution/Python_Convolution.html

(77)

www.martinwerner.de

Zonale Operation

 Zonale Statistik wird oft verwendet, um Zusammenhänge über geographische Gebiete zu modellieren.

 z.B. Durchschnittstemperatur in einem Bundesstaat Zonen: Bundesstaaten

Raster: Temperatur

Ergebis: Raster, in dem die Durchschnittstemperatur der Zonen hinterlegt wird

 z.B. Durchschnittstemperatur über Wasser

(78)

457

www.martinwerner.de

Globale Operationen

Eine globale Operation ist beispielsweise das Euklidische Distanztool.

Für jede Zelle wird die Distanz zur nächsten Quelle berechnet.

Abb. aus http://desktop.arcgis.com/de/arcmap/10.3/tools/spatial-analyst- toolbox/understanding-euclidean-distance-analysis.htm

Quelle: Raster mit 1 Pixel pro Stadt Ergebnis: Distanzkarte

(79)

www.martinwerner.de

Beispiel: Morphologie-Operatoren

 Morphologie basiert auf Strukturelementen (SE), die zur lokalen Analyse eines Bildes verwendet werden

 Der Einfachheit halber betrachten wir zunächst nur Morphologie auf binären Bildern (schwarz und nicht-schwarz)

 Ein Strukturelement ist dabei ein zusammehängender, in der Regel kleiner Graph / kleines Bild-Element, z.B.

(80)

459

www.martinwerner.de

Grundoperatoren der Morphologie

Erosion: Ein Pixel des Resultats wird gesetzt, wenn das SE

vollständig in das Bild passt (also die gesetzten Pixel Teilmenge der im Bild gesetzten Pixel ist)

= { ∶ ⊆ }

A

oder

A) Jeder Pixel, für den alle Nachbarpixel gesetzt sind

B) Jeder Pixel, für den die Pixel links, rechts, drüber, und drunter gesetzt sind C) Jeder Pixel, der Teil einer diagonalen Linie ist

B C

(81)

www.martinwerner.de

Grundoperatoren der Morphologie

Dilatation: Ein Pixel des Resultats wird gesetzt, wenn das SE einen nichtleern Schnitt mit den gesetzen Pixeln des Bildes hat

= { ∶ ∩ ≠ ∅}

oder

(82)

461

www.martinwerner.de

Eigenschaften von Erosion und Dilataion

Verschiebungsinvariant

Die Erosion (Dilatation) einer Verschiebung ist die Verschiebung der Erosion (Dilatation)

Nicht Idempotent E*E != E / D*D != D

Monoton

Gilt I<J für die Bilder, so gilt E(I) < E(J) und D(I) < D(J)

Dual

Die Negierung der Erosion der Negierung ist die Dilatation und umgekehrt.

(83)

www.martinwerner.de

Kapitel 5

Deep Learning in der Geoinformatik

(84)

463

www.martinwerner.de

Outline

 A Short History of Deep Learning

 Deep Learning Elements

 Neurons

 Neural Networks

 Back Propagation and Gradient Descent

 Some Basic Deep Learning Architectures

 Dealing with Point Clouds

 And now? How would I?

(85)

www.martinwerner.de

Kapitel 5.1

A Short History of Deep Learning

(86)

465

www.martinwerner.de

History of Deep Learning

https://pbs.twimg.com/media/DuE4LnRWs AEpHjQ.jpg:large

(87)

www.martinwerner.de

History of Deep Learning

Nothing of this is really new. It is an old and established discipline.

The current hype comes from several factors

Advances in computational performances (GPUs, TPUs)

Creation of Huge Datasets

(Smaller) Advances in Stochastic Gradient Decent

Novel Ideas about Regularization

Novel Ideas for Capacity (Weight) Reduction

Convolutional Neural Networks

But, Deep Learning is not very powerful per se:

(88)

467

www.martinwerner.de

Kapitel 5.2

Deep Learning Elements

(89)

www.martinwerner.de

Kapitel 5.2.1

Neurons and Neural Networks

(90)

469

www.martinwerner.de

Biology-Inspired but simplified

S

Input 1 Input N

w1 wN

Activation

(91)

www.martinwerner.de

Linear Neuron

The simplest Neuron is a linear one.

This means

Activation Function is linear

A bias term is added

Then, we can write the output as +

..

For simplicity, the bias is often made an

S

Activation

(92)

471

www.martinwerner.de

Let us learn something

Lets assume two inputs to the neuron and f(x)=y the activation function.

Question: What can we represent in this way:

Answer: Lets calculate a bit (with explicit bias)

+ = + +

Now, for binary classification, we need a simple decision rule. What about (output > 0)

Then, we can learn sets that have the structure

+ = + + ≥ 0

This is easily seen to be a split along a line in space. Lets do this

(93)

www.martinwerner.de

This is a typical linear neuron decision

(94)

473

www.martinwerner.de

However, XOR is impossible to represent with a single neuron

0 1

0 1

There is no line that separates the two colors!

(95)

www.martinwerner.de

Solution: Add multiple layers (MLP)

x y

a b

o

This architecture has a bias term for all hidden nodes (a) and the output node which is hidden.

That is, there are nine weights!

Each of the early neurons decides a) Above the line

b) Below the line

1 a

B

(96)

475

www.martinwerner.de

The first scientific! AI winter

(the term AI winter is used for periods of cut funding as well)

Now, for a long time, no real progress was made. People got frustrated, left the field. The frustration points were:

Finding optimal weights is NP-complete – exponential runtime

While solving XOR is possible with a MLP, it is impossible to train, because the expected output of the inner connections is unknown.

Many people turned away from this part of machine learning

Dates are difficult to assign as related machine learning techinques are still evolving:

Starts about the time that the implications of the unsolvability of XOR for general intelligence become clear

Challenge Problem has been identified: train MLP

Ends about the time where multilayer perceptrons are successfully trained

Challenge Problem has been fully solved without avoiding it.

(97)

www.martinwerner.de

The solution to the MLP problem

(98)

477

www.martinwerner.de

Back Propagation

Where do the weights come from?

Finding the optimal weights is NP-complete (that is, as hard as the TSP;

Blum and Rivest, 1992)

Fortunately, we can find a sufficient set of weights through back propagation (e.g., Rumelhart et al. (1985))

First, we compare the output of a forward pass with the expected value.

Then, we slightly adjust each of the weights backwards in the network by a very small amount.

We do this over and over again (training)

We do so, because the error function we chose is differentiable and

sufficiently smooth such that the local direction of error reduction is sensible globally (which need not be the case)

(99)

www.martinwerner.de

Backpropagation Details

Forward Pass

All units within a layer have their values set in parallel

Next layer only after first layer has completely been computed

Layer Function needs to

Have bounded derivative only

However, linear aggregation of the input before applying one non-linear function simplifies learning procedure

Total Error Function

(100)

479

www.martinwerner.de

Backpropagation Rules (*)

Let us fix a single case c. Then

=

Now, let denote the activity of a unit in the forward pass. Then use the chain rule

=

Now, with an activity function of = we can calculate and substitude the second factor:

== 1 −

This means, we know how the total input of node changes the total error for this case. But as the total input is a linear sum of the inputs, we can compute

(101)

www.martinwerner.de

Backpropagation Rules (*)

= =

And analogously, we can calculate derivatives for y

= = ⋅ w

Now, we have seen how to calculate for any unit in the penultimate layer when given information from the last layer

This can be iterated backwards such that the derivatives become known

(102)

481

www.martinwerner.de

Fully Explained

 It is a very good idea to spell out this for the XOR problem. You can follow the following article (using different names than here)

 https://medium.com/@14prakash/back-propagation-is-very- simple-who-made-it-complicated-97b794c97e5c

 One way of thinking about back-propagation is that it is a major factorization of the derivative into things that we can calculate as numbers!

= ⋅ ⋅

https://medium.com/@14prakash/back-propagation-is-very-simple-who-made-it- complicated-97b794c97e5c

(103)

www.martinwerner.de

Now allows many architectures

Classical Networks

Input, a few hidden layers, an output

Difficulty: expressivity (number of layers) vs. trainability (number of parameters)

Convolutional Neural Networks and Pooling

Input an image, Layers are now calculating some local convolution of the image and dimensionality is reduced by pooling, that is taking only a subset of the data points.

Less Weights (only once for the convolution kernel which is swiped over the image, not for every pixel)

Recurrent Networks

(104)

483

www.martinwerner.de

Second (scientific) AI Winter

Now, Backpropagation can train deep networks and, therefore, XOR,but

Not enough processing power (no GPUs, for example)

Lack of Datasets (big and annotated datasets, because in real-world scenarios you would need those)

Overfitting (mainly, because you need to choose a sufficiently expressive architecture but don‘t have enough data to train)

Vanishing Gradient Problem

During learning, you multiply a lot of very small numbers which eventually get too small for sensible learning on finite accuracy machines

People turned away, because practical examples of deep networks were not brought to significant success, especially as other techniques became very powerful including support vector machines

(105)

www.martinwerner.de

Breakthroughs

 Training tricks

 ImageNet Dataset (2009, 16 million annotated images)

 Visibility through ILSVRC (1 million images, 1,000 classes) 2013: AlexNet trained on ImageNet using two GPUs

 Dropout

 Rectified Linear Units (ReLU) instead of sigmoid or tanh activations

(106)

485

www.martinwerner.de

In computer vision

CNNs:

Use a focal operation (Filter each pixel with a set of shared matrices) and sample taking

maximum or average value in filter block

Results:

 Errors drop significantly year by year

 Architectures get deeper and deeper

 Trainable with tricks

 Some results from the golden years of CNNs follow

(107)

www.martinwerner.de

CNN: Übersicht…

(108)

487

www.martinwerner.de

ILSVC over the early years

Slide from a taken from the Internet…

(109)

www.martinwerner.de

2015

 In 2015, Microsoft Research Asia won with a 150 layer network

 Almost superhuman performance (3.5 % error, later even improved)

 GoogLeNet 2014 had 22 layers

 Is the next AI winter just around the corner?

 We have been successful in image regognition, speech, and translation.

 But we rely on excessive datasets that we cannot generate in

(110)

489

www.martinwerner.de

Kapitel 5.3

Some Basic Deep Learning Architectures

(111)

www.martinwerner.de

Architectures

Perceptron (P)

(112)

491

www.martinwerner.de

Architectures

Feed Forward (FF)

(113)

www.martinwerner.de

Architectures

Deep Feed Forward (DFF)

(114)

Architectures

Recurrent Neural Network (RNN)

Long / Short Term Memory (LSTM)

Gated Recurrent Unit (GRU)

(115)

www.martinwerner.de

Architectures

Auto Encoder (AE)

(116)

495

www.martinwerner.de

Architectures

Deep Convolutional Network (DCN)

(117)

www.martinwerner.de

Architectures

Deconvolutional Network (DN)

(118)

497

www.martinwerner.de

Architectures

Deep Residual Network (DRN)

(119)

www.martinwerner.de

Exkurs 5.4

Deep Learning with Point Clouds

(120)

499

www.martinwerner.de

A first Success Story: PointNet

(121)

www.martinwerner.de

Why?

(122)

501

www.martinwerner.de

Classical Point Cloud Treatment

Extract hand-crafted features (e.g., structure tensor + friends)

 Should be invariant for certain transformations

 Can be global or local

 Usually need a context definition (for pure 3D points)

 Including Deep Feed-Forward Architectures!

Volumetric CNNs

 Step towards a voxelgrid and use (learned) 3D convolutions

Multiview CNNs

 Render several perspective views of the point clouds and feed them to a CNN

 Limited to aspects represented by 2D aspects (e.g., classification, but not completion)

(123)

www.martinwerner.de

Central challenge

 Point Clouds are Unordered Collections of Points

 and there is no sensible ordering function Model Functionalities Needed

 Classification outputs a score for each candidate class

 For Scene Understanding / Segmentation, the model outputs scores for each point and each candidate class

(124)

503

www.martinwerner.de

A first glance at the architecture

(125)

www.martinwerner.de

PointNet Architecture

 Based on three main properties, assertions and their consequences

The order of the points shall not matter

Nearby things shall be able to interact with each other

 The system should become invariant under rigid transformation including rotation, translation, and flip

(126)

505

www.martinwerner.de

Treating the Order of Points

 To make a model invariant under the order of input points can be done basically in three ways:

Sort input into a canonical order,

 However, no order exists that preserves data locality completely

Treat the input as a sequence and train with all permutations of the input

 However, it has been shown that order matters still.

 Excessive training times (There are n! permutations)

 Use a simple, symmetric function to aggregate information from each point

 Okay, lets go for it…

(127)

www.martinwerner.de

The symmetric function

It would be easy to use addition or multiplication as they are perfectly commutative. But more flexibility is needed and a trainable (learnable) function is preferred.

Therefore, f is a function mapping the point cloud to a single real number

(128)

507

www.martinwerner.de

Local and Global Information Treatment

For now, we just transformed the whole point cloud into a single feature vector

We can now just train any machine learning system like a SVM or a MLP on this very result

However, this can only rely on global information

But, we will need a combination of local and global information

This is done in the Segmentation Network

(129)

www.martinwerner.de

The Segmentation Network

 It concatenates 64 per point features with 1024 global features for a matrix of nx1088 of features

(130)

509

www.martinwerner.de

Invariance w.r.t. rigid transformations

 The remaining piece is how to achieve invariance under rotation, translation etc.

 Idea: Predict an affine transformation matrix (T-Net) and apply this transformation to the input points

 These mini-networks have the same structure as the global

network: point independent feature extraction, max pooling, and fully connected layers

 This can as well be applied again to the feature space.

 But beware, it is a large matrix and difficult to optimize

 Therefore, a constraint makes it almost orthogonal by adding to the loss

(131)

www.martinwerner.de

Why PointNet? Because it looks nice and works in practice

(132)

511

www.martinwerner.de

Yes, it works…

(133)

www.martinwerner.de

… but it is also theoretically sound!

(134)

513

www.martinwerner.de

Exkurs 5.4.1

Extensions for PointNet++

(135)

www.martinwerner.de

Extension towards real-world problems

 PointNet uses a single Max-Pooling layer, which means that all features are single-scale

 Point Clouds have varying sampling density, especially with fixed sensors

 PointNet++ is based on a hierarchical grouping analyzing larger and larger extracts of the point cloud

 Implemented as Compression: At each and every step, a point set is abstracted to a point set with fewer points

(136)

515

www.martinwerner.de

Only the ideas

Sampling Layer

Iterative Farthest Point Sampling (FPS)

Iteratively add the farthest point from the input to the current set

Grouping Layer

 Assign some neighboring points using a

 ball query

 Pro: same scale, Con: different number of elements

 kNN

 Pro: same number of elements, Con: different scale

 Ball query preferred as PointNet can deal with varying inputs

Many additional tricks

 See https://arxiv.org/pdf/1706.02413.pdf

(137)

www.martinwerner.de

Kapitel 5.4.2

Wie macht man das wirklich („hands-on“)

(138)

517

www.martinwerner.de

Lets go for it

Run a computer / container with tensorflow

I am runnning NVIDIA‘s optimized tensorflow container (need an account at NVIDIA container registry)

Optimized by NVIDIA for DGX-1 Familiy

On 8 interconnected V100 GPUs (256 GB total memory)

Trains about 2 hours to 88.8 % accuracy on point cloud classification for ModelNet 40 dataset

Inside the container (or in the Dockerfile)

apt-get install libhdf5-dev (for HDF5 file support)

pip install h5py

git clone https://github.com/charlesq34/pointnet

python train.py

Automatically downloads dataset

Runs a few epoochs and outputs results

(139)

www.martinwerner.de

Hands-On

root@ede2a32eccac:/workspace/pointnet# python train.py --2019-01-17 06:41:18--

https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_

2048.zip

Resolving shapenet.cs.stanford.edu (shapenet.cs.stanford.edu)...

171.67.77.19

Connecting to shapenet.cs.stanford.edu

(shapenet.cs.stanford.edu)|171.67.77.19|:443... connected.

HTTP request sent, awaiting response... 200 OK

(140)

519

www.martinwerner.de

Results look like

[…]

eval mean loss: 0.549058 eval accuracy: 0.886769

eval avg class acc: 0.860618

**** EPOCH 249 ****

[…]

----1---

eval mean loss: 0.546670 eval accuracy: 0.888393

eval avg class acc: 0.858817

(after less than two hours including data download on a NVIDIA V100 GPU, e.g., DGX-1)

(141)

www.martinwerner.de

Per-class performance and visualization of errors

$> pip install scipy

$> pip install image # for PIL

$> pip install matplotlib # for visualizations

$> python evaluate.py –visu

This now creates output of erroneous classifications in the dump folder and gives per class performance results. Looks like

airplane: 1.000 bathtub: 0.860 bed: 0.980 bench: 0.700 bookshelf: 0.900

(142)

521

www.martinwerner.de

Some Results

(143)
(144)
(145)
(146)
(147)
(148)
(149)
(150)
(151)
(152)
(153)
(154)
(155)
(156)

535

www.martinwerner.de

The END for NOW

Referenzen

ÄHNLICHE DOKUMENTE