sh_descriptor — 3D describe op

• 数据种类:voxel → descriptor

• 调用: import fullseye as fs; fs.ledger.sh_descriptor(vol, L=8, nradii=12, ntheta=32, nphi=64, device='cpu')(要直接调用实现,import match3d; match3d.sh_descriptor(vol, L=8, nradii=12, ntheta=32, nphi=64, device='cpu');从台账取用则 ops3d.get("sh_descriptor"))

• GPU:该算子有 GPU 路径(device="cuda")

用法

球谐描述子。以 (半径 × 频率) 返回同心球壳的 SH 频带能量 ‖f_l(r)‖。

用 1D Fourier 描述子表示 2D 闭轮廓的 线→面提升:3D 闭曲面用 SH 表示,频带能量在旋转下只是在频带内混合 m=旋转不变(Kazhdan 2003)。用 grid_sample 采样全部 shell,与固定 SH 基底做内积 → 各频带平方和。用于 retrieval/verification 的全局签名。返回值 (nradii,L+1)。

honest 披露(2026-08-30 评审实测):球面求积为均匀 θ×φ 网格求和(不是 Gauss-Legendre), 因此值是 严格 SH 频带能量的近似(默认 32×64 下 l=4 的自内积为理论值的 ~0.62 倍,分辨率↑时收敛到 1)。match_sh_descriptor 使用 L2 归一化+余弦相似度,因此 不影响相同 ntheta/nphi 之间的比较,但不可将绝对值当作物理量使用,也不可在不同分辨率设置之间比较。

参数:vol 以 立方体(N,N,N)为前提。中心 c = (N−1)/2 与坐标归一化只使用轴 0 的长度 N, 因此非立方体时轴 1,2 的采样位置会失真(没有验证)。shell 半径为 0.2·rmax 〜 rmax = N/2 − 1 的 nradii 等分(voxel 单位),每个 shell 在 ntheta × nphi 的 (θ,φ) 网格上做 trilinear 采样。L 为最大阶数。返回值 (nradii, L+1) float32 numpy,[i, l] 是第 i 个 shell 的 l 阶能量(非负)。物体须置于 volume 中心(中心偏移会破坏旋转不变性。请先用 moment_axes 的质心对中)。scipy 的 sph_harm_y/sph_harm 在调用时 import。

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py

• shape_descriptor — py -3.11 examples_3d/shape_descriptor.py

类型可衔接的下一个算子(可接受 descriptor 作为输入)

fuse_to_voxel · shape_distance

同类别(describe)

match_sh_descriptor


*Provenance: match3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.