Wie wird der Photoshop-Ausschnittfilter implementiert?

8

Photoshop hat viele coole künstlerische Filter und ich würde gerne die zugrunde liegenden Algorithmen verstehen.

Ein Algorithmus, der besonders interessant ist, ist der Cutout-Filter (Nummer 2 bei der obigen Verknüpfung).

Es verfügt über drei einstellbare Parameter: Anzahl der Ebenen, Edge Simplicity und Edge Fidelity. Anzahl der Ebenen scheint einen geradlinigen Posterisierungsalgorithmus zu steuern, aber was die anderen Slider technisch machen, entzieht sich mir.

Ich würde denken, dass sie etwas tun, das mit Vornoi-Diagrammen oder k-means-Partitionierung zusammenhängt, aber in Wikipedia herumstochern hat nichts ergeben, was offensichtlich auf das, was Photoshop macht, abstellt, besonders wenn man bedenkt, wie schnell sich der Filter rendert .

Gibt es eine Quelle für technische Beschreibungen der Photoshop-Filter? Oder haben Sie irgendwelche Gedanken darüber, wie dieser spezielle Filter implementiert werden könnte?

    
fastcall 26.10.2008, 01:56
quelle

8 Antworten

6

Kantenerkennung ist normalerweise ein Sobel- oder Canny-Filter, dann werden die Kanten mit einem Chain-Code zusammengefügt.
Betrachten Sie etwas wie die OpenCV Bibliothek für Details

    
Martin Beckett 26.10.2008 04:57
quelle
3

Ich bin mir nicht sicher, ob es eine Art von Zellschattierung sein könnte, aber es sieht auch wie ein Medianfilter mit einer sehr großen Kernelgröße aus oder wurde mehrmals angewendet.

Die Kante Einfachheit / Wiedergabetreue können Optionen sein, die entscheiden, ob ein benachbartes Pixel (oder eines, das in den Kernel fällt) basierend auf der Farbdifferenz mit dem aktuellen Pixel berücksichtigt werden sollen.

    
Ismael C 26.11.2008 19:05
quelle
3

Haben Sie diesen Beitrag gesehen? Es erklärt, wie Sie mit ImageMagic das gleiche Ergebnis erzielen, und IM ist opensource .

    
Sunny Milenov 03.03.2009 23:09
quelle
0

Vielleicht nicht genau das, wonach Sie suchen, aber wenn Sie gerne wissen, wie Filter funktionieren, können Sie den Quellcode von GIMP ausprobieren. Ich kann nicht sagen, ob GIMP ein Äquivalent von Cutout-Filter hat, das Sie erwähnt haben, aber es lohnt sich, einen Blick darauf zu werfen, wenn Sie wirklich an diesem Bereich interessiert sind.

    
Kibbee 26.10.2008 02:56
quelle
0

Die Anzahl der Ebenen scheint der Zellschattierung zu ähneln und so würde ich diesen Teil in diesem Fall implementieren: Sie nehmen einfach dieses Histogramm des Bildes und teilen es in den "Anzahl der Ebenen" -Betrag auf der Abschnitte berechnen dann einen Durchschnitt für jeden Abschnitt. Jede Farbe im Histogramm verwendet dann diesen Durchschnitt anstelle ihrer ursprünglichen Farbe.

Die anderen beiden Parameter erfordern etwas mehr Denken, aber "Edge simplicity" scheint die Anzahl der Segmente zu explodieren, aus denen die Formen aufgebaut sind. Oder besser gesagt: die Anzahl der Verfeinerungen, die auf einige grobe Bildsegmentierungsalgorithmen angewendet werden. Der Treue-Schieberegler scheint etwas Ähnliches zu tun; es steuert wahrscheinlich eine Art von Schwelle für den Zeitpunkt, an dem die Verfeinerungen stattfinden sollten.

Dies könnte helfen

    
Jasper Bekkers 28.10.2008 02:28
quelle
0

Ich habe eine einfache Lösung, die theoretisch etwas ähnliches zu diesem Filter erzeugen würde. Irgendwie ähnlich dem, was Ismael C vorgeschlagen hat.

Edge Simplicity steuert die Fenstergröße. Vielleicht sollte Fenster gewichtet werden.

Aber anders als bei regulären gefilterten Filtern würde dieser nur einen festen Teil zufälliger Pixel aus diesem Fenster nehmen. Die Größe des Abschnitts wird mit dem Parameter Fidelity gesteuert.

Stellen Sie die Pixelfarbe auf den Median der Probe ein.

Wenn wir einen Posterisierungsalgorithmus haben, wird er danach angewendet.

Hier gehen wir!

Bitte melden Sie die Ergebnisse, wenn Sie sie implementieren.

PS. Ich bezweifle wirklich, dass die Segmentierung überhaupt verwendet wird.

    
Maleev 03.03.2009 19:31
quelle
0

Ich kann mir vorstellen, dass es wahrscheinlich eine Schwellwertmessung, eine Kantenerkennung (Sobel / Canny / Roberts / was auch immer) und eine Posterisierung ist.

    
James Burgess 03.03.2009 19:48
quelle
0

Vom Basteln her habe ich das herausgefunden:

  • es ist deterministisch
  • es macht keine pixelbasierte Posterisierung, um den endgültigen Effekt zu erzielen
  • es verwendet wahrscheinlich keine Art von pixelbasierter Kantenerkennung, es scheint eher mit Bereichen als Kanten zu funktionieren.
  • es berechnet die Formen geschlossene Polygone zum Zeichnen (einige der Polygonkanten könnten sich mit Bildkanten überlappen).
  • Wenn die Kanten von Polygonen bekannt sind, dann wird die Farbe jedes Bereichs, der in Kanten eingeschlossen ist (nicht notwendigerweise zu einem Polygon gehörend), mit einer durchschnittlichen Farbe von Pixeln des Originalbildes gefärbt, das dieser Bereich abdeckt.
  • Kante des Polygons kann sich selbst schneiden. Besonders sichtbar für hohe Kanten Einfachheit.
  • Wenn die "Einfachheit der Linien" fällt, erhöht sich die Anzahl der Polygonkanten, aber auch die Anzahl der Polygone.
  • Kantentreue beeinflusst die Kantenanzahl von Linienpolygonen, beeinflusst aber nicht die Polygonzahl
  • Hohe Kantentreue (= 3) bewirkt, dass ein einzelnes Polygon gleichzeitig sehr lange und sehr kurze Kanten hat. Niedrige Genauigkeit (= 1) bewirkt, dass ein einzelnes Polygon alle Kanten in etwa die gleiche Länge hat
  • Die Einfachheit der Kanten und die geringe Kantentreue scheinen Polygone zu bevorzugen, die an Bildrändern verankert sind, selbst unter Kosten der Gesundheit.

Insgesamt sieht es wie eine vereinfachte Version des Live-Trace-Algorithmus von Adobe Illustrator aus, der anstelle von Kurven Polygone verwendet.

... oder vielleicht auch nicht.

    
Kamil Szot 20.09.2009 14:57
quelle