match_localize op• Datenarten: voxel × voxel → position
• Aufruf: import fullseye as fs; fs.ledger.match_chamfer_3d(scene, template, device='cpu', thr=0.3, edt='scipy') (die Implementierung direkt: import match3d; match3d.match_chamfer_3d(scene, template, device='cpu', thr=0.3, edt='scipy'); aus dem Register: ops3d.get("match_chamfer_3d"))
• Rückgabewert über das Register: fullseye.ledger.match_chamfer_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_chamfer_3d.raw(...) oder rufe match3d.match_chamfer_3d direkt auf.
• GPU: Dieser Operator hat einen GPU-Pfad (device="cuda")
Chamfer-/Distanzfeld-Matching (robust gegen Teilansichten und Verdeckung). Die Spalte Voxel × Chamfer.
Legt die Kantenpunkte des Templates auf die EDT der Szenenkanten (Abstand jedes Voxels zur nächsten Kante) und minimiert die Abstandssumme. score(pos)=Σ_{template edge} DT_scene(pos+edge)/n. Niedriger ist eine bessere Übereinstimmung. Funktioniert auch, wenn ein Teil der Kantenpunkte fehlt (robuster gegen Verdeckung als NCC). Die Korrelation (conv3d) läuft immer auf der GPU. Das Distanzfeld ist edt="scipy" (CPU, Standard) oder edt="jfa" (edt_jfa, komplett GPU ohne CPU-Umweg; exakt gleich wie scipy). Rückgabewert [chamfer-Abstand, d, h, w].
Ablauf: in beiden Volumes werden Voxel mit |∇| > thr·max|∇| zu Kanten (thr ist, bezogen auf den maximalen Gradienten des jeweiligen Volumes, ein relatives Verhältnis; Gradient per sobel3d). Die Distanztransformation DT der Szenenkanten wird erstellt, und das 2-wertige Kanten-Volume des Templates dient als Kernel für conv3d; das Ergebnis wird durch die Kantenzahl n geteilt. Das dist im Rückgabewert [dist, z, y, x] ist "der mittlere Abstand pro Template-Kantenvoxel (1 Voxel) zur nächsten Szenenkante (in Voxeleinheiten)", 0 ist perfekte Übereinstimmung. Die Position ist die Szenenkoordinate des Template-Zentrums (T//2), als Ganzzahl (keine Subvoxel-Verfeinerung; falls nötig an refine_translation_lk; corner-Konvention, daher T//2 abziehen). Positionen, an denen das Template nicht vollständig passt, werden mit Maximum+1 gefüllt und ausgeschlossen. Hat das Template keine Kanten (thr zu hoch usw.), ist der score überall 0 und index (0,0,0) wird zurückgegeben. Hat die Szene keine Kanten, ist das Distanzfeld bedeutungslos (thr senken). edt="jfa" nutzt edt_jfa und läuft vollständig auf device, sonst scipy (CPU).
• 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_curvature_3d · match_hough_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.