features op• Datenarten: region → feature
• Aufruf: fullseye.apply(img, "compactness", a=0.5, b=0.5) (das 2-D-Modell ist ein Bild plus zwei skalare Regler a,b∈[0,1])
• HALCON-Äquivalent: compactness (Bedeutung und Parameter sind in der HALCON-Referenz nachzulesen)
• GPU: nur innerhalb einer Kette (lbl_compactness). In einer Pipeline, deren Nachbarstufe ebenfalls auf der GPU läuft, bleibt es auf der GPU. Ein Einzelaufruf läuft auch mit device="cuda" auf der CPU (gemessen: allein schlägt es die CPU nicht)

*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).*
Stufen (die vorangehenden Ops → dieser Op, von links nach rechts):
▸ compactness: Stufen (Doku-Website)
Kompaktheit max(1, Umfang² / (4π · Fläche)). Für einen Kreis ist sie 1 und wächst mit Länglichkeit, Rauheit und Löchern — ohne obere Schranke. Dieselbe Größe wie HALCONs compactness (Shape factor for the compactness of a region.).
★Bis 2026-09-26 wurde /10 gerechnet und mit min(1.0, ...) abgeschnitten -- ein Behelf, um den Wert in [0,1] zu halten, doch jede Form mit Umfang²/(4π·Fläche) über 10 (bei 2 px Breite ein Kratzer ab Länge 80) wurde komplett auf 1.0 gedrückt. Gerade bei Kratzern und Rissen, den Regionen, die man am meisten sehen will, kam also „andere Form, gleiche Zahl“ heraus. Der Wertebereich [0,1] war nie Teil des feature-Vertrags (elliptic_axis liefert 6.35, r3_region_features 18.1), es gab also keinen Grund, ihn zu stauchen -- docs/hardening/compactness-saturated-at-one.md.
Wie bei HALCON wird mit max(1, C) nach unten abgeschnitten (weil die Pixelnäherung unter 1 fallen kann. HALCON 23.11 beschreibt compactness so: „C = max(1, C′)“, „The value of C is clipped to 1.0“, und die Zusicherung zum Rückgabewert lautet Compactness >= 1.0 || Compactness == 0). Kreisscheiben mit Radius 3 bis 6 ergeben 1.0. Ist die Region leer, 0.
★Bis 2026-11-05 (adversariale Prüfung, Runde 2, P2) stand in dieser Beschreibung „hier wird nicht abgeschnitten“ -- die Implementierung verwendet seit 2026-09-26 HALCONs max(1, C), nur der Beschreibungstext war auf dem früheren Stand stehen geblieben.
a, b werden nicht verwendet.
• Leitfaden zur Familie gallery2d_features
• 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.
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.
threshold 0.50 0.50 compactness 0.50 0.50
▸ Diese Pipeline laden · Laden & ausführen
• gallery2d_features — py -3.11 examples/gallery2d_features.py
• shape_factors_closed_form — py -3.11 examples/shape_factors_closed_form.py
feature als Eingabe)features)effective_bit_depth · blob_count · area_frac · count_contours · total_length · vol_count · sk_euler · sk_entropy_feat
*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.