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.