curvature op• 数据种类:points → descriptor
• 调用: import fullseye as fs; fs.ledger.shape_index(points, k=25, normals=None)(要直接调用实现,import curvature3d; curvature3d.shape_index(points, k=25, normals=None);从台账取用则 ops3d.get("shape_index"))
Koenderink 的 shape index s∈-1,1。→ (N,)。
脐点/平面判定相对于曲率尺度(无绝对阈值)。平缓的凸/凹(即使曲率极小) 也保留符号=凹凸,平面仅对相对于整个数据的曲率尺度为 0 的点设 s=0。
normals(带朝向的参考法线, (N,3))未指定时开放曲面的凹/凸符号不确定(以凸的幅值报告)。传入带朝向的法线后会与全局朝向一致,给出正确的符号(凹球=cup → -1)。
计算(每个点,与 principal_curvatures 相同的拟合):
• 平面判定: curvedness sqrt((k1² + k2²) / 2) 小于全部点 curvedness 的中位数 × 1e-3 时 s = 0。中位数为 0(无曲率信号)时全部点为 0。
• 脐点判定: |k1 - k2| < 1e-2 × (|k1| + |k2|) 时 s = sign(k1 + k2)(严格为 ±1)。
• 其他情况: s = (2/π) · arctan((k1 + k2) / (k1 - k2))。
• 阈值不是绝对值而是相对于整个数据的曲率尺度,因此即使形状相同,被视为平面的点也会随与其他点的混合情况而变化。以对单个点云进行分类为前提使用。
• 邻域少于 5 个点的点 k1 = k2 = 0 → 平面(0)。k 截断为 N-1。
• normals 须为 (N,3) 且各行有限、非零(ValueError)。未指定时开放曲面的符号不确定(凸侧)。
• 不包含弯曲的强度。若也需要强度,把 principal_curvatures 的 2 个值排成 (N,2) 后传给 curvature_to_shape_index。
• blas_threads_and_memory — 矩阵分解为何慢 —— BLAS 线程、缓存、内存布局
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• curvature_grasp — py -3.11 examples_3d/curvature_grasp.py
• itokawa_curvature — py -3.11 examples_3d/itokawa_curvature.py
descriptor 作为输入)fuse_to_voxel · shape_distance
curvature)principal_curvatures · mean_curvature · gaussian_curvature · estimate_normals
*Provenance: curvature3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.