medial op• 資料種類:voxel → voxel
• 呼叫: import fullseye as fs; fs.ledger.skeleton_junctions3d(vol)(要直接呼叫實作,import medial; medial.skeleton_junctions3d(vol);從台帳取用則 ops3d.get("skeleton_junctions3d"))
以體素遮罩回傳 3D 骨架的分叉點(joint,26 鄰域中骨架 voxel 不少於 3 個)。
非骨架的輸入(帶 interior 的塊)會先用 skeletonize_vol 細化後再量測。2D 的 junctions_skeleton 的 3D 版。用於把血管、多孔質、網路狀結構圖化(node 擷取)。只想要分支度的彙總時, topology_signature 會以 dict 回傳。
注意(honest): 26 鄰域度在分支附近可能因對角鄰接而偏大(離散骨架的已知性質)。統計分支 *個數* 時,請把此遮罩依連通元件歸併。
步驟: _ensure_skeleton — 把輸入轉為 bool,只要有 1 個 6 鄰域(面鄰接)全為前景的 interior voxel,就視為「不是骨架」,先套用 skeletonize_vol (skimage Lee 法)。之後用 3x3x3 的全 1 核(中心 0)做摺積(mode="constant",外側為 0),統計各 voxel 的 26 鄰域內的骨架 voxel 數(度), 回傳 skel & (度 >= 3)。
回傳值: 與輸入同形狀的 bool 陣列。沒有前景時全為 False。骨架 voxel 以外必為 False。座標可用 np.argwhere 依 (z, y, x) 順序取得。
檢驗(ValueError): 不是 3-D、空陣列、含 NaN/Inf 的 float 輸入。在沒有 scikit-image 的環境中需要細化時為 ImportError。
注意: 即使輸入已經是骨架,每次也會進行 interior 判定(若是細骨架,細化會被 skip)。要計數時,使用 vol_label(mask, 26) 的元件數。分成分支用 skeleton_branches3d,端點用 skeleton_endpoints3d。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• medial_topology — py -3.11 examples_3d/medial_topology.py
voxel 作為輸入)voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa
medial)distance_ridge · skeletonize_vol · medial_axis_points · topology_signature · medial_match · skeleton_endpoints3d · skeleton_prune3d · skeleton_branches3d
*Provenance: medial.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.