Convolution-Filter

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Mit der ConvolutionFilter-Klasse können Sie zahlreiche Bildtransformationen auf Anzeigeobjekte oder BitmapData-Objekte anwenden, wie beispielsweise Weichzeichnen, Kantenerkennung, Scharfstellen, Prägen und Schliff.

Im Prinzip durchläuft in der Convolution-Filter nacheinander jedes Pixel im Quellbild und berechnet die Ergebnisfarbe des Pixels aus dem Wert des Pixels und seiner umgebenden Pixel. Eine Matrix, die ein Array aus numerischen Werten darstellt, gibt an, in welchem Umfang sich der Wert eines bestimmten benachbarten Pixels auf den Ergebniswert auswirkt.

Betrachten Sie den am häufigsten verwendeten Matrixtyp, eine 3 x 3-Matrix. Diese Matrix enthält neun Werte:

N    N    N 
N    P    N 
N    N    N

Wenn der Convolution-Filter auf ein bestimmtes Pixel angewendet wird, werden der Farbwert des Pixels selbst (in diesem Beispiel „P“) sowie die Werte der umgebenden Pixel (in diesem Beispiel „N“) untersucht. Durch Einstellen der Werte in der Matrix können Sie jedoch festlegen, welche Priorität bestimmte Pixel bei den Auswirkungen auf das Ergebnisbild haben.

Beispielsweise lässt die folgende Matrix, wenn sie mit einem Convolution-Filter angewendet wird, das Bild vollkommen unverändert:

0    0    0 
0    1    0 
0    0    0

Das Bild bleibt unverändert, da der ursprüngliche Pixelwert bei der Berechnung der Ergebnispixelfarbe die relative Stärke 1 aufweist, während die Werte der umgebenden Pixel die relative Stärke 0 aufweisen, d. h., ihre Farben wirken sich nicht auf das Ergebnisbild aus.

Entsprechend führt die folgende Matrix dazu, dass die Pixel des Bilds um ein Pixel nach links verschoben werden:

0    0    0 
0    0    1 
0    0    0

In diesem Fall ist zu beachten, dass das Pixel selbst keine Auswirkung auf den Wert des an dieser Stelle im Ergebnisbild angezeigten Pixels hat. Nur der Wert des Pixels auf der rechten Seite wird zur Berechnung des Ergebnispixelwerts verwendet.

In ActionScript erstellen Sie die Matrix als eine Kombination einer Array-Instanz mit den Werten und zweier Eigenschaften, welche die Anzahl an Zeilen und Spalten in der Matrix angeben. Im folgenden Beispiel wird ein Bild geladen, und wenn das Bild vollständig geladen ist, ein Convolution-Filter unter Verwendung der Matrix aus dem vorangegangenen Code auf das Bild angewendet:

// Load an image onto the Stage. 
var loader:Loader = new Loader(); 
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); 
loader.load(url); 
this.addChild(loader); 
 
function applyFilter(event:MouseEvent):void 
{ 
    // Create the convolution matrix. 
    var matrix:Array = [0, 0, 0, 
                                     0, 0, 1, 
                                     0, 0, 0]; 
     
    var convolution:ConvolutionFilter = new ConvolutionFilter(); 
    convolution.matrixX = 3; 
    convolution.matrixY = 3; 
    convolution.matrix = matrix; 
    convolution.divisor = 1; 
     
    loader.filters = [convolution]; 
} 
 
loader.addEventListener(MouseEvent.CLICK, applyFilter);

Die Auswirkung anderer Werte als 1 und 0 in der Matrix ist aus diesem Codebeispiel nicht ersichtlich. Beispielsweise führt die gleiche Matrix mit der Zahl 8 anstelle der 1 an der rechten Position die gleiche Aktion durch (Verschieben der Pixel nach links). Darüber hinaus wirkt sie sich auf die Farben des Bilds aus und macht sie achtmal heller. Dies liegt daran, dass die Ergebnispixelwerte durch Multiplizieren der Matrixwerte mit den ursprünglichen Pixelfarben, Addieren der Werte und Dividieren des Ergebnisses durch den Wert der divisor -Eigenschaft des Filters berechnet werden. Beachten Sie bei dem folgenden Beispielcode, dass die divisor -Eigenschaft auf 1 gesetzt ist. Allgemein gilt: Wenn die Helligkeit der Farben in etwa der im ursprünglichen Bild entsprechen soll, müssen Sie sicherstellen, dass der Divisor der Summe der Matrixwerte entspricht. Wenn die Werte in der Matrix 8 ergeben und der Divisor 1 lautet, ist das Ergebnisbild etwa achtmal heller als das ursprüngliche Bild.

Obwohl der Effekt dieser Matrix kaum erkennbar ist, können andere Matrixwerte zum Erstellen verschiedener Effekte verwendet werden. Im Folgenden sind verschiedene Standardsätze mit Matrixwerten für verschiedene Effekte aufgeführt, die mithilfe einer 3 x 3-Matrix erstellt werden:

  • Einfache Weichzeichnung (Divisor 5):

         0 1 0 
         1 1 1 
         0 1 0
  • Schärfung (Divisor 1):

         0, -1, 0 
        -1, 5, -1 
         0, -1, 0
  • Kantenerkennung (Divisor 1):

         0, -1, 0 
        -1, 4, -1 
         0, -1, 0
  • Prägung (Divisor 1):

        -2, -1, 0 
        -1, 1, 1 
         0, 1, 2

    Beachten Sie, dass der Divisor für die meisten dieser Effekte den Wert 1 hat. Der Grund hierfür ist, dass die Summe der negativen Matrixwerte und der positiven Matrixwerte 1 ergibt (bzw. 0 für die Kantenerkennung, doch der Wert der divisor -Eigenschaft darf nicht 0 sein).