下图显示了算法必须执行的操作。
对于一维数组,例如字符串匹配,我们可以使用String searching algorithms。
我们如何在位图或二维数组中有效地找到这样的匹配?
P.S。 给出的示例仅用于解释目的。实现宝石迷阵解算器不需要复杂的算法,只需分割游戏板并制作N×N表,并从每个单元中采样一个像素,并通过检查其RGB值找出每个单元中的哪个项目,然后我们就完成了。我想知道一般图像区域匹配算法,例如,将用于不断点击匹配位图区域的宏程序。
答案 0 :(得分:2)
这不是一件简单的事情。大多数游戏通过使用区域(如您所猜测的那样)或颜色图来解决问题,颜色图保持第二个图形,按颜色将位置映射到特定项目。
在游戏之外,例程使用matrix transformation to attempt to identify edges and verticies,这往往会减少考虑可能匹配的数据量。简单的例子是使用像
这样的内核的过滤器 kernel = [ -1 -1 -1 ]
[ -1 8 -1 ]
[ -1 -1 -1 ]
强调任何与邻居不平衡的地区。由此您可以尝试检测线和顶点,从而大大减少匹配中要考虑的项目数。如果要检测“近”匹配,则尝试使用线性变换通过测量顶点的位移来描述到匹配的距离,并设置一些标准来确定匹配是否与相同的距离太远。
一个简单的解决方案,但仅适用于“完美”数据的解决方案是针对每个可能的偏移仅针对原始位图xor
。如果已知图像是使用精确位图构造的,则xor
应该产生与位图大小相同的零字段。在尝试更昂贵的xor
并验证计算之前,通过检查几个选定的像素进行精确匹配,可以在一定程度上改善这种技术,但是如果要以非常不合需要的方式考虑更大的空间,其性能会降低。