によって実行されるクラスタリングの種類は、scipy.cluster.vq
間違いなく後者(類似した画像のグループ)の種類です。
に実装されている唯一のクラスタリングアルゴリズムscipy.cluster.vq
はK-Meansアルゴリズムです。これは通常、入力データをn次元ユークリッド空間の点として扱い、その空間を分割して、新しい入力データを「例xは最も似ている」と言って要約できるようにします。重心y」。重心は、入力データの典型的な例と考えることができます。ベクトル量子化は、表示される各新しい画像の100ピクセルすべてを記憶する代わりに、新しい画像が最も似ている典型的な例を指す単一の整数を記憶できるため、簡潔な、または圧縮された表現につながります。
小さなグレースケール画像がたくさんある場合:
>>> import numpy as np
>>> images = np.random.random_sample((100,10,10))
つまり、100個の10x10ピクセルの画像があります。それらがすでにすべて同じような明るさとコントラストを持っていると仮定しましょう。scipy kmeansの実装では、フラットなベクトルが必要です。
>>> images = images.reshape((100,100))
>>> images.shape
(100,100)
次に、K-Meansアルゴリズムをトレーニングして、新しい着信画像を10個のクラスターのいずれかに割り当てることができるようにします。
>>> from scipy.cluster.vq import kmeans, vq
>>> codebook,distortion = kmeans(images,10)
最後に、10個のクラスターの1つに割り当てたい5つの新しい画像があるとします。
>>> newimages = np.random.random_samples((5,10,10))
>>> clusters = vq(newimages.reshape((5,100)),codebook)
clusters
5つの例のそれぞれに最も一致する重心の整数インデックスが含まれます。
これは一種のおもちゃの例であり、作業している画像の対象オブジェクトがすべて中央に配置されていない限り、素晴らしい結果は得られません。関心のあるオブジェクトは大きな画像のどこにでも表示される可能性があるため、通常、小さな画像の「パッチ」の重心を学習し、それらを大きな画像と畳み込み(多くの異なる場所で比較)、並進不変を促進します。