Pokémon Go遇到MATLAB
直到大约两周前,我还没有想过MATLAB和Pokémon Go(游戏邦注:今年夏天全球手机游戏现象)之间存在联系的可能性。但后来我听说有人使用一些基本的图像处理技术,通过自动搜索PokéStops来破解游戏。
嗯,我不玩Pokémon围棋,我也不知道PokéStop是什么,但我理解搜索自动化背后的基本思想。
以下是游戏截图。
url =“https://blogs.mathworks.com/steve/files/pokemon-go-screen.jpg”;rgb = imread (url);imshow (rgb)
(非常感谢那些给我截屏的人,尤其是Haripriya和Chris。)
这个嵌套蓝色圆圈的几何图案是PokéStop。我们的任务就是找到它们。我将通过以下步骤展示解决方案的基本轮廓:
1.按颜色分割图像。
2.清理分割使用形态关闭。
3.计算分割中连通分量的面积和圆心。
4.选择最大的对象。
为了快速了解如何通过颜色分割图像,我喜欢使用颜色阈值,通常是Lab颜色空间。下面的屏幕截图显示了我如何调整a*和b*滑块来选择与PokéStop相关的颜色范围。
这是我从颜色阈值.
imshow (BW)
现在让我们使用形态关闭将PokéStop模式变成一个单独的、连接的blob。
BW2 = imclose (BW strel (“磁盘”, 20));imshow (BW2)
下一步,使用regionprops找出所有连接的分量,计算它们的面积和质心。在图像处理工具箱的最新版本中,你可以看出regionprops将结果作为表返回,这使结果更容易阅读。
t = regionprops (“表”BW2,“区域”,“重心”)
t =面积质心_____ ________________ 1157 37.43 665.14 13259 260.56 313.99 2 217 49.5 6 259 31.5 1 265 82 6 356.5 31.667 12 387.5 31.5
最后,确定面积最大的表行,并得到相应的质心。
[~ j] = max (t.Area);位置= t.Centroid (j,:)
位置= 260.5581 313.9893
让我们通过在原始图像上叠加位置来看看效果如何。
imshow (rgb)在情节(位置(1)、位置(2)“dy”,“MarkerSize”10“MarkerFaceColor”,“y”)举行从
那就这样吧。
他们全都抓了!
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。