feature_register op• 資料種類:points × normals → descriptor
• 呼叫: import fullseye as fs; fs.ledger.shot_descriptor(points, normals, kp_idx, tree, radius, n_azim=8, n_elev=2, n_rad=2, n_cos=11)(要直接呼叫實作,import feat_shot; feat_shot.shot_descriptor(points, normals, kp_idx, tree, radius, n_azim=8, n_elev=2, n_rad=2, n_cos=11);從台帳取用則 ops3d.get("shot_descriptor"))
SHOT 描述子(Tombari 2010)。在每個關鍵點建立 LRF,取球形支撐域。
將支撐域劃分為徑向2×仰角2×方位8=32 個空間單元,在各單元中將「LRF z 軸與鄰域點法線的 cos 角」以 quadrilinear 內插累積到 n_cos=11 個 bin 的直方圖 → 對 32×11=352 維做 L2 正規化。回傳值 (Kp,352)。無法求 LRF 的點為零向量。
Raises ValueError: normals 的列數與 points 不一致時(混入其他點雲的法線會使鄰域 index 越界並產生原始 IndexError — 與 compute_fpfh 同類)。
參數: points (N,3)、normals (N,3) 單位法線、kp_idx 為關鍵點的點索引(iss_keypoints 的輸出)、tree 為由 points 建構的 scipy.spatial.cKDTree(由呼叫端準備)、radius 為支撐半徑(同時用於 LRF 估計與鄰域收集)。改變 n_azim、n_elev、n_rad、n_cos 後維數為 n_azim*n_elev*n_rad*n_cos。
步驟: LRF 取帶距離權重 max(radius-d, 0) 的共變異數的特徵向量(x=最大、z=最小特徵值),對齊到鄰域多數派的符號並化為右手系。鄰域少於 5 點或 LRF 退化的關鍵點保持零向量(在匹配側被排除)。各鄰域點在徑向、仰角(arccos(qz/r)/π)、法線 cos 角上以 bin 中心 0.5 為基準線性內插,方位在圓環上 wrap 後累積,最後逐列 L2 正規化。回傳值為 float64 (len(kp_idx), n_azim*n_elev*n_rad*n_cos)(預設 352)。比較 2 個點雲時,兩側須使用相同的 radius 與相同的法線符號規則(法線方向反轉會使 cos 角直方圖翻轉)。register_shot 將此函式套用於兩個點雲, 一直執行到匹配與 RANSAC。
• 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
descriptor 作為輸入)fuse_to_voxel · shape_distance
feature_register)harris3d_keypoints · iss_keypoints · compute_fpfh · 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.