Softwaretechnologie für Fortgeschrittene Teil Thaller Stunde IV: Bildverarbeitung IV Köln 15....

Post on 06-Apr-2015

110 views 0 download

transcript

Softwaretechnologie für FortgeschritteneTeil Thaller

Stunde IV: Bildverarbeitung IV

Köln 15. Januar 2015

Transformationen des Fourier Typs

2

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

3

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

4

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

5

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

6

(1) Fouriertransformationen sind voll umkehrbar:

Transformationen des Fourier Typs

7

(2) Transformierte Bilder können zielgerichtet bearbeitet werden:

Transformationen des Fourier Typs

8

(2) Transformierte Bilder bestehen üblicherweise aus überwiegend sehr viel kleineren Zahlenwerten:

II. Bildspeicherung und Kompression

9

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

Binäres Lesen (Qt flavour)

10

„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();

Bildformate: TIFF

11

Bildformate: TIFF

12

Bildformate: TIFF

13

Komprimieren

14

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

15

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); target+=runlength; gotten+=runlength; }

Komprimieren

16

CCITT / Huffmann Encoding (bitonal) 2 / 3

Komprimieren

17

CCITT / Huffmann Encoding (bitonal) 3 / 3

Komprimieren

18

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

19

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

20

JPEG

Sechs Schritte zum s/w JPEG Image1.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!

21