見出し画像

現代のピカチュウは初代からどのくらい痩せたのか画像処理で検証してみた

※見出し画像の引用先:https://makaigames.main.jp/pokemon-pikachu-cute/
【ポケモン】初期の丸々と太ったピカチュウって可愛かったよな


初めに

 こんにちは,Umamusume22です.最近,ネットサーフィンをしている最中に初期のピカチュウの方が太っていて可愛いと言われているHPを見つけました[1].確かに初期のピカチュウ(見出し画像の左)と今のピカチュウ(見出し画像の右)を見比べても今のピカチュウの方が痩せていることが分かります.なんていうか昔のピカチュウはずんぐりむっくりしています (ひどい).ライザ〇プのようなbefore ~afterを人間だけでなくピカチュウも成し遂げています.人間の場合,体脂肪率や体重がダイエット成功の基準になります.
 ところが,ピカチュウの体脂肪率や体重がどのくらい減少したのか不明です.そこで,今回は各ピカチュウの円形度を画像処理で算出してどのくらい痩せたのか定量的に評価します. 

使用したピカチュウの画像

図1 初期と現代のピカチュウ画像
出典:【ポケモン】初期の丸々と太ったピカチュウって可愛かったよな
https://makaigames.main.jp/pokemon-pikachu-cute/

 見出し画像と同様の画像を使いました.各ピカチュウの画像を切り取って使いました. 切り取った各画像サイズは共に557x554と設定しました.

ピカチュウの画像(初期と今)を編集 

体格の輪郭を手作業で検出

図2 初代ピカチュウの体格の輪郭を検出
図3 現代ピカチュウの体格の輪郭を検出

 図2と図3は切り取った各ピカチュウの画像をパワポで編集したものです.ピカチュウの耳と尻尾,四肢を無視した体格の輪郭をフリーハンドで検出しました.手作業です.

検出した体格の輪郭内を塗りつぶす

図4 初代ピカチュウの体格を黒く塗りつぶした画像
図5 現代ピカチュウの体格を黒く塗りつぶした画像

図4と図5は手作業で検出したピカチュウの体格内を黒く塗りつぶした画像です.塗りつぶす作業も手作業で行いました.

円形度を算出するソースコード [2,3]

以下はソースコード (circual.py)です.

import cv2
import numpy as np

def circularity(contour):
    '''
    円形度を求める

    Parameters
    ----------
    contour : ndarray
        輪郭の(x,y)座標の配列

    Returns
    -------
        円形度

    '''
    # 面積
    area = cv2.contourArea(contour)
    # 周囲長
    length = cv2.arcLength(contour, True)

    # 円形度を返す
    return 4*np.pi*area/length/length

# 8ビット1チャンネルのグレースケールとして画像を読み込む
img = cv2.imread("入力したい画像のパスをここに書いてください", cv2.IMREAD_GRAYSCALE) 

# 白黒反転して二値化
ret, img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY_INV)

# 一番外側の輪郭のみを取得
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) 

# 画像表示用に入力画像をカラーデータに変換する
img_disp = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

# 全ての輪郭を描画
cv2.drawContours(img_disp, contours, -1, (0, 0, 255), 2)

# 輪郭の点の描画
for contour in contours:
    # 円形度の計算
    val = circularity(contour)
    # 輪郭の矩形領域
    x,y,w,h = cv2.boundingRect(contour)
    # 円形度の描画
    cv2.putText(img_disp, f"{val:.3f}", (x, y-10), cv2.FONT_HERSHEY_PLAIN, 2, (0, 255, 0), 1, cv2.LINE_AA)
    # 円らしい領域(円形度が0.85以上)を囲う
    if val > 0.85:
        cv2.rectangle(img_disp,(x-5,y-5),(x+w+5,y+h+5),(255,0,0),2) # 少し外側を囲う

cv2.imshow("Image", img_disp)

# キー入力待ち(ここで画像が表示される)
cv2.waitKey()

実行結果[2,3]

図6 初代ピカチュウの円形度の結果 
図7 現代ピカチュウの円形度の結果

 図6と図7の左上に表示されている数字が各画像の円形度です.円形度とはどのくらい円らしいかを表す値のことです.円形度の値が1に近いほど円に近づいています[2,3].
 実行結果より図7の方が図6より円形度の値が0.138低下しています.つまり,現代のピカチュウは初代よりスリムになったことが示されました.

最後に

 初期と現代のピカチュウ画像を用いてどのくらい痩せたのか画像処理で定量的評価を行いました.図形の面積と周囲長を求める関数[2,3]を使いました.ネットでも騒がれていたようにピカチュウはダイエットに成功したのですね,,,,ピカチュウの身に何があったのだろうか.
 次回はピカチュウと同様にネット上でダイエット成功と騒がれていたハム太郎がどのくらい痩せたのか検証します.

ここまで記事を読んでいただきありがとうございました!

※ウマ娘の声をフーリエ変換した記事も書いて発信しています.suzuが私です.興味がある方はぜひご覧ください!

※Qiitaもやっています.

ぜひフォローよろしくお願いします!!!!

参考文献

[1] "【ポケモン】初期の丸々と太ったピカチュウって可愛かったよな"

[2] "【OpenCV-Python】円形度"

[3] "円形度"




この記事が気に入ったらサポートをしてみませんか?