Pythonで画像から特徴抽出したい(色)

Pythonで画像を扱う場合、PILや生numpy、opencvなどの選択肢がありますが、今回は比較的扱いやすいskimageを試してみます。

画像はそのままでは機械学習に用いるのが難しく、特徴を抽出する手法があり、今回はRGBを取り出してみます。 (もはや深層学習でその辺をすっとばす、という方が主流泣きはしますが、、、)

対象の画像の用意

skimageに含まれる猫の画像を使います

from skimage.data import chelsea
import matplotlib.pyplot as plt

img = chelsea()
plt.imshow(img)

f:id:esu-ko:20200814224423p:plain

RGBのヒストグラムを作成

exposure.histgramで、0~255のRGB成分の256通りの区切りと、その値を取得できます。ので、集計せずに折れ線で可視化します。

from skimage import exposure

 #RGBを順に取得
 for i,c in enumerate(['r','g','b']):
  #...はnumpyの省略記号
  img_hist, bins = exposure.histogram(img[...,i], source_range='dtype')

  #横軸=bins,縦軸 = 最大を1にして表示
  plt.plot(bins, img_hist / img_hist.max(),c=c)

f:id:esu-ko:20200814224409p:plain

どうやら無事取り出せたようです。
この特徴量を用いてクラスタリングなどにつなげることができるようになります。