skeleton_junctions3d — 3D medial op

• Datenarten: voxel → voxel

• Aufruf: import fullseye as fs; fs.ledger.skeleton_junctions3d(vol) (die Implementierung direkt: import medial; medial.skeleton_junctions3d(vol); aus dem Register: ops3d.get("skeleton_junctions3d"))

Verwendung

Liefert die Knoten eines 3-D-Skeletts (drei oder mehr Skelettvoxel in der 26er-Nachbarschaft) als Voxelmaske.

Eingaben, die kein Skelett sind (Klumpen mit Innerem), werden vor der Messung mit skeletonize_vol ausgedünnt. 3D-Version von junctions_skeleton aus 2D. Dient dazu, Blutgefäße, poröse Medien und netzwerkartige Strukturen als Graph darzustellen (Knotenextraktion). Wenn nur die aggregierten Verzweigungsgrade gebraucht werden, liefert topology_signature sie als dict.

Achtung (honest): Der Grad in der 26-Nachbarschaft kann durch diagonale Nachbarschaft nahe Verzweigungen zu hoch ausfallen (bekannte Eigenschaft diskreter Skelette). Zum Zählen der *Anzahl* der Verzweigungen diese Maske zu Zusammenhangskomponenten zusammenfassen.

Ablauf: _ensure_skeleton wandelt die Eingabe in bool um; gibt es auch nur 1 Inneres-Voxel, dessen 6-Nachbarschaft (Flächennachbarn) vollständig Vordergrund ist, gilt die Eingabe als "kein Skelett", und zuerst wird skeletonize_vol (skimage-Lee-Verfahren) angewendet. Danach zählt eine Faltung mit einem 3x3x3-Kernel mit lauter Werten 1 (Mitte 0) (mode="constant", außen 0) die Skelett-Voxel in der 26-Nachbarschaft jedes Voxels (Grad), und skel & (Grad >= 3) wird zurückgegeben.

Rückgabewert: bool-Array derselben Form wie die Eingabe. Ohne Vordergrund komplett False. Alles außer Skelett-Voxeln ist immer False. Koordinaten in (z, y, x)-Reihenfolge erhält man mit np.argwhere.

Prüfung (ValueError): Eingabe kein 3-D, leeres Array oder float mit NaN/Inf. ImportError, wenn ohne scikit-image eine Ausdünnung nötig wird.

Hinweis: Die Prüfung auf Inneres läuft jedes Mal, auch bei Eingaben, die schon Skelette sind (bei einem dünnen Skelett wird die Ausdünnung übersprungen). Zum Zählen die Komponentenzahl von vol_label(mask, 26) verwenden. Aufteilen in Äste macht skeleton_branches3d, Endpunkte liefert skeleton_endpoints3d.

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.

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

• medial_topology — py -3.11 examples_3d/medial_topology.py

Typkompatible Folge-Operatoren (nehmen voxel als Eingabe)

voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa

Gleiche Kategorie (medial)

distance_ridge · skeletonize_vol · medial_axis_points · topology_signature · medial_match · skeleton_endpoints3d · skeleton_prune3d · skeleton_branches3d


*Provenance: medial.py — 3D 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.