关于图像处理技术的分析和应用介绍

描述

这个夏天,席卷全球(什么时候可以席卷到中国= =)的Pokémon Go吸引了各路宅男宅女走出房间,更有大神把它和MATLAB联系在一起,使用图像处理技术黑入游戏,自动搜索PokéStops,抓住小精灵们!

如何实现的呢?

首先获取游戏截图:

url = 'http://blogs.mathworks.com/steve/files/pokemon-go-screen.jpg';

rgb = imread(url);imshow(rgb)

图片里的蓝色圆环部分代表了PokéStop。我们的任务是在地图上自动搜素到它们。这里是关键的几步:

通过颜色对图像分区;

使用形态学闭运算清理分割区域;

计算连通部分的面积和图心;

选择最大对象。

首先,可以使用Color Thresholder,通常和Lab color space一起,根据颜色对图像分区。下图显示了通过调整a*和b*的阈值来选出PokéStop的颜色区间。

图像处理

使用imshow看一下分区结果:

图像处理

第二步,使用形态学闭运算进一步调整PokéStop的图形:

BW2 = imclose(BW,strel('disk',20));

imshow(BW2)

结果如下:

第三步,使用regionprops找到所有连通域,并计算面积和图心。

在最新版的Image Processing Toolbox中,你可以让regionprops以列表的方式返回计算结果,更加易读:

t = regionprops('table',BW2,'area','centroid')

t =     

Area                 Centroid    

_____    ________________      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);

location = t.Centroid(j,:)

location =

260.5581     313.9893

在最初的截图中检验一下计算结果:

imshow(rgb)

hold on

plot(location(1),location(2),'dy','MarkerSize',10,'MarkerFaceColor','y')

hold off

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分