【ポケモン剣盾】高個体値量産!?特徴点抽出による孵化判定【裏技】

f:id:otama_jaccy:20200307011003p:plain

皆さんは個体値ポケモン量産する方法をご存知でしょうか?

実は,とある方法を実践するだけで個体値・色違い量産する方法があるって知ってましたか?

方法もすごく簡単で,卵が産まれているかどうかを画像処理によってお姉さんのポーズを識別するだけ!!!

f:id:otama_jaccy:20200305151514p:plain

ACCELERATED-KAZE FEATURES

前述の通り,お姉さんがどのようなポーズ取っているかを識別することによって卵が産まれているかが判定可能です. なので,お姉さんの胸部画像(図1)の特徴点とゲーム画面の特徴点をマッチングすることによってポーズの識別をします. 特徴点抽出には,AKAZEを利用しました.

f:id:otama_jaccy:20200305170754p:plain
図1. お姉さんの胸部画像

特徴点に使いたい画像の範囲はかなり狭いため(図2),そのままの状態で特徴点抽出をしてもうまくいきません. そのためいくつか,前処理とAKAZEのパラメータを調整しています.以下にそれらを示します.

  • 画像の大きさを2倍にする
  • AKAZEのパラメータ変更
    • nOctaves=2:解像度が高くないため
    • nOctaveLayers=3:解像度が高くないため
    • descriptor_type=cv2.AKAZE_DESCRIPTOR_KAZE_UPRIGHT:マッチング対象が回転しないため

f:id:otama_jaccy:20200307023303p:plain
図2. 特徴点のマッチングに使いたい範囲

この結果得られるマッチング画像を図3に示します. きれいにマッチングできてると思います. また,お姉さんが腕を組んでいなかったり,お姉さんが画面に写ってない場合は,特徴点がマッチングしませんでした. そのため,マッチングした特徴点の数を数えるだけで卵が産まれているかどうかの判定ができそうです*1

f:id:otama_jaccy:20200307024416p:plain
図3. 特徴点のマッチング結果

特徴点抽出とそのマッチングを行っているコードを抜粋したものを次に示します.

# 画像の拡大
def expand(self, img, times, interpolation=cv2.INTER_CUBIC):
    ret_img = cv2.resize(img, None, interpolation=interpolation, fx=times, fy=times)
    return ret_img

# マッチングした特徴点の数を返す
def match_by_akaze(self):
        src = cv2.imread("キャプチャ画像", 0)
        img1 = self.expand(img1, 2)

        img2 = cv2.imread("テンプレート画像のファイル", 0)
        img2 = self.expand(img2, 2)

        akaze = cv2.AKAZE_create(nOctaves=2, nOctaveLayers = 3, descriptor_type=cv2.AKAZE_DESCRIPTOR_KAZE_UPRIGHT)                  
        
        kp1, des1 = akaze.detectAndCompute(img1, None)
        kp2, des2 = akaze.detectAndCompute(img2, None)

        bf = cv2.BFMatcher()
        
        matches = bf.knnMatch(des1, des2, k=2)
        
        # 距離がある程度近いやつを採用
        good = []
        for m, n in matches:
            if m.distance < 0.6 * n.distance:
                good.append([n])
        good = sorted(good, key=lambda x: x[0].distance)
        good = good[:30]
        return good

おわりに

いかがでしたか?

今回は,個体値の色違いを厳選する方法を紹介しました! みなさんもぜひ理想のポケモンをゲットしてくださいね!!

*1:経験的に6以上マッチングしてれば産まれていると判定して良さそうです