這個(gè)夏天,席卷全球(什么時(shí)候可以席卷到中國= =)的Pokémon Go吸引了各路宅男宅女走出房間,更有大神把它和MATLAB聯(lián)系在一起,使用圖像處理技術(shù)黑入游戲,自動搜索PokéStops,抓住小精靈們!
如何實(shí)現(xiàn)的呢?
首先獲取游戲截圖:
url = 'http://blogs.mathworks.com/steve/files/pokemon-go-screen.jpg';
rgb = imread(url);imshow(rgb)
圖片里的藍(lán)色圓環(huán)部分代表了PokéStop。我們的任務(wù)是在地圖上自動搜素到它們。這里是關(guān)鍵的幾步:
通過顏色對圖像分區(qū);
使用形態(tài)學(xué)閉運(yùn)算清理分割區(qū)域;
計(jì)算連通部分的面積和圖心;
選擇最大對象。
首先,可以使用Color Thresholder,通常和Lab color space一起,根據(jù)顏色對圖像分區(qū)。下圖顯示了通過調(diào)整a*和b*的閾值來選出PokéStop的顏色區(qū)間。
使用imshow看一下分區(qū)結(jié)果:
第二步,使用形態(tài)學(xué)閉運(yùn)算進(jìn)一步調(diào)整PokéStop的圖形:
BW2 = imclose(BW,strel('disk',20));
imshow(BW2)
結(jié)果如下:
第三步,使用regionprops找到所有連通域,并計(jì)算面積和圖心。
在最新版的Image Processing Toolbox中,你可以讓regionprops以列表的方式返回計(jì)算結(jié)果,更加易讀:
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
最后,找到其中最大的區(qū)域,并返回圖心位置:
[~,j] = max(t.Area);
location = t.Centroid(j,:)
location =
260.5581 313.9893
在最初的截圖中檢驗(yàn)一下計(jì)算結(jié)果:
imshow(rgb)
hold on
plot(location(1),location(2),'dy','MarkerSize',10,'MarkerFaceColor','y')
hold off
-
圖像處理
+關(guān)注
關(guān)注
27文章
1282瀏覽量
56656 -
形態(tài)學(xué)
+關(guān)注
關(guān)注
0文章
6瀏覽量
8185
發(fā)布評論請先 登錄
相關(guān)推薦
評論