Magicode logo
Magicode
2

opencv-pythonでkmean法を試してみよう

初めに

テストも兼ねた単発記事です!教師なし学習で有名なkmean法は自身で作成するのもよいですが画像処理モジュールであるopencvにも関数が用意されています。
お手軽に機械学習が体験できおすすめです。

kmean法とはなにか

kmean法とはクラスタリングに使われる教師なし学習のことで具体的に初めにデータを適当にクラスタリングし、それぞれのクラスタの重心に合わせて再クラスタし、最終的に重心が変動しなくなったらクラスタリング終了というものです。

cv2.kmeansの使い方

kmeans: (data: Any, K: Any, bestLabels: Any, criteria: Any, attempts: Any, flags: int, centers: ... = ...)
dataは入力データのことで必ずnp.float32型のデータであること、それぞれの特徴ベクトルが一列であることという決まりがあります。
Kは分類したいクラスタの数です。
criteriaは繰り返し処理の終了条件です。具体的に以下のフラグがあります。
cv2.TERM_CRITERIA_EPS - 指定された精度に到達したら繰り返し計算を終了する.
cv2.TERM_CRITERIA_MAX_ITER - 指定された繰り返し回数に到達したら繰り返し計算を終了する.

flagsは重心の初期値を決める方法を指定します.普通は二つのフラグ cv2.KMEANS_PP_CENTERScv2.KMEANS_RANDOM_CENTERS が使われます。 PPのほうは初期値自身の重心が偏らないようになっているので精度向上に期待できます

プログラム

具体的なプログラムです。このページのヘッダになっている画像で画素のクラスタリング(代表色の抽出)をやってみたいと思います。
基本的にはcurlで画像をダウンロードしてそれを読み込むようにしています。
matplotlibで日本語表示させるためjapanize-matplotlibを使用しています。


まとめ

簡単な組み合わせでクラスタリングできるので、メインカラーを自動的取得するなどいろいろな使い方ができます!

Discussion

コメントにはログインが必要です。