Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bildverarbeitungsalgorithmen


hans-peter
20.01.2012, 21:03
Nur aus Neugier würde mich interessieren wie Bildverarbeitungsalgorithmen (z.B. die diversen Schärfungsalgorithmen, "lokaler Kontrast" usw) funktionieren, also welche Mathematik bzw. welche Verfahren dahinter sind.

Habt ihr Tipps wo ich das nachlesen kann, Bücher, Vorlesungsskripte oder im Web?

Gruß HP

fhaferkamp
20.01.2012, 22:02
Ich habe hier ein Buch von meinem Ex-Prof aus dem Studium gefunden, das man sich herunterladen kann: http://www.rob.cs.tu-bs.de/content/03-research/03-publications/download/buch_150dpi.pdf
Ist allerdings schon etwas älter und behandelt eher die theoretischen Grundlagen der digitalen Bildsignalverarbeitung.

esid
20.01.2012, 22:15
http://www.sonyuserforum.de/galerie/data/thumbnails/6/Unscharf_Maskieren.pdf (http://www.sonyuserforum.de/galerie/details.php?image_id=139575)

6/Unscharf_Maskieren.pdf
-> Bild in der Galerie (http://www.sonyuserforum.de/galerie/details.php?image_id=139575)

Einige diese "Berechnungen" gab es schon zu analogen Zeiten, daher auch der etwas merkwürdige Name "unscharf maskieren". Man kann sich das aber anhand der Grafik relativ gut klarmachen.

Die blaue Kurve zeigt einen Ausschnitt aus dem Originalbild. Man sieht einen Bildbereich mit einem Helligkeitsübergang von 70 zu 30.

Die rote Kurve ist eine "unscharfe", nivellierte Version des gleichen Ausschnittes. Der Helligkeitsübergang ist im Vergleich zu dem Original linear (flau) von 70 zu 30.

Die grüne Kurve ist das fertige Ergebnis nach dem Anwenden des Filters "Unscharf-Maskieren". Sie entsteht durch die Subtraktion bzw. Addition der roten und blauen Kurve (bzw. der Helligkeitswerte). In dunklen Bildbereich wird die Helligkeit der blauen Kurve um genau den Betrag der Differenz zur roten Kurve abgesenkt. Im hellen Bildbereich wird der Differenzbetrag von rot zu blau zu dem Blau dazuaddiert.

Das Ergebnis des Filters kann man so schön visualisieren und sieht, dass im Übergangsbereich von Hell zu Dunkel nach Anwendung des Filters eine im Vergleich zum Original künstliche Aufhellung bzw. Abdunklung stattfindet. Stichwort: Kontrastverstärkung, Halos.

Was zur Berechnung von Hell und Dunkel wie weit von den Algorithmen berücksichtigt werden soll, kann man mit Stärke, Radius und Schwellwert festlegen.

hans-peter
21.01.2012, 12:31
Ich habe hier ein Buch von meinem Ex-Prof aus dem Studium gefunden, das man sich herunterladen kann: http://www.rob.cs.tu-bs.de/content/03-research/03-publications/download/buch_150dpi.pdf
Ist allerdings schon etwas älter und behandelt eher die theoretischen Grundlagen der digitalen Bildsignalverarbeitung.

Danke, das ist ja schon mal was. Interessant, das auch "mein" Prof. Marko da Co-Author ist, merkt man auch an seinem Lieblingsthema Fouriertransformation :)

Da wird mir auch klar warum Programme wie Digikam (optionale) Abhängigkeiten zu heftigen mathem. Bilbliotheken wie Lapack hat.

Mich hätten allerdings eher weniger die Signalverarbeitungsseite interessiert, mehr Algorithmen wie sie esid kurz beschrieben hat. Also Schärfen, Kontrastmanipulationen, Vergrößern/Verkleinern, Weißabgleich usw.

HP

