Frage

Ich weiß, das ist nicht sehr relevant für die Programmierung, aber ich muss wissen, wie ein Faltungsmatrix für eine PHP-GD-Funktion arbeitet. Ich habe eine Menge über Google gesucht, kann aber nichts finden, dass es gut erklärt.

War es hilfreich?

Lösung

Andere Tipps

Die Operation ersetzt jeden Pixel mit dem gewichteten Durchschnitt des Pixels herum, wobei die Gewichte durch die Matrix gegeben sind. Hier ist ein Beispiel Faltungsmatrix:

1 1 1
1 1 1
1 1 1

Was das bedeutet ist jedes Pixel mit dem Durchschnittswert der auf dieses Pixel zentriert 3x3-Block zu ersetzen. Hier ist eine andere:

0 0 0
0 1 0
0 0 0

Diese Matrix hat nichts tun, es gibt Ihnen die Originale zurück.

Die Gewichte können negativ sein, auch. Diese Matrix subtrahiert den Mittelwert des Pixels neben ein Pixel:

 0 -1  0
-1  4 -1
 0 -1  0

Convolution Matrizes können Sie fein abgestimmte Unschärfe und schärfen Effekte zu tun. Sie können die Direktionalität Melodie und den Frequenzgang von Filtern eine Faltungsmatrix verwendet wird, wenn es groß genug ist. Allerdings ist es in der Regel verwendet für quick-n-dirty Verwischung und Schärfen.

Ich weiß nicht, speziell für PHP, aber im Allgemeinen eine Faltungsmatrix verwendet wird, um bestimmte Arten von Bildverarbeitungseffekten zu realisieren.

Ein einfaches Beispiel aus dem PHP-Handbuch genommen auf GD http: // www .php.net / manual / en / function.imageconvolution.php :

Angenommen, Sie haben eine Matrix wie folgt aus:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

Wenn Sie diese Faltungsmatrix auf ein Bild anwenden, dann für jedes Pixel bei (x, y), die in dem Bild, das entsprechende Pixel in der Ausgabe wird zu:

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

Mit anderen Worten, die Faltungsmatrix benutzt wird jedes Ergebnis Pixel als eine lineare Kombination des Quellbildpunktes zu berechnen, und die Pixel, die es umgeben.

Der Divisor Parameter wird die ganze Folge von etwas zu teilen (dies ist in der Regel die Summe aller Werte in der Matrix) und den Offset verwendet wird, einen konstanten Ausdruck des endgültigen Ausgabewert hinzuzufügen.

Faltungsmatrix arbeitet auf jedem Kanal des Pixels des Bildes unabhängig.
So müssen Sie lernen, über Kanäle zuerst.
Dann können Sie „spielen“ mit dieser Matrix interaktiv, wenn Sie ein Photoshop haben: wählen Sie das Menü Filters-> Sonstige-> Benutzerdefiniert. Das zentrale Element der Matrix aktuellen Pixels darstellt, stellvertretend für alle anderen umgebenden Pixel. Und vergessen Sie nicht über den „Scale“ Wert am unteren Ende.
Ich denke, können Sie einfach die Art und Weise verstehen, diese Matrix funktioniert.
Sie können an dieser Sache einen Blick hier . Es beschreibt die Faltungsmatrix als auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top