k-meansクラスタリングと画像の代表色抽出をTypeScriptで実装する【画像処理100本ノック】
約 2 分
目次
概要
Q.88〜92ではk-means法を実装します。前半は画像ごとの特徴ベクトルをクラスタリングし、 後半は画像内の全画素をRGB空間でクラスタリングして代表色へ減色します。
k-meansの反復処理
k-meansは次の2処理を、割り当てが変わらなくなるまで繰り返します。
- 各データを最も近い重心へ割り当てる
- クラスタ内のデータの平均から重心を更新する
while (changed) {
changed = assignNearestCentroid(features, centroids, labels);
centroids = updateCentroids(features, labels, k);
}
画像特徴のクラスタリング(Q.88〜90)
| 問題 | 内容 |
|---|---|
| Q.88 | ランダムな初期ラベルからクラスタごとの重心を作る |
| Q.89 | 再割り当てと重心更新を収束まで繰り返す |
| Q.90 | 初期ラベルを変え、結果の変化を確認する |
入力にはQ.84と同じ色ヒストグラム特徴を使います。正解ラベルを使わず、色分布の近い画像が 同じグループへ集まるかを確認します。
画像のk-means減色(Q.91、Q.92)
画像1枚の各画素をRGBの3次元データとして扱います。Q.91では5個の初期代表色を選び、各画素を 最も近い色へ分類します。Q.92では代表色をクラスタ内画素の平均へ更新し、収束まで繰り返します。
最後に各画素を所属クラスタの代表色で置き換えると、画像全体を5色で表現できます。Q.6の 固定した4階調への減色と違い、入力画像の色分布に応じた代表色が得られます。
初期値と空クラスタ
k-meansは初期重心によって局所解が変わります。クラスタへ画素が1つも割り当てられない場合の 処理も必要です。実装を読むときは、収束条件、初期化、空クラスタの扱いを確認します。
おすすめの記事
最新の記事
よく読まれている記事
タグから探す
- javascript129
- typescript66
- node.js54
- linux54
- 画像処理48
- amazon-aws47
- アルゴリズム37
- canvas35
- html529
- 画像処理100本ノック27
- php24
- centos24
- python22
- 競技プログラミング21
- mac21
- mysql20
- opencv17
- 雑談16
- 機械学習16
- docker16
- wordpress15
- atcoder14
- apache12
- データベース12
- amazon-s312
- red-hat12
- prisma12
- ubuntu11
- github10
- git10
- react10
- mariadb10
- vue.js9
- aws-cdk9
- css38
- 可視化8
- 小ネタ8
- next.js8
- nestjs8
- amazon-lightsail7
- ブログ6
- cms6
- oracle6
- perl6
- gitlab6
- iam5
- amazon-ec25
- 資格試験5
- aws-amplify5
- curl4