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: nein (nur CPU-Referenzimplementierung)
Chamfer-/Distanzfeld-Matching (robust gegen Teilansichten und Verdeckung). Die Spalte Voxel × Chamfer.
Platzieren Sie den Randpunkt der Vorlage auf dem EDT des Randes der Szene (Abstand von jedem Voxel zum nächsten Rand). Minimieren Sie die Summe der Entfernungen. score(pos)=Σ_{template edge} DT_scene(pos+edge)/n. Niedriger ist die bessere Übereinstimmung. Es funktioniert auch dann, wenn einige der Kantenpunkte fehlen (sicherer gegen Okklusion als NCC). Korrelation (conv3d) ist immer GPU. Das Distanzfeld ist edt="scipy" (CPU, Standard) oder edt="jfa" („edt_jfa“, alle GPUs, keine CPU-Roundtrips, entspricht genau scipy). Rückgabewert [Fasenabstand, d, h, w].
Schritte: Kantenvoxel mit „|∇|“. > thr·max|∇| in beiden Bänden („thr“ ist das Maximum **relatives Verhältnis** zur Steigung, wobei die Steigung „sobel3d“ ist. Erstellen Sie ein Distanztransformations-DT für den Szenenrand und verwenden Sie die Vorlage Konvertieren Sie das Kantenbinärwertvolumen in den Kernel und dividieren Sie es durch die Anzahl der Kanten „n“. „dist“ des Rückgabewerts „[dist, z, y, x]“ ist „pro Voxelkante der Vorlage, bis zur nächsten Szenenkante“. „Durchschnittliche Entfernung (in Voxeleinheiten)“ und 0 passen perfekt zusammen. Die Position sind die Szenenkoordinaten des **Vorlagenzentrums (T//2)** **Integer**(subvoxel Es gibt keine Verfeinerung. Gehen Sie bei Bedarf zu „refine_translation_lk“. Da es sich um eine Eckkonvention handelt subtrahiere T//2). Positionen, bei denen die Vorlage nicht vollständig passt, werden mit dem Maximalwert +1 gefüllt und ausgeschlossen. Wenn die Vorlage keine Kanten hat („thr“ ist zu hoch usw.), beträgt die Punktzahl ausschließlich 0 und der Index (0,0,0) wird zurückgegeben. Wenn in der Szene keine Kanten vorhanden sind, hat das Distanzfeld keine Bedeutung (unteres „thr“). „edt="jfa" verwendet „edt_jfa“ und wird auf „device“ abgeschlossen, andernfalls scipy (CPU). Wenn in der Vorlage keine Kanten vorhanden sind, beträgt die Punktzahl insgesamt 0 und der Anfang des gültigen Bereichs „(pd, ph, pw)“ wird zurückgegeben.
Eine leere Eingabe („Szene“ mit 0 Elementen) führt zu einem ValueError.
• 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.