feature_register op• 数据种类:points → indices
• 调用: import fullseye as fs; fs.ledger.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8)(要直接调用实现,import feat_shot; feat_shot.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8);从台账取用则 ops3d.get("iss_keypoints"))
ISS(Intrinsic Shape Signatures,相当于 3D Harris)关键点检测。
以局部协方差的最小特征值 λ3 作为 saliency,只把特征值 distinct(方向 well-defined)的点作为候选,并用 NMS 稀疏地选取。旋转不变。返回值=点 index 数组。
参数:
• points (N,3)。radius: saliency 用的邻域球半径(与点云单位相同)。
• nms_radius: 非极大值抑制的距离。None 时为 0.6*radius。
• gamma21、gamma32: 特征值比 λ2/λ1、λ3/λ2 的上限(默认 0.99)。两者都
小于此值的点才是候选(排除比接近 1=各向同性、方向无法确定的点)。
• max_kp: 返回的上限。min_neighbors: 邻域少于此数的点不作为候选(默认 8)。
步骤: 在各点收集 radius 内的邻域,求以关注点为原点的 2 阶矩矩阵 (qᵀq)/n 的特征值 λ1≥λ2≥λ3(λ1 在 1e-12 以下则排除)。以 λ3 作为 saliency 按降序扫描,舍弃距已采用点小于 nms_radius 的点的贪心 NMS。返回值为 int64 的点索引数组(saliency 降序)。无候选时长度为 0。
注意: 邻域以关注点为中心(而非质心)。平面上的点,其关注点也在同一平面上,因此 λ3 理论上为 0,舍入残渣(λ3/λ1 ≤ 1e-9)不作为候选。这是对所有点做邻域搜索的 Python 循环,因此超过数万点的点云应先用 voxel_grid_downsample 抽稀后再使用。直接作为 shot_descriptor 的关键点输入,register_shot 以 saliency 半径 0.6*radius、NMS 半径 0.3*radius 调用(radius 为 register_shot 的支撑半径)。
• blas_threads_and_memory — 矩阵分解为何慢 —— BLAS 线程、缓存、内存布局
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• feature_register — py -3.11 examples_3d/feature_register.py
indices 作为输入)feature_register)harris3d_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot
*Provenance: feat_shot.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.