matching op• 数据种类:image → match
• 调用:fullseye.apply(img, "shape_locate", a=0.5, b=0.5)(2-D 的模型是一张图 + 两个标量旋钮 a,b∈[0,1])
• HALCON 对应:find_shape_model(其含义与参数可参考 HALCON 手册)
• GPU:无(仅 CPU 参考实现)

*图为在 128×128 合成输入上实际运行的输出。左为输入,右为输出。点云以俯视散点显示(亮度 = z),一维序列为折线,体数据为沿 z 的最大值投影,视频为中间帧,复数图像为幅值;无法成像的返回值直接显示数值。*
*旋钮 a 不改变输出(实测: 0.1 / 0.5 / 0.9 相同)。*
*旋钮 b 不改变输出(实测: 0.1 / 0.5 / 0.9 相同)。*
考虑旋转的模板匹配(基于形状的匹配)。相当于 HALCON 的 find_shape_model(Find the best matches of a shape model in an image.)。
a、b 未使用——模板与 _ncc_locate 一样用 set_match_template 预先登记。把模板从 0°〜330° 以 30° 为步长旋转,分别计算 _ncc_map(NCC),并以 [相关值, y, x, 角度] 返回所有位置、所有角度中最佳的相关。由于角度步长较粗(30°),达不到 HALCON 的 find_shape_model 那样连续的角度精度——用于大致的方向检测(要指定步长并细化到步长以下,用 matching.shape_locate_fine)。未设置模板时为 [0,0,0,0]。
旋转模板的四角不计入相关(★2026-11-09 op 检查)。以 reshape=False 旋转时四角来自模板之外,因此用掩膜去掉这些像素,只用剩下的像素计算 Pearson 相关(matching._MaskedNCC)。以前把填 0 的四角也当作模板的一部分计算相关,所以在背景不为 0 的图像上,即使角度正确得分也会结构性地偏低(背景 0.5、旋转 30°:0.7794 → 修正后 0.981)。只搜索旋转后模板的有效像素全部落在图像内的位置(角度 0 时与 ncc_locate 的 full-overlap 相同,得分在舍入误差内一致)。含 NaN / inf 的图像抛出 FsValueError(在流水线路径 ops.RT / run_stages 中返回 4 个元素的 [0,0,0,0] 并记录到 fs.fallbacks())。
• gallery2d_contour_measure 族使用指南
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
下面的程序已确认可以运行(与图相同的输入)。在 Studio 帮助中,此块会变成按钮,可当场加载并运行。
shape_locate 0.50 0.50
• gallery2d_contour_measure — py -3.11 examples/gallery2d_contour_measure.py
• poc_template_tracking — py -3.11 examples/poc_template_tracking.py
match 作为输入)matching)*Provenance: ops.py — 2D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.