mod.Convolve

v1.03 21.01.20 · mod.Convolve7Bit: v0.99 27.08.94


Convolve
Das Modul "Convolve"
Das CON-Dateiformat:
Dateiname: "con.name"
Keine Startadresse, stattdessen die Kennung
GOD8 ($47, $4F, $44, $38)
Name: Name in BCode (12 Bytes)
Dimension: Breite und Höhe: 3×3 (2 Bytes)
Matrix: 9 Werte zwischen -128 und +127 (9 Bytes)
Skalar: 1 Wert als Wort (2 Bytes)
Shift: Versatzwert 0..15 (1 Byte)
Threshold: Schwellwert 0..15 (1 Byte)
Mix: Mischfaktor 0..3 (1 Byte)
0: 100%, 1: 75%, 2: 50%, 3: 25%
Gesamtlänge: 34 Bytes

Bedienung der Gadgets im Convolve-Requester:

Oben links findet sich der Konvolutionskern (eine 3×3-Matrix) für die Eingabe von Werten zwischen minus 128 und plus 127. Darunter befinden sich die Voreinsteller für "Shift", "Threshold" und "Mix". Je nachdem, ob links oder rechts im jeweiligen Gadget geklickt wird, zählt der Wert dort vorwärts oder rückwärts weiter.

Shift hebt den gerade zu bearbeitenden Grauwert um den angegebenen Wert an. Im Ergebnis legt Shift die Hintergrundfarbe im bearbeiteten Bild fest (ein Shift von "7" ergibt mittelgrau, die Voreinstellung von "0" erzeugt einen schwarzen Hintergrund).

Mit Threshold richtet man eine untere Schwelle ein, unterhalb derer die Grauwerte im Bild unangetastet bleiben, so dass das Bild nur teilweise verändert wird. Ein Threshold von "0" erfasst also alle Pixel im Bild.

Mix wirkt erst nach der eigentlichen Berechnung und legt fest, mit welchem Anteil das Konvolutionsergebnis mit dem Originalwert des Bildpunktes verknüpft werden soll. Die Einstellung "100%" ersetzt den Originalwert vollständig. Es sind vier Prozentwerte einstellbar: 25%, 50%, 75% und 100%. Man kann hiermit die Wirkung einer Konvolution abschwächen.

Die Angabe hinter Scale erfolgt automatisch. Alle Werte der Matrix sind hier aufaddiert. Hiermit können wir leicht bestimmen, welchen Wert wir in die zentrale Zelle des Konvolutionskerns setzen wollen, denn das hat erhebliche Auswirkungen auf das Ergebnis der Konvolution (s. folgende Beispiele).


Beispiele:

Am besten erklären Beispiele, was mit den Zahlen der Matrix erreicht werden kann. Dieser Konvolutionskern hier:

-101
-101
-101

ist ein Detektor für senkrechte Kanten (linkes Bild). Klickt man zweimal auf RotR, dann sind die Werte in der Matrix horizontal angeordnet, und es bleiben im bearbeiteten Bild waagerechte Kanten übrig (rechtes Bild). Solche Filter nennt man Prewitt- oder Sobel-Operatoren.

senkrechte Kanten
Ein Prewitt-Filter für senkrechte Kanten.
Deep Press farbig
Dasselbe für waagerechte Kanten.

Diese folgende Matrix:

LaPlacian
Ein Detektor für alle Kanten: LaPlace.

Sharpen 1
Mit Einziehung des Matrixzentrums: Bildschärfe erhöhen: Sharpen.

LaPlace-Operatoren
-1-1-1
-18-1
-1-1-1

stellt einen Detektor für alle Kanten dar (s. auch LaPlacian). Die Summe des Matrixzentrums mit dem Rand ergibt Null ("Scale: 0" im Convolve-Requester; Bild ganz oben).

Erhöhen wir die 8 in der Mitte um eins auf 9,

-1-1-1
-19-1
-1-1-1

wird damit der Ausgangswert des Quellbilds wieder in das Ergebnis hineinaddiert (Scale: 1). Das fertig berechnete Bild erscheint in der Schärfe stark angehoben (s. Sharpen), denn nun enthält es das Ausgangsbild einschließlich der berechneten Anhebung aller Kanten (Bild rechts).


Bumpmap
Eine Bumpmap, erstellt mit Emboss.

Bumpmap-Demo
Das C=-Logo links oben in der Ecke wurde mit 4Bit&Map eingefügt.

Bei Bumpmaps ist es wichtig, dass sie als Hintergrundfarbe 7
(gr2) haben.

Eine sehr nützliche Anwendung von Convolve ist das Erzeugen von Bumpmaps (s. 4Bit&Map) aus Schwarzweiß-Vorlagen, z.B. von Schriftzügen. Dazu eignet sich am besten ein Winkeldetektor mit folgender Matrix (s. auch Emboss):

-1-10
-101
011

