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"))
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 है)।
• 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.