iss_keypoints — 3D 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 है)।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout

संदर्भ (sample data, साहित्य)

• 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 के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• feature_register — py -3.11 examples_3d/feature_register.py

वे अगले ops जिनसे type जुड़ता है (indices को input के रूप में लेते हैं)

fuse_to_voxel

इसी category के (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.