B15 · 战场网格位置 · 实验记录与相关篇目
B15 · 战场网格位置原 B06 · 保存标定与单图配准

输入截图和保存的标定,输出 137 格的位置。9 月 8 日更新代码入口;文中的参考点误差、评分比较与计时保留原测量,没有重跑。

前面已经能在截图中提出生物位置候选。现在换一个问题:怎样把这些图像位置换成战场上的格子坐标?《英雄无敌:上古纪元》的战场是斜视的六边形网格;我们用审核过的角点做一次标定,再把规则网格投影到后续截图中。可见格线会与岩石、生物轮廓、阴影和特效混在一起,不能只把所有边缘都当作格线。

当前截图能改善保存的位置吗?本次没有一种微调方法在整体表现上超过固定模板,虽然部分方法改善了个别图片。1920×1078 截图上,固定模板的参考点误差中位数为 2.76 像素;逐点按局部格间距归一化后,中位数为 0.037 个格间距,约相邻格心距离的二十七分之一。下文重点比较的两种微调都使三张评估图变差。

Reviewed corners fit a saved projection. A screenshot supplies image evidence. Keep the grid fixed or refine it, then evaluate against separate reference points.

图 1。标定提供初始几何;图像分数可以推动网格,但是否改善由另一组参考点判断。

1. 标定一次,复用几何结构

可以想象把一张透明的规则六边形网格盖在截图上。**单应变换(homography)**把平面棋盘映射到透视图像,调整网格的位置和形状。知道若干格子的角点后,同一映射就能推算其余网格,包括被生物挡住的区域。

标定使用一张图片、六个格子的 35 个人工确认角点。每点都有相对格坐标和角点编号。另一个点被标为不清楚,在拟合前排除;其余点全部保留。

Six groups of reviewed calibration corners. Group 3 omits uncertain point 17 and its adjoining edges.The full 1920 by 1078 battle screenshot with 137 human-reviewed battlefield cells. The bottom-left cell is labeled 0,0; x increases rightward and y increases upward.

图 2。从审核角点到有地址的战场。第一张放大六个标定格,第 3 组排除不确定的第 17 点。第二张是在独立边界审核后显示的完整 1920×1078 截图:157 个投影候选中排除边界外的 20 个,留下 137 个可用格。左下角为 (0,0),x 向右增大、y 向上增大。点击可放大。

每一帧都从保存的投影出发。某帧的修正不传到下一帧。方法一次只看一张截图,不读取相邻帧或游戏状态;它移动截图坐标中的网格,不变形原图。

前提是相机、缩放和录制布局大致相同。初始投影包含实际棋盘外的格子,因此逐个审核后排除了外侧 20 格。保留的战场有 11 行、137 格,从下到上交替为 12、13 格。

面向游戏的输出从左到右编号列、从下到上编号行。左下角为 (0,0),右邻格 (1,0),上方一行 y=1。内部同时保留轴向六边形坐标和 q+0_r+0 这样的稳定标识。可读的 (x,y) 定位战场位置,轴向坐标负责无歧义的六方向邻接计算。

定位生物应取其接地点,而非美术图中心。逆投影把截图点映射到最近的轴向格,再用已审核边界表得到 (x,y) 地址。落在 137 格之外则拒绝;占多格的大生物保留所有占据地址。网格提供地址,哪些格被占据仍由独立生物检测器判断。

2. 两种利用截图微调网格的方法

三种方法从同一个标定透视映射开始。固定模板不再调整;另外两种在截图坐标中叠加小幅修正。

固定模板不用图像分数,也不搜索。为判断分数是否有帮助,我们让梯度微调和带方向的 Chamfer 使用相同搜索,再与固定模板比较。开发图在全部八种配置中选择方案,附录保留完整结果。

方法 位置由什么决定?
Fixed template 复用标定透视映射,不做调整。
Gradient refinement 让预测边靠近强亮度变化。
Oriented Chamfer 让预测边靠近方向兼容的检测边缘。

两种微调的搜索和移动边界相同,只允许小幅平移、缩放、旋转和切变,仅图像评分不同。评分器看不到审核参考点。另五组对照测试更简单的几何、更少参数、不考虑方向的距离和线段,结果见附录。

亮度变化:原有评分

