feature_register op• Data kinds: voxel → keypoints
• Call: import fullseye as fs; fs.ledger.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2) (implementation को सीधे call करना हो तो import feat_harris; feat_harris.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2), registry से लेना हो तो ops3d.get("harris3d_keypoints"))
• Ledger के ज़रिए return value: fullseye.ledger.harris3d_keypoints(...) केवल घोषित out type keypoints का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.harris3d_keypoints.raw(...) का उपयोग करें, या feat_harris.harris3d_keypoints को सीधे call करें।
• मूल function का return: (keypoints, scores)
• GPU: इस op का GPU path है (device="cuda")
3D Harris keypoint detection (2D Harris corner detection का 3D संस्करण)।
voxel density field के 3D gradient g=(gz,gy,gx) से हर voxel पर local structure tensor M=Σ_w w·g gᵀ (3x3 symmetric, gaussian window sigma_i से weighted sum) बनाकर cornerness मापता है। जिन voxels का response आसपास में local maximum और threshold से ऊपर हो, वे keypoint बनते हैं (initial pose estimate के बिना detect हो सकते हैं, इसलिए बड़े rotation + partial overlap में correspondence या ICP को coarse init देने में काम आते हैं)।
cornerness के माप:
• "mineig" (default): 3x3 symmetric matrix का न्यूनतम eigenvalue (Shi-Tomasi शैली)। सभी 3 दिशाओं में संरचना हो (= corner) तो न्यूनतम eigenvalue उतना बड़ा। closed form (trigonometric विधि) से निकाला जाता है। k tuning की ज़रूरत नहीं और robust (मापा गया mean repeatability 85%, min 72.5%)।
• "harris": R = det(M) - k·tr(M)³। 3D में 3 eigenvalues होते हैं, इसलिए tr की 3 घात से dimensionless बनाया जाता है। ★ध्यान दें: density voxel के corners पर det/tr³ अनुपात अनुभव से केवल ~0.01 होता है, इसलिए 2D standard k=0.04-0.06 पर सभी responses negative हो जाते हैं और 0 detect होते हैं। 3D में k≈0.005 चाहिए (मापा गया: k=0.005 पर mean 89.6%)।
Arguments:
vol: (D,H,W) density voxels (numpy / torch)। points_to_voxel का output माना गया है।
device: torch device ("cpu" आदि)। सभी operations इसी device पर चलते हैं।
k: Harris का sensitivity coefficient (केवल response="harris" पर प्रभावी)। 3D density field में
लगभग 0.005 (2D परंपरा का 0.04-0.06 3D में बहुत तेज़ है और 0 detect होते हैं)।
nms: non-maximum suppression की cubic window की भुजा (odd, standard 3 = 3x3x3 neighbourhood)।
topn: response के घटते क्रम में लौटाए जाने वाले keypoints की अधिकतम संख्या।
sigma_i: structure tensor की integration window (gaussian) का standard deviation (voxel)।
response: "mineig" (default, robust) या "harris"।
rel_thresh: response threshold = rel_thresh × valid क्षेत्र का अधिकतम response (noise दबाने के लिए)।
border: किनारे से border voxels के भीतर detect नहीं करता (gradient के edge effect हटाने के लिए)।
Returns:
keypoints: (M,3) float64। keypoints के voxel coordinates (z,y,x) (sobel3d जैसा ही
axis क्रम)। response के घटते क्रम में, अधिकतम topn।
responses: (M,) float64। संबंधित response मान (घटते क्रम में)।
निर्भरता: sobel3d (3D gradient), _gauss3d (integration window smoothing)। दोनों device पर चलते हैं।
• 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
keypoints को input के रूप में लेते हैं)fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error
feature_register)iss_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot
*Provenance: feat_harris.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.