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

Slides:



Advertisements
Ähnliche Präsentationen
Informatik II – Kapitel 11
Advertisements

Java Beans von Raoul Schneider.
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
PNG Portable Network Graphics
der Universität Oldenburg
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.
Sequentielle Liste - Array
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.
FOR Anweisung.
Kompressionsverfahren für Texte
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
I/O Metaphern Präliminarien Manfred Thaller, Universität zu Köln Köln 21. Oktober 2008.
Schwierigkeitsgrad III 6 X - 7 = X
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
“But life is short and information endless...” Aldous Huxley
Gaußscher Algorithmus
Grafikkomprimierung Andreas Pretzsch.
Medien- Technik Datei-Formate: TIFF Tagged Image File Format.tif.tiff.
Dateiformate .jpeg Verlustbehaftete Kompression.
Medien- Technik Dateiformate.jpeg Verlustbehaftete Kompression.
Inhalt danach. inhalt danach inhalt danach inhalt danach inhalt danach inhalt danach.
Struktogramme IF-ELSE FOR – Schleife
Manfred Thaller, Universität zu Köln Köln 27. Januar 2009
Grundkonzepte Java - Klassendefinition
Einführung in die Programmierung
Die Zählschleife int s = 0 for (int k=1; k
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
Daniel Laxar, Felix Lucny, Markus Tonner
Algorithmen und Datenstrukturen Übungsmodul 11
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Arrays und ArrayLists In JAVA.
Multimedia: Bildbearbeitung
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Arrays und ArrayLists In JAVA.
ANIMATION II Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung SS 2013 Softwaretechnologie II (Teil II): Simulation und 3D.
Algorithmen und Datenstrukturen 1 SS 2002
JPEG Joint Photographic Experts Group Thomas Leinmüller
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde IV: Bildverarbeitung IV Köln 15. Januar 2015.
Die Welt der Shader Universität zu Köln WS 14/15 Softwaretechnologie II (Teil 1) Prof. Dr. Manfred Thaller Referent: Lukas Kley Fortgeschrittene Techniken.
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde I: Bildverarbeitung I Köln 6. November 2014.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 8. Januar 2015.
GTALK. Projektteam Kieslich Lindorfer Schöllhammer.
Einführung in die Informationsverarbeitung Teil Thaller Stunde II: Datenstrukturen Köln 25. Oktober 2012.
Ein Referat von Robert Becker
Lebensqualität von Patienten mit fortgeschrittenem Pankreaskarzinom unter Misteltherapie: Eine randomisierte kontrollierte Studie Dtsch Arztebl Int 2014;
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
Quellencodierung NTM, 2006/05, 9.3 Quellencodierung, Rur, 1 Referenzen [1]Proakis, Salehi, „Grundlagen der Kommunikationstechnik“, Pearson, [2]D.
Quellencodierung NTM, 2006/05, 9.3 Quellencodierung, Rur, 1 Referenzen [1]Proakis, Salehi, „Grundlagen der Kommunikationstechnik“, Pearson, [2]D.
EINFÜHRUNG IN DIE BILDVERARBEITUNG Grafiktypen Rastergrafiken (bitmaps) Vektorengrafiken.
JPEG Kodierung Farbraum- wechsel Chroma- Subsampling DCTQuantisierung Beispie l 8x8 Pixel Segment ZigZag Huffmann.
Mathias WienInstitute for Communications EngineeringAachen University of Technology für Nachrichtentechnik,
Einführung in die Informationsverarbeitung Teil Thaller Stunde II: Datenstrukturen Köln 27. Oktober 2011.
Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde III: Bildverarbeitung III Köln 5. Dezember 2013.
Ultrakurzeinführung OpenCV
Grundkurs Informatik mit Java
Arrays of Objects, a 3 part process
 Präsentation transkript:

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

Nachbarschaftstransformationen 2 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 3 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 4 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 5 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 6 Auf der operativen – nicht mathematischen – Ebene können Filter als multiplikative Nachbarschaftstransformationen verstanden werden.

Filteroperationen : Nachbarschaften 7 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 8 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: 9 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 10 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 11 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 12 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 13 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 14 (1) Fouriertransformationen sind voll umkehrbar:

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

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

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

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

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

Komprimieren 20 CCITT / Huffmann Encoding (bitonal) 1 / 3 while(gotten 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); target+=runlength; gotten+=runlength; }

Komprimieren 21 CCITT / Huffmann Encoding (bitonal) 2 / 3

Komprimieren 22 CCITT / Huffmann Encoding (bitonal) 3 / 3

Komprimieren 23 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 (CodeFromString(W)); WriteCode (EndOfInformation);

Komprimieren 24 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 25 JPEG Sechs Schritte zum s/w JPEG Image 1.In Blöcke gruppieren; Zentrieren um Null. 2.DCT jedes Blocks. 3.Elimieren einiger Werte durch "quantization". 4.8 x 8 Blöcke  lineare Sequenz, per Entropy Encoding. 5.Run length encoding. 6.Huffman encoding. Vor diesen Schritten im 24 Bit Fall: Transformation RGB  YCbCr.

Danke für heute! 26