Wie funktioniert eine Faltungsmatrix arbeiten?
-
19-09-2019 - |
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.
Lösung
Ich ging in eine Last der Theorie hinter ConvolutionFilter hier:
Wie kann ohne Verwendung von in-built Gaußschen Funktionen ein Bild verschwimmen ich Gaußschen?
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.