B15 · 战场网格位置 · 实验记录与相关篇目
输入截图和保存的标定,输出 137 格的位置。9 月 8 日更新代码入口;文中的参考点误差、评分比较与计时保留原测量,没有重跑。
前面已经能在截图中提出生物位置候选。现在换一个问题:怎样把这些图像位置换成战场上的格子坐标?《英雄无敌:上古纪元》的战场是斜视的六边形网格;我们用审核过的角点做一次标定,再把规则网格投影到后续截图中。可见格线会与岩石、生物轮廓、阴影和特效混在一起,不能只把所有边缘都当作格线。
当前截图能改善保存的位置吗?本次没有一种微调方法在整体表现上超过固定模板,虽然部分方法改善了个别图片。1920×1078 截图上,固定模板的参考点误差中位数为 2.76 像素;逐点按局部格间距归一化后,中位数为 0.037 个格间距,约相邻格心距离的二十七分之一。下文重点比较的两种微调都使三张评估图变差。
图 1。标定提供初始几何;图像分数可以推动网格,但是否改善由另一组参考点判断。
1. 标定一次,复用几何结构
可以想象把一张透明的规则六边形网格盖在截图上。**单应变换(homography)**把平面棋盘映射到透视图像,调整网格的位置和形状。知道若干格子的角点后,同一映射就能推算其余网格,包括被生物挡住的区域。
标定使用一张图片、六个格子的 35 个人工确认角点。每点都有相对格坐标和角点编号。另一个点被标为不清楚,在拟合前排除;其余点全部保留。


图 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

这里各方法使用同一标签。更早的 17.03 像素结果采用不同标定和评估坐标,不能把它与 2.76 的差异全部归于算法变化。
4. 图像分数更高,却把好网格推歪
为检查评分本身,每个评分器都使用相同的 257 个邻近位置候选:保存的标定加 256 个小幅随机扰动。先评分,再计算参考误差;参考点从未进入评分计算。

图 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.2 px 模糊,Canny 固定阈值 40、100,使用 L2 梯度幅值。
- 从梯度法线得到边缘切线;相反方向视为同一直线,角度以 180° 循环。
- 建立 12 张方向图,桶中心间隔 15°,每图纳入距中心 15° 内的边缘,再计算每像素到最近所纳入边缘的距离。
- 投影同一网格,计算截图切线并复用七个采样位置。
- 在相邻两张方向图间插值,空间上使用双线性插值处理小数坐标。
- 距离上限为 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。
- **重叠:**线段投影的重叠长度除以格边长度。
三项相乘奖励贴近、对齐且覆盖较长的线段。每条格边选最佳匹配,再按区域平均。包围框过滤跳过数学上不可能有正支持的组合,不改变分数。

补充图 A。表示中仍有干扰:距离图记录接近程度,LSD 记录直线结构,都不知道它是否属于战场格线。
原型不合并碎线,也不把连通性与间距作为联合图约束。这些是后续方向,未在本轮实现;没有引入神经网络。
候选排序、搜索诊断、耗时与复现
测量的是图像分数与负参考误差的 Spearman 秩相关。+1 表示排序完全一致,0 表示无关联,负数表示偏好更差几何。误差取负让“分数高、误差低”成为正关联。

补充图 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%。这些候选对不是独立图像,只描述固定候选库,不能当作上千个新测试样本。

补充图 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,不需要神经模型。
Comments