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:無(僅 CPU 參考實作)
chamfer / 距離場匹配(對部分可見與遮蔽穩健)。voxel × chamfer 列。
將模板的邊緣點放置在場景邊緣的 EDT 上(每個體素到最近邊緣的距離)。最小化距離總和。得分(pos)=Σ_{模板邊緣}DT_scene(pos+邊緣)/n。 越低匹配越好。即使某些邊緣點缺失,它也能工作(比 NCC 更能抵抗遮蔽)。相關性 (conv3d) 始終是 GPU。距離場為 edt="scipy"(CPU,預設)或 edt="jfa"(edt_jfa,所有 GPU,無 CPU 往返,與 scipy 完全匹配)。傳回值[倒角距離,d,h,w]。
步驟:用|∇| 邊緣體素> thr·max|∇| 在兩卷中(thr 是最大值 與斜率的相對比率,其中斜率是“sobel3d”)。為場景邊緣建立距離變換DT並使用模板將邊二進制值體積 Conv3d 到內核,並將其除以邊數“n”。傳回值「[dist,z,y,x]」的「dist」是「模板的每個體素邊緣,直到最近的場景邊緣」。「平均距離(以體素為單位)」和 0 是完美匹配。位置為模板中心(T//2)的場景座標 Integer(subvoxel 沒有細化。如果需要,請前往refine_translation_lk。由於它是角約定減去 T//2)。模板不完全適合的位置用最大值+1填充並排除。如果範本沒有邊緣(「thr」太高等),則分數將全為0,並傳回索引(0,0,0)。如果場景中沒有邊緣,則距離場沒有意義(較低的“thr”)。edt="jfa" 使用edt_jfa 並在device 上完成,否則在 scipy (CPU) 上完成。如果模板中沒有邊,則分數將全為 0,並傳回有效範圍(pd, ph, pw) 的開頭。
空輸入(帶有 0 個元素的“scene”)會導致 ValueError。
• 範例資料目錄(下載 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.