梯度评分沿预测六边形边采样,奖励跨边的亮度变化,以及边中心与两侧的对比。先在图像分区内部平均,再让各分区等权,避免纹理密集区域仅凭边缘多而主导结果。

它能检测线状结构,却不知道线来自哪里;生物轮廓也可能获得很高支持。

距离与方向:新增评分

Chamfer 距离衡量预测边采样点离最近图像边缘多远。带方向的版本还比较方向是否相符:附近的竖直生物边界,不应强烈支持水平格线。

距离设有上限,因此缺失或遮挡格线只产生有限惩罚,随后在全网格平均。边缘阈值、方向分组和距离图参数见附录。

思路参考方向 Chamfer 匹配,这里实现的是小型评分原型。它偏好相近方向,却不理解地面格线。搜索会接受分数上升,因此必须问:分数更高,网格真的更准吗?

3. 结果:固定模板更准确

完成审核后共有 35 个标定点、两张开发图中的 35 点、三张评估图中的 53 点。六张图来自不同录像。标定点拟合初始模板,开发点选择方法,评估点测误差。各方法用同一冻结标注。这些图之前已看过,因此是已知样例上的小规模比较,不是全新盲测。

每个评估参考点都测到最近预测顶点的距离。报告中位误差、95% 点不超过的 P95,以及落在 8 像素内的点数。8 像素是协议预设的描述性容差,未验证为正确辨格或安全点击的阈值。

方法 中位误差 P95 误差 8 px 内
Fixed template 2.76 px 8.07 px 50/53 (94.3%)
Gradient refinement 4.50 px 9.90 px 49/53 (92.5%)
Oriented Chamfer 5.81 px 20.81 px 32/53 (60.4%)

开发集从八组配置中选出固定模板。94.3% 指 53 个参考点中有 50 个距某个预测顶点不超过 8 像素,它们只来自三张图。这个计数衡量点与网格的接近程度。另一次边界审核定义了 137 格清单,但 53 点评估仍不等于整盘识别准确率。

为考虑透视,还把每点像素误差除以该处格心到最近邻格心的预测距离,再汇总逐点比值:中位数 0.037 个局部格间距,P95 0.109 个格间距。这是相对距离,不是准确率百分比;像素误差与归一化误差分别统计。

两种重点微调都使三张评估图变差。熔岩图最明显:中位误差从固定模板的 2.48 px 增到梯度的 5.62 px、方向 Chamfer 的 16.86 px。可在下方切换图片与方法检查网格。

同一截图,比较不同算法。 选择图片和算法。青色线是预测,本图渲染不使用参考点。

固定模板 · snow · 中位误差 3.39 px

固定模板 predicted grid on the snow evaluation screenshot.
图 3。三种方案使用相同审核输入。点击可全屏查看。穿过生物和岩石的线是推断几何,不表示格子可以通行。

这里各方法使用同一标签。更早的 17.03 像素结果采用不同标定和评估坐标,不能把它与 2.76 的差异全部归于算法变化。

4. 图像分数更高,却把好网格推歪

为检查评分本身,每个评分器都使用相同的 257 个邻近位置候选:保存的标定加 256 个小幅随机扰动。先评分,再计算参考误差;参考点从未进入评分计算。

Two scatter plots on the lava image compare gradient and oriented Chamfer scores with reference error. Stars show the fixed template and crosses the search endpoints.

图 4。搜索偏好高分,几何目标却是低误差。两个面板都从低误差起点走到分数更高、位置更差的终点;面板间分数量纲不同。

熔岩图上,梯度对邻近候选的排序整体优于方向 Chamfer:与准确性的秩相关分别为 0.773、0.164,1 表示完全一致,0 表示无秩关联。但较好的梯度排序也未带来有益的最终修正。区分大偏移比改善已经很准的模板更容易。

实测表明两种分数都偏好更差的终点。纹理、前景轮廓、淡弱或缺失格线是可能原因,但本实验没有隔离各因素的贡献。仅凭方向无法区分真实格线和同方向干扰。

5. 当前条件下保留固定模板

最简单的方法仍最准确:复用固定透视映射。方向 Chamfer 增加预处理和方向检查却未改善结果。每张评估图只计时一次时,预处理加搜索约 843 ms,梯度约 305 ms。这是本机指示性计时,不是重复性能基准。

本实验说明:评分器可以分辨明显错位,却仍不适合对准确标定做微调。分数升高本身不足以证明位置改善。

