はじめに
こんにちは!
最近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と読めますね!
次にinterpolationを"bilinear"に変えてみます。
# interpolationをいろいろ変えてみる subfig[i - 1].imshow(digits.images[i], interpolation='bilinear', cmap='plasma')
何となく見やすくなりました。赤外線センサーみたいで可愛いです。
次にinterpolationを"bicubic"に変えてみます。
# interpolationをいろいろ変えてみる subfig[i - 1].imshow(digits.images[i], interpolation='bicubic', cmap='plasma')
もっと滑らかになりました!もわっとしてますね、もわっと。
次にinterpolationを"hanning"に変えてみます。
# interpolationをいろいろ変えてみる subfig[i - 1].imshow(digits.images[i], interpolation='hanning', cmap='plasma')
文字の中心部分が黄色くなったのでより見やすくなりました!
次にinterpolationを"bessel"に変えてみます。
# interpolationをいろいろ変えてみる subfig[i - 1].imshow(digits.images[i], interpolation='bessel', cmap='plasma')
hanningより黄色が抑えめですが、こちらの方が立体感を感じます。個人的には一番好みです。
終わりに
知ってる人からしたら「だから何だ?」となることなのかもしれませんが、初心者的にはこうして視覚的に見え方が変わるなど変化のわかりやすいことが一番やっていておもしろいです!
interpolationメソッドは他にもありますので、興味ある方はぜひ公式サイトをご覧ください。