BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【python】matplotlibのinterpolationで遊んでみよう!

はじめに

こんにちは!
最近Pythonを勉強し始めたBFT名古屋支店・インフラ女子(?)のやまぐちです。

「今すぐ試したい! 機械学習・深層学習(ディープラーニング)画像認識プログラミングレシピ」という本の中で、手書き数字のデータセットを画面に表示するコードがあります。ここで出てくるmatplotlibのimshow関数のinterpolationメソッドに指定する値で、表示の仕方が変わるのがおもしろく、記事にすることにしました!

ちなみにここで使用している手書き数字のデータセットはscikit-learnを入れることで入手できます。

やってみるゾ

基本のコードは以下の通りです。一番下の行のinterpolationは"none"となっています。

from sklearn import datasets
digits = datasets.load_digits()
import numpy as np
import matplotlib.pyplot as plt

# 表示される行と列の設定
ROWS_COOUNT = 1
COLUMNS_COUNT = 4
DIGIT_GRAPH_COUNT = ROWS_COOUNT * COLUMNS_COUNT

# データオブジェクト保持用
subfig = []
# x軸データ
x = np.linspace(-1, 1, 10)

# figureオブジェクト作成サイズの設定
fig = plt.figure(figsize=(12, 9))

for i in range(1, DIGIT_GRAPH_COUNT +1):
  subfig.append(fig.add_subplot(ROWS_COOUNT, COLUMNS_COUNT, i))
# y軸データ
  y = x ** i
# interpolationをいろいろ変えてみる
  subfig[i - 1].imshow(digits.images[i], interpolation='none', cmap='plasma')

この状態で実行すると以下のように、手書き数字のデータセットの0~3番目までが表示されます。なんとなく1, 2, 3, 4と読めますね!
f:id:bftnagoya:20210406150716p:plain

次にinterpolationを"bilinear"に変えてみます。

# interpolationをいろいろ変えてみる
  subfig[i - 1].imshow(digits.images[i], interpolation='bilinear', cmap='plasma')

何となく見やすくなりました。赤外線センサーみたいで可愛いです。
f:id:bftnagoya:20210406150930p:plain

次にinterpolationを"bicubic"に変えてみます。

# interpolationをいろいろ変えてみる
  subfig[i - 1].imshow(digits.images[i], interpolation='bicubic', cmap='plasma')

もっと滑らかになりました!もわっとしてますね、もわっと。
f:id:bftnagoya:20210406151110p:plain

次にinterpolationを"hanning"に変えてみます。

# interpolationをいろいろ変えてみる
  subfig[i - 1].imshow(digits.images[i], interpolation='hanning', cmap='plasma')

文字の中心部分が黄色くなったのでより見やすくなりました!
f:id:bftnagoya:20210406151432p:plain

次にinterpolationを"bessel"に変えてみます。

# interpolationをいろいろ変えてみる
  subfig[i - 1].imshow(digits.images[i], interpolation='bessel', cmap='plasma')

hanningより黄色が抑えめですが、こちらの方が立体感を感じます。個人的には一番好みです。
f:id:bftnagoya:20210406151722p:plain

終わりに

知ってる人からしたら「だから何だ?」となることなのかもしれませんが、初心者的にはこうして視覚的に見え方が変わるなど変化のわかりやすいことが一番やっていておもしろいです!

interpolationメソッドは他にもありますので、興味ある方はぜひ公式サイトをご覧ください。

matplotlib.org