参考点也限制结论:它们混合地形交点、选中轮廓和单位脚印角点,覆盖不均。边界审核确认了哪些格属于该布局,却没有增加新评估截图。因此未证明新相机下的表现、自动边界识别准确率或点击安全性。

下一步应收集少量独立审核、格线清楚的图片,并控制初始偏移,测试评分器能否修正已知错位,以及何时应保留已有好标定。

完整实验与实现细节

梯度与 Chamfer 比较只换评分器、保持搜索不变,固定模板提供基线。以下保留所有配置,包括负面结果。

八种配置与全部结果

开发分数是两张开发图的误差中位数再取平均,越低越好。评估均使用同样的 53 点。

方法 开发分数(px) 评估中位(px) 评估P95(px) 8 px 内
Fixed affine 14.94 15.15 33.56 4/53 (7.5%)
Fixed homography 3.06 2.76 8.07 50/53 (94.3%)
Gradient + translation 3.35 3.38 9.02 47/53 (88.7%)
Gradient + similarity 3.99 3.57 10.31 46/53 (86.8%)
Gradient + affine 4.15 4.50 9.90 49/53 (92.5%)
Plain Chamfer + affine 8.33 4.80 27.42 34/53 (64.2%)
Oriented Chamfer + affine 9.97 5.81 20.81 32/53 (60.4%)
Line segments + affine 3.12 4.25 9.80 48/53 (90.6%)

各图误差中位数,单位为截图像素:

方法 雪地 红地图 熔岩 最差图片 改善 / 变差
Fixed affine 12.19 18.85 15.93 18.85 0 / 3
Fixed homography 3.39 2.02 2.48 3.39 0 / 0
Gradient + translation 1.61 4.20 5.44 5.44 1 / 2
Gradient + similarity 1.98 4.30 4.81 4.81 1 / 2
Gradient + affine 3.55 4.50 5.62 5.62 0 / 3
Plain Chamfer + affine 4.05 3.97 24.57 24.57 0 / 3
Oriented Chamfer + affine 3.62 5.81 16.86 16.86 0 / 3
Line segments + affine 3.41 4.10 6.90 6.90 0 / 3

“最差图片”是最大的单图中位误差;改善/变差以固定单应变换为参照。平移和相似变换改善雪地图,但使另两图变差;三个新增评分器未改善任何评估图。

方法 做什么 为什么测试?
Fixed affine 拟合平移、缩放、旋转、切变,不含透视分母,再直接复用。 检查透视是否必要。
Fixed homography 拟合一次透视并复用。 固定模板基线。
Gradient + translation 水平、竖直移动标定网格。 以较少自由度容纳录制偏移。
Gradient + similarity 还允许旋转与统一缩放。 容纳小幅缩放与角度变化。
Gradient + affine 增加切变和独立纵向缩放。 原有更灵活微调。
Plain Chamfer + affine 奖励接近图像边缘,不考虑方向。 隔离方向作用的对照。
Oriented Chamfer + affine 奖励接近方向兼容的边缘。 测试主要新增评分。
Line segments + affine 奖励对齐、接近且与格边重叠的线段。 检查长线是否比边缘像素更有辨别力。

仿射修正在保存的透视映射之后作用于截图坐标。全部仿射搜索有同样的六参数边界:平移 ±18 px、旋转 ±0.6°、统一缩放和额外纵向缩放 0.988–1.012、切变 ±0.012。仅平移和相似变换采用对应子集。没有整屏搜索,也不逐图重新拟合无限制透视。

原有梯度分数测什么

截图转灰度,用 1.2 像素高斯模糊,再计算水平、竖直 Sobel 导数。每条投影边在长度 15%–85% 范围采七个内部点。

每点 55% 响应来自垂直预测边的亮度变化,取偏移 −2、0、+2 px 的最强读数;另 45% 来自中心与两侧 5 px 处的亮度对比。归一化与截断防止极端梯度主导。

采样平均得到边分数,边分数在十二个图像区域内平均,再让区域等权。它检查全图线状结构是否支持网格,却不能认定是地面格线;生物也能提供同样强的证据。

原搜索固定其余参数,尝试一个参数的七个邻近值,保留分数改善,再缩小步长重复。它看不到参考标注。新增评分器沿用这一搜索,排除优化器差异的解释。

