medial op• 数据种类:voxel → points
• 调用: import fullseye as fs; fs.ledger.medial_axis_points(vol, min_radius=0.0)(要直接调用实现,import medial; medial.medial_axis_points(vol, min_radius=0.0);从台账取用则 ops3d.get("medial_axis_points"))
• 经台账调用的返回值: fullseye.ledger.medial_axis_points(...) 只返回声明的 out 类型 points 的值(底层函数还会返回辅助信息)。需要被丢弃的部分时,使用 fullseye.ledger.medial_axis_points.raw(...),或直接调用 medial.medial_axis_points。
• 底层返回: (points, radii)
把 medial 体素的坐标与局部半径(= 该点的 EDT 值)变成点群。返回 (points, radius)。
把粗的部分呈面状、细的部分呈线状分布的 medial 点,以 (M,3) 坐标(z,y,x)及各自的局部半径 (M,) 返回。半径最大的点指向形状最"内侧"= 中心。
Args:
vol: 二值 voxel(bool / 0-1 的 3D)。
min_radius: 排除半径不超过此值的点(抑制噪声)。
Returns:
points (float64, (M,3)): medial voxel 坐标(z, y, x)。
radius (float64, (M,)): 各点的 EDT 值(= 局部内切半径)。
步骤: 返回由 distance_ridge(vol, min_radius) 得到的 ridge_mask 的 np.argwhere (数组 index,行按 z-major 的字典序,确定性)以及该位置的 edt 值。坐标是 voxel index,不乘 spacing(需要物理坐标时由调用方计算 points * (sz, sy, sx),半径同样乘以各向同性 spacing)。
参数与校验: vol 为 3-D(非零 = 前景)。不是 3-D、空、NaN/Inf 时为 ValueError,min_radius < 0 也为 ValueError。radius 只含 > min_radius 的点(边界 voxel 的 EDT 不超过 1,因此用 min_radius=1 几乎可以去掉外壳噪声)。
边界行为: 没有前景,或全部点都不超过 min_radius 时,points 为 (0, 3)、radius 为 (0,) 的空数组(不报错)。
用途: medial_match 的半径分布、通往点云 op(smallest_sphere3 / fit_line3 等)的桥梁,用 np.argmax(radius) 取最大内切球的中心。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• medial_topology — py -3.11 examples_3d/medial_topology.py
points 作为输入)points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d
medial)distance_ridge · skeletonize_vol · topology_signature · medial_match · skeleton_junctions3d · 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.