Kmeansを使用した画像クラスタリング

Kmeans は、クラスターの検出に関連する他のタスクに使用できます。 

4761065a6a4b12273ba86f6f4792c4f7.jpeg

導入

クラスタリングは教師なし機械学習手法です。これは、データセットにラベル、つまり説明変数によって検出されたパターンに関連付けられたターゲット変数がないことを意味します。

教師なし学習は、一見似ているパターンを見つけて同じバケツに入れるプロセスです。

最も一般的に使用される教師なし学習アルゴリズムの 1 つは、クラスタリングに使用される Kmeans です。これを使用すると、通常のデータをクラスタリングできるほか、画像内のカラー クラスタリングやさらなる分類のための次元削減などの他のタスクも実行できます。

さらに詳しく見てみましょう。

クメアン人

Kmeans は重心ベースのクラスタリング アルゴリズムです。言い換えれば、タスクを実行するときは、各クラスターの中心点とクラスター中心からの各データ ポイントの距離に基づいてすべての決定を行います。観測値とクラスター中心の間の距離が小さいほど、観測値がそのクラスターに属する確率が高くなります。

このアルゴリズムは点間のユークリッド距離を計算しますが、クラスターは円形になりますが、これは基本的に Kmeans の欠点です。結局のところ、すべてのパターンが円形を作成するわけではありませんよね? しかし、Kmeans を使用したデータ クラスタリングは非常に簡単です。データセットをアルゴリズムにフィードし、使用するクラスターの数を定義するだけです。残りは自動です。

from sklearn.cluster import KMeans
# Number of clusters
n = 3
# Fit and predict clusters
kmeans = KMeans(n_clusters= n).fit_predict(your_data)

ここで、Kmeans を使用して実行できる他の興味深いことについて学びましょう。

画像クラスタリング

最初に学ぶことは画像のクラスタリングです。Kmeans を使用すると、実際に画像をさまざまな色に分離できます。この演習用に作成されたこの画像を見てください。

178112aad50227a2021b135e7e51acd8.png

次に、matplotlib.image からイメージを読み取ることができます。作成されるオブジェクトは、高さ、幅、および赤、緑、青 (RGB) の色のピクセル数を含む 3 次元の 3 次元配列になります。次に、Kmeans で解釈できるフラットなピクセル配列になるように画像を再形成します。

# Read image
image = imread('/content/test_image.png')
# Reshape for KMeans
X = image.reshape(-1,3)

次に、クラスター化してみましょう。色が 3 つあるため、最適なクラスター数は 3 であると想像できます。試してみる必要があります。

# cluster
kmeans = KMeans(n_clusters = 3).fit(X)

ここで、Kmeans は画像に存在する色を識別し、それらを組み合わせようとします。赤、緑、黄色が見えるので、次のような考えになります。

  • このアルゴリズムは、要件に基づいて 3 つの個別のバケットを作成します。

  • 類似した色のピクセルを特定し、平均的な「ラベル」カラーを作成して、すべての類似した色相を同じバケットに入れます。つまり、すべての緑のトーンが一緒に、すべての黄色のトーンが一緒に、というようになります。

次のステップは、各バケットの「平均カラー ラベル」であるcluster_centers_を取得し、その新しい平均カラーを使用して元のカラーを上書きすることです。次に、元の画像のサイズに合わせて形状を変更します。

# Segmenting the colors
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)

次に、比較のために画像を並べてプロットしてみましょう。

# Setup figure size
plt.figure(figsize=(18,10))
# clustered image
plt.subplot(121)
plt.imshow(segmented_img)
#original image
plt.subplot(122)
plt.imshow(image)

5e25cf91ec101683b5fd2c4c49122e05.png

3 つのクラスターの画像 (左) と元の画像 (右)


ここでは、3 つのクラスター中心点を使用します。しかし、私たちは白い背景を考慮することを忘れているかもしれません。したがって、赤と黄色は一緒に貼り付けられ、2 つの色の混合 (平均) 色である「オレンジ」のバケツの下に配置されます。すごいですね。ここで、クラスターの中心点を 4 に設定して、結果を再度比較してみましょう。

# cluster
kmeans = KMeans(n_clusters = 4).fit(X)
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)
# Setup figure
plt.figure(figsize=(18,10))
# clustered image
plt.subplot(121)
plt.imshow(segmented_img)
plt.title('Reconstructed image with 4 clusters')
#original image
plt.subplot(122)
plt.imshow(image)
plt.title('Original Image');

779f9cf67e7a48766e3149f0b697b98e.png

4 つのクラスターの画像 (左) と元の画像 (右)

・ 終わり ・

幸せな生活

f337a675b5bfa7f0982564635e6ee7d9.png

この記事は学習とコミュニケーションのみを目的としています。侵害がある場合は、作成者に連絡して削除してください。

おすすめ

転載: blog.csdn.net/weixin_38739735/article/details/132705650