match_chamfer_3d — 3D 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)

Verwendung

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.

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• matching_localize — py -3.11 examples_3d/matching_localize.py

Typkompatible Folge-Operatoren (nehmen position als Eingabe)

refine_peak_newton · refine_translation_lk · refine_lm · fuse_to_voxel

Gleiche Kategorie (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.