blob_boundaries — BLOB extract op

• Datenarten: labels2d → mask

• Aufruf: import fullseye as fs; fs.ledger.blob_boundaries(labels: 'Any') -> 'np.ndarray' (die Implementierung direkt: import blob2d; blob2d.blob_boundaries(labels: 'Any') -> 'np.ndarray'; aus dem Register: opsblob.get("blob_boundaries"))

Verwendung

Objektkonturen (1 Pixel breit, bool). Auch die Grenzen zwischen benachbarten Objekten bleiben erhalten.

Es wird der innere Rand genommen (Vordergrundpixel, die an ein anderes Label als ihr eigenes grenzen), daher liegt die Kontur immer innerhalb des Objekts -- den äußeren zu nehmen hieße, Pixel des Nachbarobjekts als Kontur auszugeben.

Vorgehen: Auf das Labelbild eine 3x3-Grauwert-Erosion lo und -Dilatation hi (8er-Nachbarschaft) anwenden, dann (labels > 0) & ((lo != labels) | (hi != labels)). "Vordergrundpixel mit einer anderen Nummer in der Nachbarschaft (einschließlich Hintergrund 0)" = innerer Rand mit 1 Pixel Breite. Mit Erosion allein verschwindet die Grenze auf der Seite des Objekts mit der kleineren Nummer, daher wird auch die Dilatation betrachtet, um es symmetrisch zu machen.

• labels: 2-D-Integer-Labelbild (Ausgabe von blob_label). bool / float / negative Nummern ergeben ValueError (derselbe Vertrag wie bei blob_region).

• Rückgabewert: bool der Form (H, W). Die Ränder aller Objekte liegen auf 1 Blatt übereinander (wer sie pro Objekt trennen will, extrahiert zuerst mit blob_region und wendet es dann an).

• Bei Objekten, die den Bildrand berühren, behandelt scipy standardmäßig (reflektierender Rand) das Äußere des Bildrands als eigenen Wert, daher erscheinen Seiten entlang des Bildrands nicht als Rand.

• Bei einem dünnen Objekt von 1 Pixel Breite sind alle Pixel Rand.

Der Umfang in blob_features wird mit einer eigenen Koeffizientenmethode gemessen und stimmt nicht mit der Pixelzahl dieses Rands überein. Wer die Kontur als Polylinie nutzen will: annotate_outline_layout gibt ein geschlossenes (x, y)-Polygon zurück.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie blob_analysis

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.

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

• poc_gear_tooth_metrology — py -3.11 examples/poc_gear_tooth_metrology.py

Typkompatible Folge-Operatoren (nehmen mask als Eingabe)

blob_label · blob_distance

Gleiche Kategorie (extract)

blob_region · blob_overlay


*Provenance: blob2d.py — BLOB 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.