match_localize op• 数据种类:voxel × voxel → position
• 调用: import fullseye as fs; fs.ledger.match_chamfer_3d(scene, template, device='cpu', thr=0.3, edt='scipy')(要直接调用实现,import match3d; match3d.match_chamfer_3d(scene, template, device='cpu', thr=0.3, edt='scipy');从台账取用则 ops3d.get("match_chamfer_3d"))
• 经台账调用的返回值: fullseye.ledger.match_chamfer_3d(...) 只返回**声明的 out 类型 position 的值**(底层函数还会返回辅助信息)。需要被丢弃的部分时,使用 fullseye.ledger.match_chamfer_3d.raw(...),或直接调用 match3d.match_chamfer_3d。
• GPU:该算子有 GPU 路径(device="cuda")
chamfer / 距离场匹配(对部分可见与遮挡稳健)。voxel × chamfer 列。
> 以下的详细说明为原文 —— 摘要与标题已翻译。
シーンのエッジの EDT(各 voxel から最近エッジまでの距離)に、テンプレのエッジ点を載せて
距離和を最小化。score(pos)=Σ_{template edge} DT_scene(pos+edge)/n。低いほど良い一致。
エッジ点の一部が欠けても効く(NCC より遮蔽に強い)。相関(conv3d)は常に GPU。距離場は
edt="scipy"(CPU、既定)か edt="jfa"(edt_jfa、全 GPU で CPU 往復なし。scipy と厳密一致)。
返り値 [chamfer 距離, d, h, w]。
手順: 両 volume で `|∇| > thr·max|∇| の voxel をエッジにする(thr` は各 volume の最大
勾配に対する 相対比、勾配は `sobel3d`)。scene エッジの距離変換 DT を作り、テンプレの
エッジ 2 値 volume をカーネルに conv3d した値をエッジ数 `n` で割る。
返り値 `[距離, z, y, x]` の距離は「テンプレのエッジ 1 voxel あたり、最寄り scene エッジまでの
平均距離(voxel 単位)」で 0 が完全一致。位置は テンプレ中心 (T//2) の scene 座標で
整数(subvoxel 精緻化は無い。要るなら `refine_translation_lk` へ。corner 規約なので
T//2 を引く)。テンプレが完全に収まらない位置は最大値+1 で埋めて除外する。
テンプレにエッジが無い(`thr` が高すぎる等)と score が全 0 になり index (0,0,0) が返る。
scene にエッジが無い場合の距離場は意味を持たない(`thr` を下げる)。
`edt="jfa" は edt_jfa を使い device` 上で完結、それ以外は scipy(CPU)。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• matching_localize — py -3.11 examples_3d/matching_localize.py
position 作为输入)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 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.