fhaferkamp
21.01.2012, 23:57
Zum Thema Schärfen könnte das folgende Buch vielleicht ganz interessant sein: http://www.amazon.com/gp/product/B002NQSMWW?ie=UTF8&tag=cambridgeinco-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=B002NQSMWW

Ich habe eine Empfehlung dazu auf folgender Seite gefunden: http://www.cambridgeincolour.com/tutorials/image-sharpening.htm

Es ist wohl nicht ganz einfach, die von Dir gesuchten Informationen frei im Netz zu finden. Spannend fände ich die genaue Funktionsweise aktueller Algorithmen dieser Art auch, aber das sind bestimmt eher gut gehütete Geheimnisse z. B. im Adobe-Entwicklungslabor.

alberich
22.01.2012, 00:01
http://www.imatest.com/docs/sharpening/

Blitz Blank
22.01.2012, 11:01
Es ist wohl nicht ganz einfach, die von Dir gesuchten Informationen frei im Netz zu finden. Spannend fände ich die genaue Funktionsweise aktueller Algorithmen dieser Art auch, aber das sind bestimmt eher gut gehütete Geheimnisse z. B. im Adobe-Entwicklungslabor.

Was Adobe angeht, sicher, aber wer Quelltext lesen kann sollte sich GIMP einmal ansehen, das ist Open Source und das gilt auch für die frei verfügbaren Filter.
Einige davon sind in Script-Fu (Scheme) geschrieben, einige in C.

Ein guter Startpunkt ist m.E. USM, zur Beschreibung der Arbeitsweise (natürlich neben vielen zur Anwendung) findet sich einiges im Netz.

Frank

fhaferkamp
22.01.2012, 11:25
Was Adobe angeht, sicher, aber wer Quelltext lesen kann sollte sich GIMP einmal ansehen, das ist Open Source und das gilt auch für die frei verfügbaren Filter.
Einige davon sind in Script-Fu (Scheme) geschrieben, einige in C.


Danke für den ergänzenden Tipp, daran hatte ich auch schon gedacht, aber ich weiß nicht, ob der TE das kann bzw. möchte. Zudem sind die Algorithmen dann meist auf Geschwindigkeit getrimmt und dementsprechend nicht gerade einfach im Quellcode zu verstehen. Hast Du Dir mal eine FFT (Fast Fourier Transformation) im Quellcode angesehen? Wenn man nicht weiß, was der Algorithmus grundsätzlich tut, dürfte das Verstehen eher schwierig werden.
Es geht für die meisten Leser hier bestimmt erst mal um die Unterschiede der verschiedenen Algorithmen: Welches Verfahren hat welche Eigenschaften und wofür ist welcher Algorithmus besser geeignet?

hans-peter
22.01.2012, 14:36
Quelltext anschauen kann ich, habe ich tatsächlich auch schon gemacht (digikam). Da sind aber die Algorithmen nicht beschrieben, und dann wirds sehr mühsam. Das ist kein guter Weg, es sei denn die Algorithmen sind explizit beschrieben.

HP

fhaferkamp
22.01.2012, 19:50
http://www.sonyuserforum.de/galerie/data/thumbnails/6/Unscharf_Maskieren.pdf (http://www.sonyuserforum.de/galerie/details.php?image_id=139575)