距离图与线段匹配:精确配置

梯度问“这里是否有强亮度结构”,Chamfer 问“最近边缘离这里多远”。因此即使采样没落在线上,偏移候选仍能得到距离信号。

**方向提供必要区别。**预测边为 35° 时,附近 37° 边缘可支持它,110° 不应同等支持。方向与距离都必须在截图投影后计算,因为透视会改变角度与像素尺度。

Liu 等人的 Fast Directional Chamfer Matching结合方向与高效距离评分。本原型采用简单方向分桶图,不复现论文完整加速方案,也不声称达到其性能。

原型的具体步骤

  1. 原始灰度图以 σ=1.2 px 模糊,Canny 固定阈值 40、100,使用 L2 梯度幅值。
  2. 从梯度法线得到边缘切线;相反方向视为同一直线,角度以 180° 循环。
  3. 建立 12 张方向图,桶中心间隔 15°,每图纳入距中心 15° 内的边缘,再计算每像素到最近所纳入边缘的距离。
  4. 投影同一网格,计算截图切线并复用七个采样位置。
  5. 在相邻两张方向图间插值,空间上使用双线性插值处理小数坐标。
  6. 距离上限为 8 截图像素,支持度为 1 − capped_distance / 8,复用边与十二区域平均。

OpenCV 距离变换提供到最近零像素的距离,这里选择精确欧氏距离。预处理不重采样截图或棋盘,候选只查询生成的数组。

距离 2 px 时支持度为 0.75,8 px 及以上为零;没有兼容边缘也为零。缺失格线承担有界成本,不会被从平均中悄悄删去。这种截断损失是稳健机制,并非丢弃固定比例的困难点。

12 桶、15° 容差、Canny 阈值与 8 px 上限都是比较前固定的项目选择,不是论文证明的最优参数。重叠桶与插值软化角度边界,属于近似兼容,不是查询方向上的严格硬阈值。未在看过评估后扫参数。

普通 Chamfer 把全部 Canny 边放进一张图,其余步骤不变,用来隔离方向信息是否有益。

线段对照

六边形边是一条线段,不是孤立边缘点。另一原型每图运行一次 OpenCV 经典 LSD 线段检测器,保留至少 12 px 长的线段。Canny 与线段检测文档。

每条投影边与检测线段比较三个方面:

  • **方向:**角差到 15° 时,支持度线性降至零。
  • **距离:**线段两端到预测边所在直线的平均垂距,上限 8 px。
  • **重叠:**线段投影的重叠长度除以格边长度。

三项相乘奖励贴近、对齐且覆盖较长的线段。每条格边选最佳匹配,再按区域平均。包围框过滤跳过数学上不可能有正支持的组合,不改变分数。

The same lava crop shown as source pixels, a truncated distance map for near-horizontal edges, and detected line segments over the source.

补充图 A。表示中仍有干扰:距离图记录接近程度,LSD 记录直线结构,都不知道它是否属于战场格线。

原型不合并碎线,也不把连通性与间距作为联合图约束。这些是后续方向,未在本轮实现;没有引入神经网络。

候选排序、搜索诊断、耗时与复现

测量的是图像分数与负参考误差的 Spearman 秩相关。+1 表示排序完全一致,0 表示无关联,负数表示偏好更差几何。误差取负让“分数高、误差低”成为正关联。

A per-image heatmap of score-versus-negative-error Spearman correlations for gradient, plain Chamfer, oriented Chamfer and line-segment scoring on identical candidate transforms.

补充图 B。每格使用该图相同的 257 个候选。前两行是开发图,后三行是评估图;不同图片的量纲与证据不同,不合并分数。

评分器 雪地 红地图 熔岩 使误差变大的已接受更新
Gradient + affine 0.741 0.689 0.773 21/33
Plain Chamfer + affine 0.323 0.464 -0.243 19/29
Oriented Chamfer + affine 0.624 0.623 0.164 18/39
Line segments + affine 0.654 0.762 0.795 20/30

**方向信息在全部五图上改善普通 Chamfer 的秩相关,但在三张评估图上仍低于梯度。**熔岩图从普通 Chamfer 的 −0.243 提升为较弱的 +0.164,而梯度为 +0.773。

