Ausgabe
Ich versuche, den Algorithmus oder sogar die allgemeine Idee hinter einigen der in Photoshop verwendeten Effekte zu finden. Insbesondere der Spachteleffekt , der die Farben eines Bildes vereinfacht. Zum Beispiel das Bild unten:
wird so etwas:
Ich möchte, dass jede Gruppe von Pixeln mit ähnlicher Farbe in einen einfachen Block mit einer oder zwei Farben (in Echtzeit) umgewandelt wird, wie dies in Photoshop der Fall ist. Jede Idee einer Methode, um dies zu tun, ist willkommen.
Dem Vorschlag von Tucuxi folgend, könnte ich einen Klassifizierungsalgorithmus wie kNN ausführen , um K Hauptfarben für jedes Bild (Einzelbild im Video) auszuwählen und dann die Farbe jedes Pixels auf die nächste von den k Vertretern zu ändern. Ich werde den Code hier einfügen und freue mich über Verbesserungsvorschläge.
Lösung
Da Sie repräsentative Farben wählen möchten, können Sie wie folgt vorgehen:
- Wählen Sie K Farben aus N insgesamt im Bild vorhandenen Farben aus
- Ersetzen Sie jedes Pixel im Bild durch die nächste Farbe innerhalb des gewählten K
Um Schritt 1 zu erreichen, können Sie einen k-nächsten Nachbarn über den tatsächlichen Farbraum laufen lassen. In einem BxH-Bild haben Sie BxH-Pixel mit jeweils einer Farbe. Sie wählen K zufällige Farben aus, die als Schwerpunkte fungieren, fügen jedem die nächstgelegenen Pixel hinzu und nach einer Weile haben Sie K verschiedene Farben, die mehr oder weniger die wichtigsten Farben des Bildes darstellen (in Bezug auf nicht zu weit entfernt von allen anderen). Beachten Sie, dass dies nur ein möglicher Clustering-Algorithmus ist – ich bin sicher, dass es viel Literatur zu Alternativen und ihren relativen Vorzügen gibt.
Schritt 2 ist vergleichsweise viel einfacher. Berechnen Sie für jedes Originalpixel die Entfernung zu jeder der K ausgewählten Farben und ersetzen Sie sie durch die nächste.
Beantwortet von – Tucuxi
Antwort geprüft von – Pedro (FixError Volunteer)