match_localize op• Datenarten: voxel × voxel → position
• Aufruf: import fullseye as fs; fs.ledger.match_hough_3d(scene, template, device='cpu', ndir=26, mc=0.05, topk=1, nms=3, subvoxel=True) (die Implementierung direkt: import match3d; match3d.match_hough_3d(scene, template, device='cpu', ndir=26, mc=0.05, topk=1, nms=3, subvoxel=True); aus dem Register: ops3d.get("match_hough_3d"))
• Rückgabewert über das Register: fullseye.ledger.match_hough_3d(...) liefert nur den Wert des deklarierten Out-Typs position (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.match_hough_3d.raw(...) oder rufe match3d.match_hough_3d direkt auf.
• GPU: Dieser Operator hat einen GPU-Pfad (device="cuda")
Generalisierte Hough-Transformation in 3-D (Ballard-R-Tabellen-Abstimmung). Die Spalte Voxel × Hough.
Formuliert GHT GPU-nativ als Summe der Korrelationen pro Orientierungs-Bin:
accumulator A(t) = Σ_bin ( scene_bin ⋆ template_bin ). Jede Kante stimmt entsprechend ihrer Gradientenrichtung ab, und fehlende Kanten senken nur das Maximum (robust gegen Verdeckung und Clutter). Anders als shape-based (eine einzige Lösung kontinuierlicher Skalarprodukte) liegt die Abgrenzung darin, dass es den Stimmen-accumulator zurückgibt, sodass NMS mehrere Maxima = mehrere Instanzen liefert. Rückgabewert [votes, d, h, w] der Form (topk,4) (votes absteigend).
Ablauf: die Einheitsgradienten beider Volumes (mc ist ein Schwellwert auf die Rohausgabe von sobel3d) werden auf die nächste von ndir Referenzrichtungen quantisiert, und pro Richtungs-Bin wird "das 2-wertige Feld dieses Bins der Szene ⋆ das 2-wertige Feld dieses Bins des Templates" per conv3d aufsummiert. Es wird durch die Zahl gültiger Template-Kanten geteilt, daher liegen die votes in [0, 1]; 1 heißt, alle Kanten stimmen überein.
• ndir: bis 26 werden die ersten ndir Einträge der Liste der 26-Nachbarschaftsrichtungen genommen (unter 26 sind die Richtungen verzerrt), ab 27
gleichmäßig auf einer fibonacci-Kugel. Je gröber die Richtungen, desto toleranter gegen Rotation, aber desto mehr falsche Maxima.
• Jede Zeile des Rückgabewerts (topk, 4) ist [votes, z, y, x], votes absteigend. Die Koordinaten sind die Szenenkoordinaten des Template-Zentrums (T//2);
bei subvoxel=True der Schwerpunkt der ±2-Nachbarschaft.
• nms: nach jedem genommenen Maximum wird ein Würfel von ±nms Voxeln auf −1 gesetzt, bevor das nächste gesucht wird. Für nahe beieinander liegende
mehrere Instanzen nms klein wählen.
• Hat das Template keine Kanten, ein (topk,4) voller 0. Positionen, an denen das Template nicht vollständig passt, sind 0.
Nachfolgend: jedes Maximum mit refine_translation_lk / refine_peak_newton verfeinern.
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• matching_localize — py -3.11 examples_3d/matching_localize.py
position als Eingabe)refine_peak_newton · refine_translation_lk · refine_lm · fuse_to_voxel
match_localize)match_shape_3d · match_chamfer_3d · match_curvature_3d · match_mip_2d · match_points_ncc
*Provenance: match3d.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.