match_hough_3d — 3D match_localize op

• Data kinds: voxel × voxel → position

• Call: import fullseye as fs; fs.ledger.match_hough_3d(scene, template, device='cpu', ndir=26, mc=0.05, topk=1, nms=3, subvoxel=True) (implementation को सीधे call करना हो तो import match3d; match3d.match_hough_3d(scene, template, device='cpu', ndir=26, mc=0.05, topk=1, nms=3, subvoxel=True), registry से लेना हो तो ops3d.get("match_hough_3d"))

• Ledger के ज़रिए return value: fullseye.ledger.match_hough_3d(...) केवल घोषित out type position का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.match_hough_3d.raw(...) का उपयोग करें, या match3d.match_hough_3d को सीधे call करें।

• GPU: इस op का GPU path है (device="cuda")

उपयोग

generalized Hough 3D (Ballard R-table voting)। voxel × Hough column।

GHT को GPU-native रूप में हर orientation bin के correlations के योग के रूप में formulate करता है:

accumulator A(t) = Σ_bin ( scene_bin ⋆ template_bin )। हर edge अपनी gradient दिशा के अनुसार vote करता है, और गायब edges केवल peak को नीचे करते हैं (occlusion और clutter के प्रति robust)। shape-based (continuous dot products का एक ही हल) के विपरीत, इसकी विशेषता यह है कि यह vote accumulator लौटाता है, इसलिए NMS से कई peaks = कई instances मिल सकते हैं। Return value (topk,4) का [votes, d, h, w] है (votes घटते क्रम में)।

प्रक्रिया: दोनों volume के unit gradients (mc, sobel3d के raw output पर threshold है) को ndir reference दिशाओं में से सबसे नज़दीकी पर quantise किया जाता है, और हर direction bin के लिए "scene के उस bin का 2-valued field ⋆ template के उस bin का 2-valued field" conv3d से जोड़ा जाता है। Template के valid edges की संख्या से भाग दिया जाता है, इसलिए votes [0, 1] में हैं; 1 का अर्थ सभी edges का match है।

• ndir: 26 या कम पर 26-neighbourhood दिशाओं की list के पहले ndir लिए जाते हैं (26 से कम पर दिशाएँ एकतरफा होती हैं); 27 या अधिक पर

fibonacci sphere पर uniform। दिशाएँ जितनी मोटी, rotation के प्रति उतनी सहनशीलता, पर false peaks भी उतने अधिक।

• Return value (topk, 4) की हर row [votes, z, y, x] है, votes घटते क्रम में। Coordinates template center (T//2)

के scene coordinates हैं; subvoxel=True पर ±2 neighbourhood का centroid।

• nms: हर peak लेने के बाद ±nms voxel के cube को −1 से दबाकर अगला खोजा जाता है। पास-पास के

कई instances के लिए nms छोटा रखें।

• Template में कोई edge न हो तो पूरा 0 वाला (topk,4)। जहाँ template पूरा नहीं समाता वे positions 0 हैं।

आगे: हर peak को refine_translation_lk / refine_peak_newton से refine करें।

संदर्भ (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 करते हैं)

• matching_localize — py -3.11 examples_3d/matching_localize.py

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

refine_peak_newton · refine_translation_lk · refine_lm · fuse_to_voxel

इसी category के (match_localize)

match_shape_3d · match_chamfer_3d · match_curvature_3d · match_mip_2d · match_points_ncc


*Provenance: match3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.