wobei der Shift-Wert unbedingt auf "7" stehen muss (mit Shift legt man die resultierende Hintergrundfarbe fest, "7" ist mittelgrau, das ist GoDots Neutralwert beim "Bumpen"). Threshold reduziert man auf "0", damit alle Pixel im Bild erfasst werden. Dann wird die Matrix appliziert. Ergebnis:

Emboss


Originalbild
Dieses Bild ist die Vorlage.

Gauß-Filter
Hier wurde der Gauß-Filter angewendet.

Gauß-Operatoren dienen zum Entrauschen.

Einerseits gibt es also Konvolutionsoperatoren, die alle - wie der LaPlace-Operator - irgendwie Übergänge, d.h. Kanten, hervorheben. Auf der anderen Seite sind da alle solchen Operatoren, die im Bild in unterschiedlichem Maß Unschärfe verursachen und damit Rauschen jeder Art beseitigen oder zumindest abmildern. Rauschen entsteht, wenn beim Herstellungsprozess des Bildes irgendein Parameter ungünstige Bedingungen geschaffen hat: Zu wenig Licht bei der Aufnahme eines Fotos z.B., oder eine von der Rasterfrequenz der Vorlage abweichende Abtastrate beim Scannen oder Digitalisieren von Bildern ("Moiré"). Der Basis-Operator für Rauschunterdrückung ist der Gauß-Operator, hier sein Konvolutionskern:

121
242
121

Im Bild mit dem Tiger (rechts) ist genau dieser Konvolutionskern aufgetragen worden. Man sieht deutlich die Unschärfe, die die "Verunreinigungen" wegwischt. Das Bild wird durch den Gauß-Operator zusätzlich geringfügig dunkler. Den gleichen Effekt hätte eine Matrix, die ausschließlich aus Einsen bestehen würde (Rechteck- oder Boxfilter). Die GoDot-Modifier Blur und WaterColor funktionieren nach dem Gauß-Prinzip.


Ein weiterer Typ von Konvolutionsfiltern ist die Pixelzuweisung nach Anordnung. Damit ist gemeint, dass alle von der Konvolutionsmatrix betroffenen Pixel (bis auf den zentralen Wert) zunächst sortiert werden. Dann wird nach unterschiedlichen Gesichtspunkten entschieden: Soll der hellste der Punkte in die Mitte geschrieben werden (Maximum)? Soll der dunkelste in die Mitte (Minimum)? Soll der Wert aus der Mitte der sortierten Liste ins Zentrum (Median)? Solche Filter entrauschen ein Bild ganz extrem, weil viele Bildpunkte durch dieses Vorgehen einfach verworfen werden. Auf dem C64 mit seiner geringen Auflösung wirkt so etwas manchmal Wunder! Mit dem Convolve-Modifier selbst kann man diesen Konvolutionstyp nicht erzeugen.


Zu guter Letzt bietet GoDot Modifier, die genau das Gegenteil von Rauschunterdrückung machen, sie fügen dem Bild unterschiedliche Arten von Rauschen hinzu: (Speckle, Smear, Random, RandomMoveLeft). Sie erlauben einerseits bereits für sich gesehen interessante Effekte, sind aber andererseits gut im Zusammenspiel mit den Entrauschungsfiltern zu gebrauchen, um deren Effekte noch zu verstärken.


Oft gebrauchte Matrizen lassen sich abspeichern und wieder laden (mit "Save" und "Load", Format s. oben). Auf Diskette erhalten die Matrizen beim Speichern automatisch das Systempräfix "con.". Im Requester erscheint nach dem Abspeichern oben über der Matrix der eingegebene Name (hier: "MakeSmooth"). Mit "RotR" rücken Sie den Zahlenring um die Mitte der Matrix um eine Stelle weiter nach rechts. So können Sie ohne große Neueingaben schnell die Richtung eines Detektors, für die er sensibel ist, verändern. "Reset" stellt alle Werte der Matrix auf "0".


Tipp: Eine einzelne 1 irgendwo auf dem Rand der Matrix (die ansonsten mit 0 gefüllt sein muss), verschiebt das ganze Bild pixelweise in die gegenüberliegende Richtung. Eine 1 links oben schiebt also das ganze Bild um einen Pixel nach rechts unten. Eine 1 in der Mitte lässt das Bild unverändert (es rechnet sich selbst aus).

Da viele Möglichkeiten bestehen, wie ein mit Convolve bearbeitetes Bild aussehen könnte, haben wir hier auf weitere Beispiele verzichtet. Schauen Sie sich die fertigen Spezialmodule dazu an.


Alle diese Angaben treffen auch für das Plus4-Convolvemodul Convolve7Bit zu (für Bilder, die mit PCXprep4Pl4 geladen wurden).


Eigenschaften:
nicht umkehrbar, betroffen sind Graustufen; kumulativ (mehrfacher Aufruf verstärkt den Effekt)


zurück

Arndt Dettke
support@godot64.de