Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Xaver Schlake Geändert vor über 10 Jahren
1
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde I: Bildverarbeitung I Köln 19. November 2009
2
I. Rekapitulation 2
3
Abstrakte Überlegungen zum Wesen der Information. Darstellung von Information in geeigneten Strukturen auf (digitalen) Rechnern. Entwicklung von Algorithmen, die auf diesen Strukturen operieren. Einbettung in eine Methodologie, die die Konstruktion von Programmen aus geeigneten Strukturen und Algorithmen ermöglicht. 3 Gegenstand
4
1."Selbstabbildende Information". Es kann "gerechnet" werden. Bilder. 2."Kodierte Information". Zeichenketten und Teilketten können verglichen werden. Texte. 3."Symbolische Information". Terme können verglichen werden. Terminologien, "Ontologien" u.ä. Arten von Information 4
5
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger 5
6
Soundex 1Das erste Zeichen jedes Namens wird beibehalten. 2W und H werden ignoriert. 3 A, E, I, O, U und Y ergeben keinen Codewert, gelten jedoch als "Trenner" (s.Regel 5). 4Die anderen Zeichen werden nach folgenden Regeln umgewandelt. 4.1 B, P, F, V ==>1 4.2 C, G, J, K, Q, S, X, Z ==>2 4.3 D, T ==>3 4.4 L ==>4 4.5 M, N ==>5 4.6 R ==>6 5 Ergeben zwei aufeinanderfolgende Zeichen denselben Code, wird er nur einmal gewertet. Sind sie durch einen "Trenner" (s. oben Regel 3) getrennt, wird er jedoch wiederholt. 6
7
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger 7
8
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger TRegel 1 8
9
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger TxTxRegel 2 9
10
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T xRegel 3 10
11
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T 2Regel 4.2 11
12
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T 2xRegel 5 12
13
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T 2 xRegel 3 13
14
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T 2 5Regel 4.5 14
15
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger Tegenberger Tekekenperger T 2 51Regel 4.1 15
16
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger 16
17
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger TRegel 1 17
18
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger TxTxRegel 2 18
19
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger T 2Regel 4.2 19
20
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger T 2xRegel 3 20
21
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger Tekekenperger T 2 5Regel 4.5 21
22
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger T251 Tekekenperger T 2 51Regel 4.1 22
23
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger T251 Tekekenperger T 2 2Regeln 4.2 / 5 / 3 23
24
Soundex Problem: Welche der drei folgenden Namen sind gleich? Theckenperger T251 Tegenberger T251 Tekekenperger T225 * 24
25
1."Selbstabbildende Information". Es kann "gerechnet" werden. Bilder. 2."Kodierte Information". Zeichenketten und Teilketten können verglichen werden. Texte. 3."Symbolische Information". Terme können verglichen werden. Terminologien, "Ontologien" u.ä. Arten von Information 25
26
Towers of Hanoi Situation in einem Tempel in Hanoi: Ein Turm von 100 Scheiben auf einer Spindel (S1). Eine leere Spindel (S2). Eine weitere leere Spindel (S3). Transportiere S1 so nach S2 - wobei S3 als Zwischenlager verwendet werden darf - dass: Jeweils nur die oberste Scheibe von einem Turm genommen wird. Niemals eine größere Scheibe auf einer kleineren liegt. Prophezeiung: Ist das erledigt, ist das Ende der Welt gekommen. 26
27
Towers of Hanoi S1 S2 S3 27
28
Towers of Hanoi S1 S2 S3 28
29
Towers of Hanoi S1 S2 S3 29
30
Towers of Hanoi S1 S2 S3 30
31
Towers of Hanoi S1 S2 S3 31
32
Towers of Hanoi S1 S2 S3 32
33
Towers of Hanoi S1 S2 S3 33
34
Towers of Hanoi S1 S2 S3 34
35
Towers of Hanoi Lösung I 1.Finde jemand, der die obersten 99 Scheiben von S1 nach S3 transportiert. 2.Transportiere die unterste Scheibe von S1 nach S2. 3.Finde jemand, der die obersten 99 Scheiben von S3 nach S2 transportiert. 35
36
Towers of Hanoi Lösung II 1.Besteht der zu transportierende Turm aus mehr als einer Scheibe, finde jemand, der einen Turm von n-1 Scheiben von S1 nach S3 transportiert. Nutze S2 als Zwischenablage. 2.Transportiere selbst die unterste Scheibe von S1 nach S2. 3.Besteht der zu transportierende Turm aus mehr als einer Scheibe, finde jemand, der einen Turm von n-1 Scheiben von S3 nach S2 transportiert. Nutze S1 als Zwischenablage. 36
37
Towers of Hanoi Lösung III function transport( int n, stack spindel1, stack spindel2, stack spindel3) { if (n >1) transport(n-1,spindel1,spindel3,spindel2); schritt(spindel1,turm2); if (n>1) transport(n-1,spindel3,turm2,spindel1); } function schritt( stack spindel1, stack spindel2) { spindel2.push(spindel1.pop()); } 37
38
Towers of Hanoi Fragen 1.Wie viele Mitarbeiter werden benötigt? n 2. Wieviele Transferschritte? 2 n -1 3. Wie lange? 2 100 -1 Schritte == ca. 10 30 1 Schritt == 1 Sekunde ==> ca. 10 30 Sekunden == ca. 4 * 10 22 Jahre * 38
39
1."Selbstabbildende Information". Es kann "gerechnet" werden. Bilder. 2."Kodierte Information". Zeichenketten und Teilketten können verglichen werden. Texte. 3."Symbolische Information". Terme können verglichen werden. Terminologien, "Ontologien" u.ä. Arten von Information 39
40
Minimal neighbour Original Ergebnis 40
41
Ersetze in jeder Zeile jedes Pixel durch den niedrigsten Pixelwert der dieses Pixels umschreibenden 3 x 3 Matrix. Minimal neighbour 41
42
Minimal neighbour 42
43
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 43
44
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 44
45
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 45
46
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 46
47
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 47
48
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 48
49
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 49
50
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50
51
Minimal neighbour 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 50 250 51
52
Minimal neighbour * 52
53
Abstrakte Überlegungen zum Wesen der Information. Darstellung von Information in geeigneten Strukturen auf (digitalen) Rechnern. Entwicklung von Algorithmen, die auf diesen Strukturen operieren. Einbettung in eine Methodologie, die die Konstruktion von Programmen aus geeigneten Strukturen und Algorithmen ermöglicht. 53 Gegenstand
54
II. Bildverarbeitung I 54
55
Bildverarbeitung 55 Bildverarbeitung hier ::= Bearbeitung von Bildern, die als strukturierter Bytestream im Memory geladen sind.
56
Basisalgorithmus Bildverarbeitung 56 Unter Annahme eines Bildes als: struct image { int zeilen; int spalten; unsigned char *bytes; } o; for (i=0;i<o.spalten;i++) for (j=0;j<o.zeilen;j++) transform(* (o.bytes + (j*spalten) + i) );
57
Ein Algorithmus ist eine Funktion f(D ein, D aus ), die Eingabedaten D ein in Ausgabedaten D aus schrittweise transformiert und dabei bestimmte Bedingungen erfüllt. Algorithmen: Definition 57
58
Basisalgorithmus Bildverarbeitung 58 Oder allgemeiner: struct image { int zeilen; int spalten; pixel *pixel; } o; for (i=0;i<o.spalten;i++) for (j=0;j<o.zeilen;j++) transform(* (o.pixel + (j*spalten) + i) );
59
Basisalgorithmus Bildverarbeitung 59 Eingebunden in den Kontext von Qt (i.e., QImage): Beispiel: Negation 8 Bit for (int y=0;y height();y++) for (int x=0;x width();x++) { oldVal = *(image->scanLine(y) + x); newVal=255-oldVal; *(image->scanLine(y) + x) = newVal; }
60
Basisalgorithmus Bildverarbeitung 60 Eingebunden in den Kontext von Qt (i.e., QImage): Beispiel: Negation 24 Bit for (int y=0;y height();y++) for (int x=0;x width();x++) { RGB=(QRgb *)image->scanLine(y) + x; oldRed = qRed(*RGB); newRed=255-oldRed; oldGreen = qGreen(*RGB); newGreen=255-oldGreen; oldBlue = qBlue(*RGB); newBlue=255-oldBlue; *RGB = qRgb(newRed,newGreen,newBlue); }
61
Basisalgorithmus Bildverarbeitung 61 Dabei gilt jedoch: for (int y=0;y<result.height();y++) { for (int x=0;x<result.width();x++) { *(result.scanLine(y) + x) = meineTransformation(*(image.scanLine(y)) ; } Etwa eine Größenordnung langsamer als:
62
Basisalgorithmus Bildverarbeitung 62 for (int y=0;y<result.height();y++) { newpixel=result.scanLine(y); oldpixel=image.scanLine(y); for (int x=0;x<result.width();x++) *(newpixel++) = meineTransformation(*(oldpixel++)); }
63
Basisalgorithmus Bildverarbeitung 63 Merke: Bildverarbeitung muss performant sein!
64
Basistransformationen 64 Negation: oldVal = *(image->scanLine(y) + x); newVal=255-oldVal; *(image->scanLine(y) + x) = newVal;
65
Basistransformationen 65 Horizontale Spiegelung: for (int y=0;y height();y++) for (int target=0,source=image->width()-1; target<limit;target++,source--) { pixel=*(image->scanLine(y) + source); *(image->scanLine(y) + source) = *(image->scanLine(y) + target); *(image->scanLine(y) + target) = pixel; }
66
Basistransformationen 66 Vertikale Spiegelung: for (int target=0,source=image->height()-1; target<limit;target++,source--) for (int x=0;x width();x++) { pixel=*(image->scanLine(source) + x); *(image->scanLine(source) + x) = *(image->scanLine(target) + x); *(image->scanLine(target) + x) = pixel; }
67
Basistransformationen 67 Farbbandextraktion (Qt spezifisch, lookup table): for (int y=0;y height();y++) for (int x=0;x width();x++) { RGBval=image->colorTable() [*(image->scanLine(y) + x)]; pixel=qRed(RGBval); *(result.scanLine(y) + x) = pixel; }
68
Basistransformationen 68 Quadrantenrotation: for (int oldy=0,newx=image->height()-1;oldy height(); oldy++,newx--) for (int oldx=0,newy=0;oldx width(); oldx++,newy++) *(result.scanLine(newy) + newx) = *(image->scanLine(oldy) + oldx);
69
Basistransformationen 69 Gradgenaue Rotation: for (int y=0;y height();y++) { h=image->height()-y; for (int x=0;x width();x++) { rho=sqrt((double)(x*x)+(double)(h*h)); theta=atan((double)h/(double)x)-usearc; newx=(int)rint(rho*cos(theta)+xmin); newy=ysize-((int)rint(rho*sin(theta)+ymin)); *(inter+(newy*xsize)+newx)= *(image->scanLine(y) + x); }
70
Basistransformationen 70 Nachgeschobene Interpolation zur Rotation: offset[0]= -1; offset[1]= 1; offset[2]= xsize*-1; offset[3]= xsize; for (int y=0;y<result.height();y++) { for (int x=0;x<result.width();x++,use++) { if (*use>=0) *(result.scanLine(y)+x) = *use; else if (*(use-1)<0 || *(use+1)<0) *(result.scanLine(y)+x) = 0; else { *(result.scanLine(y)+x) = *(use+offset[now]); if (++now==4) now=0; }
71
Danke für heute! 71
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.