Jeffrey Cross
Jeffrey Cross

Codebox: Erstellen Sie Image-Filter mit Matrix-Multiplikation

Mit Farbfiltern können Sie ein Bild ändern, indem Sie Farben aus einem Bild herausfiltern. Obwohl in Processing einige Filter eingebaut sind, ist es oft praktisch, eigene benutzerdefinierte Filter erstellen zu können. Beispielsweise enthält die Site Anaglyph Methods Comparison eine Reihe verschiedener Filter, die beim Erstellen von 3D-Bildern hilfreich sind.

Wie Sie der Site entnehmen können, handelt es sich bei Filtern im Wesentlichen um mathematische Transformationen, die auf die roten, grünen und blauen Komponenten der Pixel in einem Bild angewendet werden. Um einen Filter wie den der Stereo-Anaglyphen-Site zu erstellen, müssen Sie jedes Pixel im Originalbild ziehen, eine Matrixoperation auf seine Farbkomponenten anwenden und dann diesen neuen Wert im entsprechenden Pixel im neuen Bild verwenden. Diese Codebox zeigt Ihnen, wie Sie Ihre eigenen Filter erstellen.

Zunächst jedoch ein wenig Rückblick auf die (möglicherweise) haarig aussehende Mathematik. Eine Matrix ist ein zweidimensionales Array von Zahlen, die als Elemente bezeichnet werden. Matrizen werden in vielen verschiedenen Anwendungen verwendet und repräsentieren Gleichungen, Transformationen in 3D-Objekte und Farbfilter (wie in diesem Beispiel).

Eine Matrix wird normalerweise durch ihre Dimensionen charakterisiert: die Anzahl der Elemente in ihren Zeilen (die übersteigenden Zahlen) und die Spalten (die nach oben und unten gerichteten Zahlen). Konventionell steht die Anzahl der Zeilen immer an erster Stelle. Die folgende Abbildung zeigt 2 Matrizen. Auf der linken Seite befindet sich eine 2 x 3-Matrix, die im Allgemeinen als 2 × 3-Matrix bezeichnet wird. Auf der rechten Seite befindet sich eine Matrix mit 3 Zeilen und 2 Spalten, die auch 3 × 2-Matrix genannt wird:

Um zwei Matrizen miteinander zu multiplizieren (nennen wir sie Matrix A und Matrix B), muss die Anzahl der Spalten in Matrix A der Anzahl der Zeilen in Matrix B entsprechen. Dies ist kritisch. Wenn dies nicht der Fall ist, ist die Multiplikation nicht definiert . (Dies ist eine Art von Teilen durch Null - es ist einfach unmöglich.)

Wenn dieses Kriterium erfüllt ist, hat das Produkt der beiden Matrizen (nennen wir es Matrix C) die gleiche Anzahl von Zeilen wie Matrix A und dieselbe Anzahl von Spalten wie Matrix B. Die Elemente in Matrix C sind gleich der Summe von Die Produkte des entsprechenden Spaltenelements in A und die Zeilenelemente in B. Dies ist etwas schwierig, aber die folgende Abbildung sollte (hoffentlich!) dies etwas klarer machen:

Die folgende Skizze, matrix_mult.pde, veranschaulicht, wie die Operation in Processing ausgeführt wird:

Wenn Sie die Skizze ausführen, sollten Sie die folgende Ausgabe sehen:

[0][0] = 2.0 [0][1] = 0.0 [1][0] = 5.5 [1][1] = 2.0

Wir sind also bereit, den Filtercode zu schreiben. Die verbleibende Falte ist, dass Bilder in Bearbeitung in eindimensionalen Farbfeldern gehalten werden, anstatt in zweidimensionalen Feldern mit (x, y) -Koordinaten, wie in diesem großartigen Tutorial für Bilder und Pixel von Daniel Shiffman erläutert. Im Tutorial gibt er eine schöne Formel, mit der Sie eine (x, y) -Koordinate der Position im Bildfeld zuordnen können:

Position in Array = x + IMAGE_WIDTH * y

Die folgende Abbildung soll die meisten hier vorgestellten Konzepte veranschaulichen:

Hier ist eine Skizze namens filter.pde, um den Filter durch Matrixmultiplikation zu implementieren:

Mehr: Schauen Sie sich hier alle Codebox-Spalten an

In der Schuppenhalle:


Erste Schritte mit Processing Lernen Sie die Computerprogrammierung auf einfache Weise mit Processing, einer einfachen Sprache, mit der Sie Code zum Erstellen von Zeichnungen, Animationen und interaktiven Grafiken verwenden können. Programmierkurse beginnen normalerweise mit der Theorie, aber in diesem Buch können Sie direkt in kreative und unterhaltsame Projekte einsteigen. Es ist ideal für alle, die grundlegende Programmierung erlernen möchten, und ist eine einfache Einführung in die Grafik für Personen mit Programmierkenntnissen.

Aktie

Leave A Comment