xpil_contour — 2D edges op

• Datenarten: image → image

• Aufruf: fullseye.apply(img, "xpil_contour", a=0.5, b=0.5) (das 2-D-Modell ist ein Bild plus zwei skalare Regler a,b∈[0,1])

xpil_contour: input → output

*Die Abbildung ist die tatsächliche Ausgabe auf einer synthetischen 128×128-Eingabe. Links Eingabe, rechts Ausgabe. Punktwolken als Draufsicht-Streudiagramm (Helligkeit = z), 1-D-Reihen als Linie, Volumen als Maximum-Projektion entlang z, Videos als mittleres Bild, komplexe Bilder als Betrag; Rückgabewerte, die kein Bild ergeben, werden als Werte gezeigt.*

*Regler a ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*

*Regler b ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*

Auf anderen Bildern (synthetische Szene / Foto / Münzen. Obere Reihe: Eingaben, untere Reihe: deren Ausgaben. Regler auf Standard):

▸ xpil_contour: andere Eingaben (Doku-Website)

*Die 4. Spalte ist eine Farb-Eingabe (H,W,3). Dieser Op verarbeitet Farbe, ohne Kanäle zu vermischen (er faltet den Farbkanal nicht als dritte Raumachse).*

Verwendung

Pillows Konturextraktionsfilter. Nutzt den festen Kernel von PIL.ImageFilter.CONTOUR, um einen Effekt zu erzeugen, der nur Umrisslinien als schwarze Linien auf weißem Hintergrund übrig lässt (ein Federzeichnungs-/Strichzeichnungseffekt).

a, b werden nicht verwendet (fester Kernel).

Der Kernel ist der 3x3-Kernel [-1,-1,-1; -1,8,-1; -1,-1,-1] (scale 1, offset 255), und die Ausgabe ist 255 + (8*Zentrum - Summe der 8 Nachbarn), auf 0–255 gesättigt. Flache Bereiche werden 255 (weiß), Pixel, die dunkler als ihre Umgebung sind, werden dunkel, und Pixel, die heller als ihre Umgebung sind, sättigen bei 255. Auf der "dunklen Seite" einer Stufe liegt also eine 1 Pixel breite schwarze Linie, während die helle Seite weiß bleibt (xpil_find_edges verwendet denselben Kernel mit offset 0, daher erscheinen beide Seiten hell).

Die Eingabe wird auf [0,1] begrenzt (clip) und nach *255 abgeschnitten zu einem 8-Bit-L-Bild, die Ausgabe wird mit /255 wieder auf [0,1] gebracht (es kommt eine Quantisierung von 1/255 hinzu). Den äußersten 1-Pixel-Rand des Bildes filtert Pillow nicht und gibt ihn mit den Eingabewerten zurück. Ein Bild der Größe 0 wird mit ValueError abgewiesen und fällt fail-soft auf die begrenzte Eingabe zurück (im Register vermerkt). Er reagiert auch auf Rauschen, daher werden die Linien aufgeräumter, wenn man xpil_smooth_more oder median davorschaltet. Um die Linien als Regionen zu nutzen, mit invert die Seite der schwarzen Linie aufhellen und dann an threshold weitergeben.

Leeres Bild (gemessen): Ein Bild gleichmäßiger Helligkeit macht unabhängig von der Helligkeit jedes Pixel zum Vordergrund (1). Ein überbelichtetes, verdecktes oder motivloses Bild kommt als „100 % defekt“ zurück; prüfe daher vorgelagert auf Gleichmäßigkeit und verwirf solche Bilder.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie gallery2d_edges

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

In Studio ausprobieren

Das Programm unten ist nachweislich lauffähig (gleiche Eingabe wie die Abbildung). In der Studio-Hilfe wird dieser Block zu Schaltflächen, die es sofort laden und ausführen.

xpil_contour 0.40 0.50

▸ Diese Pipeline laden  ·  Laden & ausführen

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• gallery2d_edges — py -3.11 examples/gallery2d_edges.py

Typkompatible Folge-Operatoren (nehmen image als Eingabe)

identity · gaussian · mean_box · bilateral · unsharp · median · min_filter · max_filter

Gleiche Kategorie (edges)

sobel_mag · prewitt_mag · roberts_mag · dog · edge_transition_width · grad_dir · log · corner_response


*Provenance: ops.py — 2D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.