[PYTHON] (Bildverarbeitung) Petit Thinning - Filter, der eine lose Ausdünnung durchführt

Ich habe einen Filter geschrieben, der das Strichzeichnungsbild mit schwarzen Linien auf weißem Hintergrund locker verdünnt. Das Ausdünnen dient nicht zur Analyse wie dem Extrahieren einer 1-Pixel-Linie, sondern zur praktischen Verwendung im Bereich der Retuschiersoftware. Neben dem Ausdünnen geht es auch darum, mehrere Linien unterschiedlicher Dicke so gleichmäßig wie möglich zu gestalten.

image

Quelle

Funktioniert mit Python.

https://github.com/a-nakanosora/blender-scripts/blob/master/Image/Petit%20Thinning%20CLI/petit_thinning.py

Sie benötigen "Kissen", um es zu verwenden. (Es wird empfohlen, Anaconda zu verwenden, das diese Bibliothek aus Standard-Python enthält.)

Nachtrag: In der ersten Version waren Numpy und Pillow für die externe Bibliothek erforderlich, aber mit der Verbesserung durch @ pashango2 wurde Pillow vereinheitlicht und beschleunigt. Danke vielmals! </ font>

Wie benutzt man

$ python petit_thinning.py 6 0.95 5 input.png output.png

Das Befehlszeilenargument lautet

petit_thinning.py <emptyrange> <emptythres> <dilation_max_depth> <path_in> [<path_out>] [-p]

Es sieht aus wie das. Emptyrange, Emptythres und Dilation_max_depth sind die Parameter, die die Wirkung des Filters ändern.

  • Emptyrange: Eine Ganzzahl größer oder gleich 1. Eine Richtlinie dafür, wie reibungslos jede Ausdünnungsstufe gemischt wird
  • Emptythres: Eine reelle Zahl im Bereich von 0,0 bis 1,0. Je näher es an 1,0 liegt, desto stärker wirkt sich das Ausdünnen der Linie aus, aber die Linie neigt dazu, unterbrochen zu werden.
  • dilation_max_depth: Eine Ganzzahl größer oder gleich 1. Sie können dickere Linien dünner machen, indem Sie eine größere Anzahl angeben. Wenn die Linien jedoch zu dick sind, tritt häufig Rauschen auf.
  • path_in: Pfad der Eingabedatei
  • path_out: Pfad der Ausgabedatei. Wenn nicht angegeben, wird der Eingabepfadname mit "_out" am Ende verwendet.
  • -p Flag: Druckt verschiedene Parameter und Berechnungszeit

Wenn "leerer Bereich" auf einen Wert eingestellt wird, der größer als "dilation_max_depth" ist, wird das Rauschen im Grunde genommen verringert, aber auch der Grad der Ausdünnung wird verringert. Es ist sicher, dilation_max_depth auf ungefähr 5 zu setzen.

Grundprinzip

Ich mache nur eine Erweiterung des Morphologiefilters und synthetisiere sie.

  • Führen Sie mehrere Dilatationsstufen für das Eingabebild durch und führen Sie jeweils die Ergebnisse auf.
  • Wählen Sie das Bild mit der höchsten Ausdehnungstiefe aus, überschreiben Sie den leeren Teil, in dem keine Linie mit einem Bild mit geringer Tiefe vorhanden ist, und verwenden Sie es als nächstes Bild.
  • Führen Sie den gleichen Vorgang durch, während Sie die Tiefe nacheinander erhöhen.

Recommended Posts

(Bildverarbeitung) Petit Thinning - Filter, der eine lose Ausdünnung durchführt
Bildverarbeitung 100 Klopfen Q9, Q10 (Filter) Beschleunigung
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Bildverarbeitung mit Python 100 Knock # 11 Glättungsfilter (Durchschnittsfilter)
Python-Bildverarbeitung
Bildverarbeitung 100 Schläge ①