feature_register op• Data kinds: points → indices
• Call: 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) (implementation को सीधे call करना हो तो import feat_shot; feat_shot.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8), registry से लेना हो तो ops3d.get("iss_keypoints"))
• GPU: नहीं (केवल CPU reference implementation)
ISS (Intrinsic Shape Signatures, 3D Harris के समकक्ष) keypoint detection।
local covariance के न्यूनतम eigenvalue λ3 को saliency मानता है, केवल distinct eigenvalues वाले points (orientation well-defined) को candidate बनाता है और NMS से विरल रूप से चुनता है। rotation-invariant। लौटाया गया मान = point index array।
Arguments:
• points (N,3)। radius: saliency के लिए neighbourhood sphere की त्रिज्या (point cloud जैसी ही इकाई)।
• nms_radius: non-maximum suppression की दूरी। None होने पर 0.6*radius।
• gamma21, gamma32: eigenvalue अनुपात λ2/λ1, λ3/λ2 की ऊपरी सीमा (default 0.99)। जिन points पर दोनों इससे
कम हों वही candidate हैं (अनुपात 1 के पास = isotropic, जिनकी orientation तय नहीं होती, ऐसे points हटाए जाते हैं)।
• max_kp: लौटाने की ऊपरी सीमा। min_neighbors: इससे कम neighbours वाले points candidate नहीं बनते (default 8)।
प्रक्रिया: हर point पर radius के भीतर के neighbours इकट्ठा करके, लक्ष्य point को origin मानकर 2nd-order moment matrix (qᵀq)/n के eigenvalues λ1≥λ2≥λ3 निकाले जाते हैं (λ1 के 1e-12 या कम होने पर बाहर)। λ3 को saliency मानकर घटते क्रम में scan किया जाता है, और greedy NMS पहले से अपनाए गए point से nms_radius से कम दूरी वाले points हटा देता है। लौटाया गया मान int64 point index array है (saliency के घटते क्रम में)। candidate न हों तो length 0। ध्यान दें: neighbours को लक्ष्य point पर centre किया जाता है (centroid पर नहीं)। plane पर स्थित point के लिए लक्ष्य point भी उसी plane पर होता है, इसलिए सिद्धांततः λ3 0 होता है, और rounding के अवशेष (λ3/λ1 ≤ 1e-9) को candidates से हटा दिया जाता है। यह हर point पर neighbourhood search करने वाला Python loop है, इसलिए दसियों हज़ार से अधिक points वाले cloud को पहले voxel_grid_downsample से कम करके इस्तेमाल करें। यह सीधे shot_descriptor के keypoint input से जुड़ता है, और register_shot इसे saliency radius 0.6*radius और NMS radius 0.3*radius के साथ बुलाता है (radius register_shot का support radius है)।
खाली इनपुट (points में 0 तत्व) पर ValueError उठता है।
• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• feature_register — py -3.11 examples_3d/feature_register.py
indices को input के रूप में लेते हैं)feature_register)harris3d_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot
*Provenance: feat_shot.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.