Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 5. Dezember 2013.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Klassen - Verkettete Liste -
Filterung der räumlichen Frequenzen
Informatik II – Kapitel 11
261 Beispiel: Schleifenparallelisierung for (i = 0; i high) { printf (Exiting during iteration %d\n,i); break;
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Intelligente Dateisysteme Einführende Bemerkungen Manfred Thaller, Universität zu Köln Köln 17. Oktober 2013.
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde I: Bildverarbeitung I Köln 19. November 2009.
Dr. Monique Jucquois-Delpierre
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Die Diskrete-Cosinus-Transformation: Parametrisierung von Signalen in der Zeit und in der Frequenz Jonathan Harrington.
SWITCH - Anweisung.
Kompressionsverfahren für Texte
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
I/O Metaphern Präliminarien Manfred Thaller, Universität zu Köln Köln 21. Oktober 2008.
Spektralanalyse Spektralanalyse ist derart wichtig in allen Naturwissenschaften, dass man deren Bedeutung nicht überbewerten kann! Mit der Spektralanalyse.
Zusammenfassung Vorwoche
Modulare Programmierung
Medien- Technik Datei-Formate: TIFF Tagged Image File Format.tif.tiff.
Dateiformate .jpeg Verlustbehaftete Kompression.
Medien- Technik Dateiformate.jpeg Verlustbehaftete Kompression.
Bildverarbeitungsalgorithmen Gesamtwiederholung Manfred Thaller, Universität zu Köln Köln 29. Januar 2008.
Rekursive Funktionen (Fakultät)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Basisinformationstechnologie I
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Algorithmen und Datenstrukturen Übungsmodul 11
Algorithmen und Datenstrukturen Übungsmodul 3
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Starten der Entwicklungsumgebung (IDE)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Personal Fabrication Drahtgebundene Kommunikation
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde IV: Bildverarbeitung IV Köln 15. Januar 2015.
Kompressionsverfahren
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde I: Bildverarbeitung I Köln 6. November 2014.
Source Word- filter Line- filter Page- filter sink.
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 8. Januar 2015.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 2. Dezember.
Wichtige Transformationen
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Ein Referat von Robert Becker
ROBERT NYSTROM GAME PROGRAMMING PATTERNS III.8 Thema: Sequencing Patterns Seminar: Softwaretechnologie II (Teil 2) Dozent: Prof. Dr. Manfred Thaller Referent:
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde I: Bildverarbeitung I Köln 15. November 2012.
Image compression Seminar : Bildverarbeitung und Computer Vision
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Java Programme nur ein bisschen objektorientiert.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
JPEG Kodierung Farbraum- wechsel Chroma- Subsampling DCTQuantisierung Beispie l 8x8 Pixel Segment ZigZag Huffmann.
Digitale Bilder IT-Zertifikat der Phil.-Fak.: Advanced IT Basics
Datentypen: integer, char, string, boolean
Aufgaben zu Rückgabewerten
Cäsar-Verschlüsselung
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Grundkurs Informatik mit Java
Cäsar-Verschlüsselung
Arrays of Objects, a 3 part process
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 5. Dezember 2013

Nachbarschaftstransformationen Basisvorgehen: for (int y=1;y<result.height()-1;y++) { baseline=image.scanLine(y); for (int x=1;x<result.width()-1;x++) *(result.scanLine(y) + x) = TIneighbour8(image,x,type,baseline); }

Nachbarschaftstransformationen Beispiel für eine Nachbarschaftstransformation: static int Xoffset[] = { -1, 0, 1, -1, 0, 1, -1, 0, 1}; static int Yoffset[] = { -1, -1, -1, 0, 0, 0, 1, 1, 1}; width=image.width(); switch(action) { case TINMinimum: result=255; for (int i=0;i < 9; i++) { candidate = *(baseline + (width*Yoffset[i]) + x + Xoffset[i]); if (candidate < result) result=candidate; } break;

Nachbarschaftstransformationen Hervorheben von Intensitätsänderungen – X Differenz for (int y=0;y<result.height();y++) for (int x=1;x<result.width();x++) { collect = *(image.scanLine(y) + x) – *(image.scanLine(y) + x-1); *(result.scanLine(y) + x) = (collect<0) ? collect * -1 : collect; }

Nachbarschaftstransformationen NB: Partielle Transformationen können in Bilder „eingeschrieben“ werden – Übergangsbetonung durch Einrechnen XY Differenz: step1=TIcontrastS(TIXYdifference(image)); for (int y=0;y<result.height();y++) for (int x=0;x<result.width();x++) *(result.scanLine(y) + x) = (*(step1.scanLine(y) + x) >= 128) ? 0 : *(image.scanLine(y) + x);

Filteroperationen : Nachbarschaften Auf der operativen – nicht mathematischen – Ebene können Filter als multiplikative Nachbarschaftstransformationen verstanden werden.

Filteroperationen : Nachbarschaften Filteranwendung 1 / 2: static int filter[4][9]= { 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0 = low pass 1 */ 0, 1, 0, 1, 1, 1, 0, 1, 0, /* 1 = low pass 2 */ 0,-1, 0,-1, 5,-1, 0,-1, 0, /* 2 = high pass 1 */ -1,-1,-1,-1, 9,-1,-1,-1,-1 /* 3 = high pass 2 */ }; static int divisor[4] = {9,5,1,1}; unsigned char *baseline; for (int y=1;y<result.height()-1;y++) { baseline=image.scanLine(y); for (int x=1;x<result.width()-1;x++) *(result.scanLine(y) + x) = TIfilter8(image,x,filter[type],divisor[type],baseline);

Filteroperationen : Nachbarschaften Wobei gilt (Filteranwendung 2 / 2): int Xoffset[] = { -1, 0, 1, -1, 0, 1, -1, 0, 1}; int Yoffset[] = { -1, -1, -1, 0, 0, 0, 1, 1, 1}; width=image.width(); collect=0; for (int i=0;i < 9; i++) collect += *(baseline + (width*Yoffset[i]) + x + Xoffset[i]) *filter[i]; result = collect / divisor;

Filter: Dementsprechend, die wichtigsten Filter: static int filter[15][9]= { 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0 = low pass 1 */ 0, 1, 0, 1, 1, 1, 0, 1, 0, /* 1 = low pass 2 */ 0,-1, 0,-1, 5,-1, 0,-1, 0, /* 2 = high pass 1 */ -1,-1,-1,-1, 9,-1,-1,-1,-1, /* 3 = high pass 2 */ 1, 2, 1, 2, 4, 2, 1, 2, 1, /* 4 = W.Mean 1 */ 0, 1, 0, 1, 2, 1, 0, 1, 0, /* 5 = W.Mean 2 */ 0, 1, 0, 1,-4, 1, 0, 1, 0, /* 6 = Laplace 1 */ -1,-1,-1,-1, 8,-1,-1,-1,-1, /* 7 = Laplace 2 */ 0,-1, 0,-1, 7,-1, 0,-1, 0, /* 8 = Laplace 3 */ -1,-1,-1, 0, 0, 0, 1, 1, 1, /* 9 = Prewitt A */ -1, 0, 0, 0, 0, 0, 0, 0, 1, /* 10 = Roberts A */ -1,-2,-1, 0, 0, 0, 1, 2, 1, /* 11 = Sobel A */ 1, 0,-1, 1, 0,-1, 1, 0,-1, /* 12 = Prewitt B */ 0, 0,-1, 0, 0, 0, 1, 0, 0, /* 13 = Roberts B */ -1, 0, 1,-2, 0, 2,-1, 0, 1 /* 14 = Sobel B */ }; static int divisor[15] = {9,5,1,1,16,6,1,1,3,1,1,1,1,1,1}; static int absolute[15] = {0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1};

Transformationen des Fourier Typs Prinzip: Die Zuordnung von Helligkeitswerten zu Punkten wird durch eine andere geometrisch / mathematische Interpretation derselben numerischen Werte ersetzt. Fourier: Die räumliche Verteilung von Helligkeitswerten kann durch eine Bündelung von Frequenzwerten ersetzt werden.

Transformationen des Fourier Typs Beispielsweise ist leicht nachvollziehbar, dass im Bild jede Zeile des Bildes auch als eine „Schwingung“ verstanden werden kann, deren „hohe“ Amplitude besonders „hell“, deren „niedrige“ besonders „dunkel“ ist.

Transformationen des Fourier Typs Wenn dies so ist, kann dieses Bild offensichtlich durch Angabe der Schwingungsdauer und der Amplitude dargestellt werden. Wird dies weitergedacht, kann man konzeptuell jeden Punkt eines Punktes dadurch beschreiben, dass man behauptet, das Bild von n x m Pixeln stelle n x m Schwingungen dar, von denen jede an genau einem der Pixel jene Ausprägung der Amplitude habe, die dem Helligkeitswert dieses Pixels entspräche.

Transformationen des Fourier Typs Fouriertransformationen sind relativ anspruchsvoll effektiv zu optimieren; werden deshalb NICHT im Quellcode besprochen. Sie sind aber EXTREM wichtig. Wichtig ist, folgende Eigenschaften festzuhalten:

Transformationen des Fourier Typs (1) Fouriertransformationen sind voll umkehrbar:

Transformationen des Fourier Typs (2) Transformierte Bilder können zielgerichtet bearbeitet werden:

Transformationen des Fourier Typs (2) Transformierte Bilder bestehen üblicherweise aus überwiegend sehr viel kleineren Zahlenwerten:

II. Bildspeicherung und Kompression Techniken zum Transfer von Bytestreams aus der linearen Form (Platte) in strukturierte Form (Memory).

Binäres Lesen (Qt flavour) imageFile.seek(ifd_addr); imageFile.read((char *)buffer,n); „Schreiben“ imageFile.write((char *)buffer,n); „Position merken“ ifdstart = imageFile.pos();

Komprimieren Run Length Encoding while(line > 0) { c = *(source)++; if (c < 0) { count = c * -1 + 1; memset(target, *source, count); source++; } else { count = c + 1; memcpy(target, source, count); source += count; line -= count; target += count;

Komprimieren CCITT / Huffmann Encoding (bitonal) 1 / 3 while(gotten<header->width) { if ((runlength=TIfetchrun(&ccitt,buffer,0,&err))<0) goto cleanup; memset(target,usecolor[0],runlength); target+=runlength; gotten+=runlength; if (gotten>=header->width) break; if ((runlength=TIfetchrun(&ccitt,buffer,1,&err))<0) goto cleanup; memset(target,usecolor[1],runlength); }

Komprimieren CCITT / Huffmann Encoding (bitonal) 2 / 3

Komprimieren CCITT / Huffmann Encoding (bitonal) 3 / 3

Komprimieren Lempel-Ziv & Welch (LZW) 1 / 2 InitializeStringTable(); WriteCode(ClearCode); W = the empty string; for each character in the strip { K = GetNextCharacter(); if W+K is in the string table { W = W+K; /* string concatenation */ } else { WriteCode (CodeFromString(W)); AddTableEntry(W+K); W = K; } WriteCode (EndOfInformation);

Komprimieren Lempel-Ziv & Welch (LZW) 2 / 2 static int shifts[4][8] = { 7, 6, 5, 4, 3, 2, 1, 0, 14, 13, 12, 11, 10, 9, 8, 7, 13, 12, 11, 10, 9, 8, 7, 6, 12, 11, 10, 9, 8, 7, 6, 5 }; int raw, use; use = lzw->lzwbits >> 3; if (use >=max) return TiffLZWEOI; raw = (raster[use] << 8) + (raster[use + 1]); if (lzw->lzwcs>9) raw= (raw<<8) + (raster[use + 2]); raw >>= shifts[lzw->lzwcs-9][lzw->lzwbits % 8]; lzw->lzwbits += lzw->lzwcs; return (raw&lzw->lzwmask);

Komprimieren JPEG Sechs Schritte zum s/w JPEG Image In Blöcke gruppieren; Zentrieren um Null. DCT jedes Blocks. Elimieren einiger Werte durch "quantization". 8 x 8 Blöcke  lineare Sequenz, per Entropy Encoding. Run length encoding. Huffman encoding. Vor diesen Schritten im 24 Bit Fall: Transformation RGB  YCbCr.

Danke für heute!