无分数或误差并列的候选对中,熔岩图排序正确比例为梯度 79.1%、普通 Chamfer 41.7%、方向 Chamfer 55.3%、线段 79.9%。这些候选对不是独立图像,只描述固定候选库,不能当作上千个新测试样本。

熔岩 candidate scatter plots for gradient, plain Chamfer and oriented Chamfer. Stars mark the fixed calibration and crosses mark the actual search endpoints.

补充图 C。参考误差越低越好,优化器却偏好高分。固定模板起点靠下,各搜索终点分数与误差都更高;密集边缘可能支持错位网格。

最后一列统计已接受、却增加整图中位参考误差的更新:梯度仿射 21/33,方向 Chamfer 18/39。后者有害更新比例较小却终点更差,路径与步幅不同,不能单看这个比例选方法。

线段在红地图和熔岩图的广泛候选排序上优于梯度,却仍使三张评估图的最终位置都变差。广泛排序与准确标定附近的微调是不同测试。正相关或上升的优化曲线不能证明下一步有益。

纹理和前景结构可能造成误导。测量证明分数偏好较差终点,却没有隔离每个原因。固定 Canny 可能漏掉弱格线,同方向纹理仍保留,线段可能偏好单位边界。这些是下一轮控制实验的假设,不是汇总指标证明的解释。

耗时

距离变换把工作移到预处理。宽 W、高 H、K 张方向图的时间与存储约 O(KWH);当前分辨率的 12 张 float32 距离图约占 95 MiB。每候选 S 个投影点查询为 O(S),K 固定。旧梯度每点需多次数组读取,但没有方向距离体积。

线段原型先检测 L 条线,再与 E 条格边比较,朴素最坏成本为每候选 O(EL),包围框剪枝减少昂贵比较。三张评估图分别保留 1,633–3,010 条线段。

评分器与仿射搜索 图像准备 搜索 合计
Gradient + affine 21 ms 284 ms 305 ms
Plain Chamfer + affine 80 ms 103 ms 183 ms
Oriented Chamfer + affine 663 ms 180 ms 843 ms
Line segments + affine 124 ms 831 ms 954 ms

这些是本机每张评估图一次预处理、一次搜索的中位数,OpenCV 限制单线程。“合计”相加两列中位数,不含图像解码、一次性标定、参考点评分与诊断候选探测。固定基线不需要图像证据预处理或迭代搜索;本表也不含投影与渲染耗时。

方向 Chamfer 搜索比梯度快,但十二张距离图让总成本约为 843 ms,对比 305 ms,因此不是端到端提速。这是指示性测量,不是重复延迟基准。

复现

当前代码位于 perception/experiments/b15_battle-hex-grid-registration/(原 B06)。SCORER_STUDY.md 记录协议,src/alternative_scores.py 实现评分器,src/compare_scorers.py 复用未改动的配准搜索与冻结输入。本文测量仍在 local_data/perception/experiments/b06_battle-hex-grid-registration/results/single-image-scorers-v5/,保存输入快照、开发选择、全部方法矩阵与误差、每次搜索查询及共同候选库。src/build_scorer_figures.py 生成本文图表。结果文件称评估分区为 test,本文称“评估”,因为图片已被查看。

2026 年 9 月 8 日只更新编号与执行入口;旧 b06.* 格式、校准输入和冻结测量保留。从仓库根目录重跑评分比较时,明确指定一个尚不存在的新输出目录:

& local_data/devtools/environments/perception/Scripts/python.exe -X utf8 perception/experiments/b15_battle-hex-grid-registration/src/compare_scorers.py --output local_data/perception/experiments/b15_battle-hex-grid-registration/results/scorer-replay-after-review

上面是后续重跑示例,本轮没有执行。默认输入仍是旧 B06 的 human-review-v4/reviewed-inputs.json,不是重新标注的参考点;已有输出会拒绝覆盖。新结果应另作对照,不能替换本文原始数据后仍沿用旧日期。

几何测试检查投影及不确定点排除;评分器测试检查方向环绕、不兼容方向、缺失边有界成本、对齐/错位的合成网格以及原搜索不变。这些验证实现行为,不证明战场准确率;后者只有上面的有限真图证据。

这是小型原型,不是 Fast Directional Chamfer Matching 完整求解器的复现。Canny、LSD 使用 OpenCV,几何使用 NumPy,不需要神经模型。