6/Unscharf_Maskieren.pdf
-> Bild in der Galerie (http://www.sonyuserforum.de/galerie/details.php?image_id=139575)

Einige diese "Berechnungen" gab es schon zu analogen Zeiten, daher auch der etwas merkwürdige Name "unscharf maskieren". Man kann sich das aber anhand der Grafik relativ gut klarmachen.

Die blaue Kurve zeigt einen Ausschnitt aus dem Originalbild. Man sieht einen Bildbereich mit einem Helligkeitsübergang von 70 zu 30.

Die rote Kurve ist eine "unscharfe", nivellierte Version des gleichen Ausschnittes. Der Helligkeitsübergang ist im Vergleich zu dem Original linear (flau) von 70 zu 30.

Die grüne Kurve ist das fertige Ergebnis nach dem Anwenden des Filters "Unscharf-Maskieren". Sie entsteht durch die Subtraktion bzw. Addition der roten und blauen Kurve (bzw. der Helligkeitswerte). In dunklen Bildbereich wird die Helligkeit der blauen Kurve um genau den Betrag der Differenz zur roten Kurve abgesenkt. Im hellen Bildbereich wird der Differenzbetrag von rot zu blau zu dem Blau dazuaddiert.

Das Ergebnis des Filters kann man so schön visualisieren und sieht, dass im Übergangsbereich von Hell zu Dunkel nach Anwendung des Filters eine im Vergleich zum Original künstliche Aufhellung bzw. Abdunklung stattfindet. Stichwort: Kontrastverstärkung, Halos.

Was zur Berechnung von Hell und Dunkel wie weit von den Algorithmen berücksichtigt werden soll, kann man mit Stärke, Radius und Schwellwert festlegen.

Ich habe Dein Bild zu diesem Beitrag gerade im Wiki gefunden, hier der Link dorthin: http://www.sonyuserforum.de/wiki/Bild:Unscharf-Maskieren.gif

Edit: Ich habe das Bild mal in die Galerie hochgeladen:
6/354px-Unscharf-Maskieren.gif
-> Bild in der Galerie (http://www.sonyuserforum.de/galerie/details.php?image_id=139704)

Neonsquare
22.01.2012, 20:23
@hans-peter
Ich kann diese Bibliothek zum anschauen sehr empfehlen:

https://github.com/slyrus/opticl

"opticl is designed to be a high-performance, but relatively lightweight, library for representing, processing, loading, and saving 2-dimensional pixel-based images."

Die Bibliothek ist in Common Lisp geschrieben, was zwar für viele Anfangs ungewohnt ist, sich am Ende aber als großer Vorteil erweist: Common Lisp ist sehr High-Level und eher funktional orientiert. Der Code ist also eher "mathematisch" - damit näher an den Textbüchern. Ebenso ist der Code auf die eigentliche Aufgabe konzentriert und enthält nicht Unmengen an Speicherverwaltungskrampf wie bei C oder C++. Last not least ist der Code recht überschaubar kurz - was eben vor allem an der Konzentration auf das Wesentliche und den High-Level Features von Common Lisp liegt.

z. B. beim Thema Schärfen:
Opticl hat die Funktion SHARPEN-IMAGE folgendermaßen definiert:

(defun sharpen-image (img)
(trim-image
(discrete-convolve img *sharpen-kernel*) 1 1))

"Schärfen" ist hier also eine diskrete Dekonvolution mit einer speziellen Matrix, dem "*sharpen-kernel*". Wie sieht diese Matrix aus?

(defparameter *sharpen-kernel*
(normalize-array #2A((-1 -4 -1)
(-4 26 -4)
(-1 -4 -1))
:element-type 'double-float))

Beim Konvolutionskernel handelt sich also um eine quadratische, symmetrische 3x3 Matrix. Interessant dazu auch der Gauss-Kernel:

(defparameter *gaussian-kernel*
(normalize-array #2A((1 2 1)
(2 4 2)
(1 2 1))
:element-type 'double-float))

Die Funktion DISCRETE-CONVOLVE ist erstmal etwas länger, weil sie einige Zweige enthält, die für bestimmte Bildtypen (8 Bit RGB, 16 bit RGB usw.) optimiert sind. Die hätte man eigentlich besser in eigene Funktionen aufgeteilt und per Inline optimiert. Der letzte Zweig enthält aber die generische Fassung des Algorithmus. Das sind dann ca. 20 Zeilen die den Algorithmus beschreiben wie jeder Pixel des Zielbildes berechnet wird Anhand der Bildmatrix und des Kernels.

Das schöne daran ist auch, dass man bei Common Lisp mit den Funktionen interaktiv auf der Kommandozeile arbeiten kann. So kann man mit Opticl einfach mal schnell ein Bild einlesen und dann direkt damit herumspielen.

Gruß,
Jochen